2014-10-30 218 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是你的,但选择往往是错误的根源。