我有一个数据集(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]
的技巧,如果我只想填充前一个单元格中的缺失值,但不知道如何扩展它以解决我所描述的问题以上。
答案 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
进行安装并阅读其帮助。