如何从一个观察中获取数据并将其应用于组内的另一个观察?

时间:2014-03-05 08:21:35

标签: stata

未婚夫妇与其他人一起住在一所房子里。为了隔离这对夫妇的多少,我需要将两个收入加在一起。我使用的变量充当了partners_id的指针。使用partners_ididindividual_income如何将合作伙伴的收入用于他/她的合作伙伴?

这是我在下面的尝试:

summarize id, meanonly
capture gen partners_income = 0

forvalue ln = 1/`r(max)' {
    bys household (id): ///
    egen link_`ln' = total(individual_income) if partners_location==`ln')
    replace partners_income = link_`ln' if link_`ln' > 0 & id == `ln'
    drop link_*
} 

1 个答案:

答案 0 :(得分:1)

this FAQ中有一般性建议。

使用快速而肮脏的方法编写智能方法可能需要更长时间。

但是,有一种更聪明的方法。

暴力解决方案

这里的快速意味着相对快速的代码;对于非常大的数据集,这不能保证快速。

gen partners_income = . 
gen problem = 0 

合作伙伴收入变量的正确初始化是缺失,而不是零。不知道收入和收入为零是不同的条件。例如,如果某人没有伴侣,收入肯定会丢失。 (如果在稍后阶段,你想将缺失视为零,那取决于你,但你应该在这个阶段让它们保持不同。)

problem变量的原因将变得明显。

我看不出您capture的原因。

现在我们可以循环:

quietly forval i = 1/`=_N' { 
      su individual_income if id == partners_id[`i'], meanonly 
      replace partners_income = r(max) in `i' 
      if r(N) > 1 replace problem = r(N) in `i' 
}

所以,逻辑是

foreach观察

  1. 找到合作伙伴的标识符
  2. 发现收入:summarize, meanonly很快
  3. 应该一个值,所以我们是否应该从summarize的结果中选择最大值,最小值或平均值
  4. 但是如果summarize找到多个值,则不会假设某些内容(错误标识符或多个合作伙伴);稍后我们edit if problem并查看这些观察结果。
  5. 注意:

    我们可以通过修改

    将计算限制在同一个家庭,从而使比较更安全
    if id == partners_id[`i']
    

    if id == partners_id[`i'] & household == household[`i'] 
    

    在一个地方你有变量partners_location,它看起来像partners_id的拼写错误。

    可爱的解决方案

    假设合作伙伴将对方命名为合作伙伴(并且这不是探索异常的论坛),那么夫妻就会通过将“John Joanna”和“Joanna John”分类为“Joanna John”或者与数字标识符等效:

    gen first = cond(id < partner_id, id, partner_id) 
    gen second = cond(id < partner_id, partner_id, id) 
    egen joint = concat(first second), p(" ") 
    

    firstsecond仅表示数字或字母数字顺序;这适用于数字和字符串标识符。您可能需要使用排除条款,例如

    if !missing(partner_id) 
    

    现在

    bysort household joint : gen partners_income = income[3 - _n] if _N == 2 
    

    得到它? householdjoint的每个不同组合应恰好是我们感兴趣的2个观察值(因此限定符if _N == 2)。如果这是真的那么3 - _n给我们其他合作伙伴的下标,好像_n是1然后3 - _n是2,反之亦然。在by:下,下标始终在组内应用,因此_n在每个不同的组中运行1,2等。

    如果这看起来很神秘,那么Cox, N.J. 2008. The problem of split identity, or how to group dyads. Stata Journal 8(4): 588-591中的所有拼写都可以作为.pdf访问。