我在Stata有一个很大的强不平衡面板,每个横截面只有一些观察,其余的是NA(。)。
我想在每个横截面中覆盖不是最后20个非NA观测值的所有非NA观测值。我不确定如何正确指定范围,但您可以在下面看到我的想法。观察结果之间存在差距。
由于
*编辑
我删除了代码,因为它创造了不确定性。它包括在内以显示我曾尝试过的内容。
我的横截面尺寸标识符是xsection 我的时间维度标识符是id01
*编辑
我在下面创建了一个示例。代码需要提取变量x中每个横截面的最后3个非NA(。)值,并将它们输入到新变量z中。或者,x中的所有观测都应设置为。除了最后3个(允许的间隙)。如果创建一个新变量z,或者替换x中的观察值使其看起来像z,则无关紧要。
id01 xsection x z
2005 1 20 .
2006 1 21 .
2007 1 22 .
2008 1 23 23
2009 1 37 37
2010 1 38 38
2011 1 . .
2012 1 . .
2005 2 24 .
2006 2 25 .
2007 2 21 .
2008 2 27 27
2009 2 33 33
2010 2 . .
2011 2 37 37
2012 2 . .
答案 0 :(得分:0)
这个答案有点笨拙,但它应该完成工作。如果x是要将值替换为缺失的变量,
by xsection: gen maxCount = _N
by xsection: gen counter = _n
gen dropVar = maxCount - counter
replace x = . if dropVar >= 20
我很确定应该包括等号,但这很容易检查。
答案 1 :(得分:0)
请注意,NA是其他一些程序的行话,但不是Stata原生的行话。 Stata称这些"缺失值"。
如果你只是(1)将观察值与缺失值分开,那么立即(2)确定最后这么多具有非缺失值的观测结果来自其他观测值的排序,那些具有非缺失值的观测值。
. clear
. input id01 xsection x z
id01 xsection x z
1. 2005 1 20 .
2. 2006 1 21 .
3. 2007 1 22 .
4. 2008 1 23 23
5. 2009 1 37 37
6. 2010 1 38 38
7. 2011 1 . .
8. 2012 1 . .
9. 2005 2 24 .
10. 2006 2 25 .
11. 2007 2 21 .
12. 2008 2 27 27
13. 2009 2 33 33
14. 2010 2 . .
15. 2011 2 37 37
16. 2012 2 . .
17. end
. gen ismiss = missing(x)
. bysort ismiss xsection (id01) : gen z_last = z if _N - _n < 3
(10 missing values generated)
. sort id01 xsection
. assert z_last == z
此处z
已按要求提供,z_last
已计算并显示为等效。