在Stata中,我想要一个由公式计算的变量,其中包括在变量ID
定义的块内乘以前一个值。我尝试使用延迟,但这对我不起作用。
在下面的公式中,Y-1
旨在表示上述值(滞后)。
gen Y = 0
replace Y = 1 if count == 1
sort ID
by ID: replace Y = (1+X)*Y-1 if count != 1
X Y count ID
. 1 1 1
2 3 2 1
1 6 3 1
3 24 4 1
2 72 5 1
. 1 1 2
1 2 2 2
7 16 3 2
答案 0 :(得分:1)
您的代码可以更加简洁。方法如下:
input X count ID . 1 1 2 2 1 1 3 1 3 4 1 2 5 1 . 1 2 1 2 2 7 3 2 end gen Y = count == 1 bysort ID (count) : replace Y = (1 + X) * Y[_n-1] if count > 1
虚拟(指标)变量的创建可以利用真或假表达式被评估为1或0这一事实。
by
之前的排序和后续的by
命令可以压缩为一个。请注意,我在ID
的块中明确指出,count
应保持排序。
这实际上是一个评论,而不是另一个答案,但如果这样表达的话就不那么清楚了。
答案 1 :(得分:0)
Y-1
,公式中的滞后将被翻译,如下所示。
gen Y = 0
replace Y = 1 if count == 1
sort ID
by ID: replace Y = (1+X)*Y[_n-1] if count != 1