2014-11-11 3 views
1

특정 나이 이전에 이벤트가 발생한 횟수를 계산하려고합니다. 수명 (age_at_event1-age_at_event3) 동안의 각 이벤트의 나이뿐만 아니라 그러한 이벤트를 세는 데 더 이상 관심이없는 나이 (stop_age)를 보여주는 데이터가 있습니다. 관심 정지 이벤트가 중지 이전에 발생한 횟수를 계산하는 변수 (sum_event)를 만들고 싶습니다. 예 :Stata : 특정 범위에 대해 행에 걸쳐 누락이 없는지 계산합니다.

ID age_event1 age_event2 age_event3 stop_age sum_event 
1   10   17   45    34  2   
2   23   31   32    54  3 
3   25   55   .    32  1  
4   21   .   .    22  1 

적절한 sum_event 변수는 어떻게 만듭니 까? 당신이 당신의 데이터를 reshape하지 않으려면

+1

에서 제시해주세요 항상 기대되는 연구 노력을 반영하는 유혹적인 코드입니다. –

답변

1

, 당신은 변수를 통해 루프는 셀 수 :

<snip> 

gen sumevent2 = 0 
forvalues i = 1/3 { 
    replace sumevent2 = sumevent2 + (age_event`i' < stop_age) 
} 
: 몇 가지 패턴에 따라 번호가 매겨진 변수, 당신은 뭔가를 시도 할 수 있습니다 들어

clear 
set more off 

*----- example data ----- 

input /// 
ID age_event1 age_event2 age_event3 stop_age sum_event 
1   10   17   45    34  2   
2   23   31   32    54  3 
3   25   55   .    32  1  
4   21   .   .    22  1 
end 

list 

*----- what you want ----- 

gen sumevent2 = 0 
foreach var of varlist age_event1 age_event2 age_event3 { 
    replace sumevent2 = sumevent2 + (`var' < stop_age) 
} 

list 

reshape

또 다른 방법 : 미래의 질문

*----- what you want ----- 

<snip> 

reshape long age_event, i(ID) j(j) 
bysort ID: egen sumevent2 = total(age_event < stop_age) 
reshape wide // if you really need to go back to wide 

list 
+0

잘 처리되었습니다. 고맙습니다. age_event 변수를 하나씩 입력하지 않아도되는 방법을 알려주시겠습니까? 내 예제에도 불구하고 실제로 수십 개의 age_event 변수가 있습니다. 나는 forval 명령이 작동한다는 것을 알고 있지만, 구체적인 것은 확실하지 않습니다. – Julia

+0

'age_event *'를 시도해보십시오.하지만이 방법으로 시작하는 모든 변수를 정말로 포함시키고 싶습니다. 또한 답에'forvalues' 해결책을 추가했습니다. –

+0

http://www.stata-journal.com/sjpdf.html?articlenum=pr0046 여기 기술을 리뷰하십시오. –

관련 문제