我正在尝试计算不受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。所以循环不起作用。我想知道是否有办法在不创建更多变量的情况下这样做。
答案 0 :(得分:3)
直接答案是egen
没有replace
选项,也没有replace
- 类型命令对应egen
。因此,您需要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]
请注意
by:
的计算不需要xx1
的框架,因为没有任何东西取决于周围的观察组。
xx1
的运行或累计总和的计算只能进行一次。
构造xx1
要么缺失要么是1.因此当{1}}不是1时,xx1
不会错过。不需要启动missing()
函数和当你可以直接数1时,否定它。
运行总和1s的最大值只是最后一个值。 (sum()
忽略缺失。)
您是否希望state
单独进行计算,year
和 month
取决于您,但该选择通常是错误的来源。