2017-05-18 2 views
0

2006 년부터 2012 년까지 패널 데이터 집합이 있습니다. 새 변수 entry이 생성되었으므로 국가에 입력 한 회사의 값은 1입니다. 예를 들어, 기업이 시간 (t)에서 매출액에 대해 가치 (.)를 잃어버린다면, 그것은 0의 가치를 취하고 (t + 1)에서 다른 나라에 들어가면 매출액에 대해 가치가있다. 1의 값. 내 데이터 이후Stata의 첫 번째 발생 및 마지막 발생

egen firm_id=group(firm country) 

by firm_id (year), sort: gen byte entry = /// 
sum(inrange(sales, 0,.)) == 1 & sum(inrange(sales[_n - 1],0,.)) == 0 

내가 명령에이 년 동안 관찰을 제외 2006 년 시작 : 그러나

bysort firm (year) : replace entry = 0 if year == 2006 

내가 원하는 것은 대신 인 다음과 같이 나는이 사용되는 성공적인 명령은 (예 : t + 2 또는 t + 3에서)의 값이 입력 된 후 다음 연도에 누락 된 값을 갖습니다.

내가 출구를 적용하지만 올해의 정렬 순서 변경 같은 : 다시

bysort firm (year) : replace exit = 0 if year == 2012 

: 내 데이터의 마지막 관찰 해 2012 년 이후

gen nyear = -year 

by firm_id (nyear), sort: gen byte exit = /// 
sum(inrange(sales, 0,.)) == 1 & sum(inrange(sales[_n - 1],0,.)) == 0 

나는 그 관찰 제외 여기 내가 원하는 것은 0 값을 갖는 대신이 빠져 나온 후 몇 년 동안 누락 된 값을 갖는 것입니다 (예 : t + 2 또는 t + 3).

답변

0

내가 이해하는 한, 변수가 sales이면 누락되었지만 그렇지 않다면 누락되었습니다.

한 국가에있는 회사의 첫 번째 연도와 마지막 연도를 나타내는 지표가 필요합니다.

나는 이것이 당신을 가장 많이 얻는다 고 생각합니다. 첫째, 예제 데이터가 필요합니다!

첫 번째 날짜와 마지막 날짜는 판매중인 조건부의 최소 및 최대 날짜입니다.

egen first = min(cond(sales < ., year, .)), by(firm_id) 
egen last = max(cond(sales < ., year, .)), by(firm_id) 

기술에 대한 설명은 section 9 of this paper을 참조하십시오. 그런 다음 (1.) 지표 직접

gen isfirst = cond(year == first, 1, .) 
gen islast = cond(year == last, 1, .) 

list, sepby(firm_id) 

    +----------------------------------------------------------+ 
    | firm_id year sales first last isfirst islast | 
    |----------------------------------------------------------| 
    1. |  1 2006  . 2008 2010   .  . | 
    2. |  1 2007  . 2008 2010   .  . | 
    3. |  1 2008  42 2008 2010   1  . | 
    4. |  1 2009  42 2008 2010   .  . | 
    5. |  1 2010  42 2008 2010   .  1 | 
    6. |  1 2011  . 2008 2010   .  . | 
    7. |  1 2012  . 2008 2010   .  . | 
    |----------------------------------------------------------| 
    8. |  2 2006  . 2007 2008   .  . | 
    9. |  2 2007  666 2007 2008   1  . | 
10. |  2 2008  666 2007 2008   .  1 | 
11. |  2 2009  . 2007 2008   .  . | 
12. |  2 2010  . 2007 2008   .  . | 
13. |  2 2011  . 2007 2008   .  . | 
14. |  2 2012  . 2007 2008   .  . | 
    +----------------------------------------------------------+ 

에 따라 I 2006 년 또는 2012 년 당신은 단지 cond() 구문에 특별한 규칙을 만들 수에 대해 서로 다른 아무 짓도했다.

+0

안녕하세요. Nick 님,이 작품을 이용해 주셔서 감사합니다. 입력 후 나가기 후 몇 년 동안 누락 된 값을 생성합니다. 그러나, 나는 그것의 입력의 이전 년간 누락 값을 생성 싶지 않아 게다가. 예를 들어 firm_id (1) 변수 "isfirst"를 고려한 예제에서 나는 2006 년과 2007 년에 "누락"대신 "0"을 갖고 싶습니다. 다시 말하면, 그 엔트리의 이전 년도에 대한 0 값은 그 엔트리 이후의 후속 연도에 대한 값을 잃어버린다. –

+0

학생을위한 간단한 운동! 힌트 :'cond (year

+0

나는 또한 새 변수를 생성하여 이것을 관리했지만 힌트가 훨씬 뛰어나므로 다른 변수를 작성할 필요가 없습니다. 고마워. 닉. 도와 주셔서 정말 고맙습니다. –

관련 문제