Stata - 仅当“夹在”相同的值时才会丢失填充

问题描述 投票:0回答:1

我在 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 missing-data
1个回答
0
投票

这是一种方法。

  1. 插值或插补的一种方法就是将最后一个已知值向前推进。在 Stata 中,这在 https://www.stata.com/support/faqs/data-management/replacing-missing-values/

    中进行了讨论
  2. 另一种方法是线性插值。当且仅当插值是平坦的时,线性插值将产生与方法 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()
选项。

© www.soinside.com 2019 - 2024. All rights reserved.