本文介绍了基于附近单元格的线性预测来替换缺失值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个数据集(tsset
),它有一些年份的观测值,但另一些年份没有:
year x
1990 600
1991 .
1992 .
1993 .
1994 .
1995 1100
1996 .
1997 .
1998 1700
假设我愿意假设两个非缺失年份(例如1990年和1995年)之间的每个缺失观测值都可以通过所述非缺失年份之间的线性预测来推算,这使得数据如下
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]
的技术,如果我只是想填充前一个单元格中缺少的值,但不确定如何进行扩展以解决上面描述的问题。
推荐答案
您要求的是线性插值法。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
安装并阅读其帮助。 这篇关于基于附近单元格的线性预测来替换缺失值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!