根据附近细胞的线性预测替换缺失值

时间:2016-10-22 12:57:40

标签: stata

我有一个数据集(tsset),它在某些年份中有观察结果,但在其他年份没有:

year x
1990 600
1991 .
1992 .
1993 .
1994 .
1995 1100
1996 .
1997 .
1998 1700

假设我愿意假设两个非缺失年份(例如1990年和1995年)之间的每个缺失观察可以通过所述非缺失年份之间的线性预测来估算,这使得数据如< / p>

year  x
1990  600
1991 [700]
1992 [800]
1993 [900]
1994 [1000]
1995  1100
1996 [1300]
1997 [1500]
1998  1700

无论如何有效地做到这一点?我目前正在使用像cond(year>1990 & year <1995, [Value if True], [Value if False])这样的东西,但我不知道从1991年到1994年的所有年份都有一个很好的方法,将1990年作为下限,1995年作为上限。

Stata的documentation演示了使用x[_n-1]的技巧,如果我只想填充前一个单元格中的缺失值,但不知道如何扩展它以解决我所描述的问题以上。

1 个答案:

答案 0 :(得分:2)

您要求的是线性插值。 ipolate在Stata的大部分历史中都是这样做的命令。不需要循环。

clear 
input year x
1990 600
1991 .
1992 .
1993 .
1994 .
1995 1100
1996 .
1997 .
1998 1700
end 
ipolate x year, gen(xint) 
list , sep(0)

     +--------------------+
     | year      x   xint |
     |--------------------|
  1. | 1990    600    600 |
  2. | 1991      .    700 |
  3. | 1992      .    800 |
  4. | 1993      .    900 |
  5. | 1994      .   1000 |
  6. | 1995   1100   1100 |
  7. | 1996      .   1300 |
  8. | 1997      .   1500 |
  9. | 1998   1700   1700 |
     +--------------------+

请注意,原始变量保持不变,这在分析审计跟踪方面是谨慎的。

ipolate扩展到在不同组中单独完成的插值,最常见的是在实践面板或纵向数据中使用不同的面板(人员,公司,国家,站点,站点等),随着时间的推移,标识符不同。

自然有很多其他类型的插值。

mipolate(SSC)是一个用户编写的程序,它概括了ipolate。请参阅 here for a discussion或仅使用ssc install mipolate进行安装并阅读其帮助。