Stata:在循环中替换egen

Stata:在循环中替换egen,stata,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

我试图根据不同的
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。所以循环不起作用。我想知道是否有一种方法可以在不创建更多变量的情况下实现这一点

直接的答案是
egen
没有
replace
选项,也没有与
egen
对应的
replace
类型命令。因此,您需要
drop
rename
使用与要在
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] 
注意

  • 计算
    xx1
    不需要
    by:
    的框架,因为任何东西都不依赖于周围的观察组

  • 只需计算一次
    xx1
    的运行或累计总和

  • 根据构造
    xx1
    缺失或1。因此,
    xx1
    在不为1时并不精确缺失。无需启动
    missing()
    函数,然后在可以直接计算1时将其取反

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

  • 您是否希望按
    分别进行计算取决于您,但这一选择往往是错误的根源