2014-10-30 49 views
1

我正在嘗試計算非缺失值,並受易變的if條件的影響。然後每個月拿maxStata:替換循環中的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 d。所以循環不起作用。我想知道是否有辦法做到這一點,而不創建更多的變量。

回答

3

即時回答是egen沒有replace選項,也沒有replace類型的命令對應於egen。因此,您需要使用droprename以前的任何結果,其變量名稱與您要在egen命令中使用的變量名稱相同。

然而,在這個問題中,egen不需要任何方式,並且循環看起來也是錯誤的。我不明白你想要做什麼,但我想你想要的東西更像

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] 

注意

  1. 不需要的by:一個框架的xx1計算如無依賴關於周圍的觀察組。

  2. xx1的運行或累計總和的計算只能完成一次。

  3. 通過建設xx1丟失或1。因此xx1不正是失蹤時,它不是1.沒有必要火起來的missing()功能,然後否定它時,你可以直接計數1秒。

  4. 運行總和爲1的最大值只是最後一個值。 (Missings由sum()忽略)。

無論你想計算被state單獨進行,yearmonth是你的,但選擇往往是錯誤的根源。