我在 R 和 Python 中看到过这方面的问题(例如,NA 仅当使用 dplyr“夹在”相同的值时才填充),但无法在 Stata 中找到如何执行此操作的答案。
我只想在面板数据集中填充缺失值,前提是它介于 2 个相等的非缺失值之间。例如,如果我有
clear
input score group
2005 1
2006 .
2007 .
2008 .
2009 1
2010 8
2011 1
2012 .
2013 5
2014 3
2015 4
end
2006年、2007年、2008年缺失的观测值将被补成1,但2012年缺失的观测值将不被填充
如果前一个值和下一个值相等,我尝试用前一个值填充,但这不考虑两个相等的非缺失值之间夹着超过 1 个缺失的情况。
任何想法将不胜感激。
这是一种方法。
插值或插补的一种方法就是将最后一个已知值向前推进。在 Stata 中,这在 https://www.stata.com/support/faqs/data-management/replacing-missing-values/
中进行了讨论另一种方法是线性插值。当且仅当插值是平坦的时,线性插值将产生与方法 1 相同的答案,以便插值在每一端等于已知值。
毫无疑问,您可以插值并检查稳定性,但我的猜测是,这将与此处给出的代码一样多。
clear
input score group
2005 1
2006 .
2007 .
2008 .
2009 1
2010 8
2011 1
2012 .
2013 5
2014 3
2015 4
end
clonevar guess1 = group
replace guess1 = guess1[_n-1] if missing(guess1)
ipolate group score, gen(guess2)
gen goodguess = guess1 if guess1 == guess2
list, sepby(goodguess)
+--------------------------------------------+
| score group guess1 guess2 goodgu~s |
|--------------------------------------------|
1. | 2005 1 1 1 1 |
2. | 2006 . 1 1 1 |
3. | 2007 . 1 1 1 |
4. | 2008 . 1 1 1 |
5. | 2009 1 1 1 1 |
|--------------------------------------------|
6. | 2010 8 8 8 8 |
|--------------------------------------------|
7. | 2011 1 1 1 1 |
|--------------------------------------------|
8. | 2012 . 1 3 . |
|--------------------------------------------|
9. | 2013 5 5 5 5 |
|--------------------------------------------|
10. | 2014 3 3 3 3 |
|--------------------------------------------|
11. | 2015 4 4 4 4 |
+--------------------------------------------+
你提到面板数据没有举例说明,但这种方法可以很容易地扩展到面板数据。根据需要使用
by:
或 by()
选项。