Stata:在循环中替换egen

时间:2014-10-30 14:31:34

标签: stata

我正在尝试计算不受if条件影响的非缺失值。然后每月拿max

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。所以循环不起作用。我想知道是否有办法在不创建更多变量的情况下这样做。

1 个答案:

答案 0 :(得分: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.因此当{1}}不是1时,xx1不会错过。不需要启动missing()函数和当你可以直接数1时,否定它。

  4. 运行总和1s的最大值只是最后一个值。 (sum()忽略缺失。)

  5. 您是否希望state单独进行计算,year month取决于您,但该选择通常是错误的来源。