如何使用其他观测值R或STATA填写观测值 [英] How to fill in observations using other observations R or Stata

查看:17
本文介绍了如何使用其他观测值R或STATA填写观测值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个这样的数据集:

ID dum1 dum2 dum3 var1
1  0    1    .    hi
1  0    .    0    hi
2  1    .    .    bye
2  0    0    1    .

我尝试做的是,如果缺少观察结果,我希望根据相同的ID填充信息。所以我的最终产品应该是这样的:

ID dum1 dum2 dum3 var1
1  0    1    0    hi
1  0    1    0    hi
2  1    0    1    bye
2  0    0    1    bye

有什么方法可以在R或Stata中完成此操作吗?

推荐答案

继续讨论STATA解决方案。由@Pear Spencer提供的解决方案从缺少值的观察中往后看和向前看,因此对于每组只有两个观察的示例来说很好,对于其他一些情况也可能很好。

另一种方法适当地使用来自SSC的社区贡献的命令mipolatestripolate,也在https://www.statalist.org/forums/forum/general-stata-discussion/general/1308786-mipolate-now-available-from-ssc-new-program-for-interpolation

中解释

先举例,后评论:

clear

input ID dum1a dum2a dum3a str3 var1a
1  0    1    .    "hi"
1  0    .    0    "hi"
2  1    .    .    "bye"
2  0    0    1    ""
2  0    1    .    "" 
end

gen long obsno = _n 

foreach v of var dum*a { 
    quietly count if missing(`v') 
    if r(N) > 0 capture noisily mipolate `v' obsno, groupwise by(ID) generate(`v'_2) 
}

foreach v of var var*a { 
    quietly count if missing(`v') 
    if r(N) > 0 capture noisily stripolate `v' obsno, groupwise by(ID) generate(`v'_2) 
} 

list 

     +----------------------------------------------------------------+
     | ID   dum1a   dum2a   dum3a   var1a   obsno   dum3a_2   var1a_2 |
     |----------------------------------------------------------------|
  1. |  1       0       1       .      hi       1         0        hi |
  2. |  1       0       .       0      hi       2         0        hi |
  3. |  2       1       .       .     bye       3         1       bye |
  4. |  2       0       0       1               4         1       bye |
  5. |  2       0       1       .               5         1       bye |
     +----------------------------------------------------------------+

备注:

  1. mipolatestripolategroupwise选项使用规则:当且仅当该组中只有一个不同的非缺失值时,才用该组中的非缺失值替换该组中的缺失值。因此,如果一个组中的非缺失值都是1,或者都是42,或者是其他值,则插值使用1或42,或者是其他值。如果组中的非缺失值为0和1,则不进行。

  2. 此处创建的变量obsno在该内插中不起作用,仅需要匹配mipolate的常规语法。

  3. 这里没有假设组只由两个观察组成或具有相同数量的观察。这些问题的一个共同领域是关于家庭的数据,只要某些变量只为某些家庭成员记录,但希望将记录的值传播给其他家庭成员。当然,在真实的数据中,家庭成员通常不止两个,家庭成员的数量会有所不同。

    /li>
  4. 这个问题暴露了mipolate, groupwisestripolate, groupwise中的一个小错误:如果没有要做的事情,它不会适当地退出,就像dum1a中没有遗漏的值一样。在上面的代码中,当且仅当缺少的值被计入时,这是通过请求内插来捕获的。在未来的某个日期,错误将被修复,答案中的代码将相应简化,或者作为程序作者,我打算这样做。

  5. mipolate, groupwisestripolate, groupwise如果组具有两个或多个不同的非缺失值,则

  6. mipolate, groupwisestripolate, groupwise都会退出,并显示错误消息;然后不会对任何组执行内插,即使某些组没有问题。这就是代码capture noisily的要点:上面没有回显dum2a的错误消息。作为程序作者,我正在考虑增加一个选项,这样这样的组将被忽略,但插补将只针对具有一个不同的非缺失值的组进行。

这篇关于如何使用其他观测值R或STATA填写观测值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆