2014-10-30 2 views
1

다양한 if 조건에 맞춰 누락되지 않은 값을 계산하려고합니다. 매달 max 번을 타십시오.Stata : 루프에서 egen 교체

gen xx1=. 
gen xx2=. 

forvalues i = 1/12{ 
bys state year month: replace xx1= 1 if month==`i' & no_monthsreport>=`i' 
bys state year month: replace xx2= sum(!missing(xx1)) 
bys state year month: egen tot_xx3 =max(xx2) 
} 

나는 egen 명령 replace 라하지 않을 수 있습니다 것으로 나타났습니다. 그래서 루프가 작동하지 않습니다. 더 많은 변수를 만들지 않고이 작업을 수행 할 수있는 방법이 있는지 궁금합니다.

답변

3

즉각적인 대답은 egenreplace 옵션이 제공되지 않는다는 것입니다,도 egen에 해당하는 replace 타입 명령이 있습니다. 따라서 drop 또는 rename 이전 결과는 egen 명령에 사용하려는 변수 이름과 같아야합니다.

그러나이 문제에서는 egen이 필요하지 않으며 루프도 잘못 배치 된 것처럼 보입니다. 나는 당신이 원하는 무엇을 이해하지 않는,하지만 난 당신이 아무것도 의존하지 않기 때문에

  1. by:의 프레임 워크 xx1의 계산에 필요하지 않은 것을 더 좋아

    gen xx1 = . 
    forvalues i = 1/12 { 
        replace xx1 = 1 if month == `i' & no_monthsreport >= `i' 
    } 
    bys state year month: gen xx2 = sum(xx1) 
    bys state year month: gen tot_xx3 = xx2[_N] 
    

    공지 것을 원한다고 생각 주변 관측 그룹에.

  2. 누적 합계 xx1의 계산은 한 번만 수행 할 수 있습니다. 건설 xx1으로

  3. 가 없거나 당신이 직접 1 초를 셀 수있을 때 missing() 기능을 해고하고 그것을 부정 할 필요가 없습니다 1. 경우 1. 따라서 xx1 정확하게없는 못하고 있습니다.

  4. 1의 누적 합계의 최대 값은 마지막 값입니다. yearmonth 당신에게 달려있다, 당신이 계산 state 별도로 할 것인지

(missing으로는. sum()에 의해 무시됩니다)하지만, 그 선택은 종종 버그의 원천입니다.