除了最后20个非NA之外,Stata会覆盖横截面中的所有观测值

时间:2015-05-15 11:30:55

标签: panel stata

我在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         .             .

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已计算并显示为等效。