如果group1相同,Stata将group1的信息应用于其他组

时间:2016-11-09 10:15:31

标签: stata

假设我有

group1   group2   info
100     1       .
100     1       .
200     1       10
200     2       20
300     2       .  

然后,对于group1,复制group1'" info"如果group2相同,则为其他group1。

所以结果就是这样。

group1   group2   info
100       1       10
100       1       10
200       1       10
200       2       20
300       2       20

我尝试使用bysort做到这一点,但无法想办法做到这一点。

2 个答案:

答案 0 :(得分:1)

问题令人费解,因为该示例暗示变量group1无关紧要。我将采用示例而不是措辞作为确定性。

@timat的解决方案是沿着右边的行,但没有做任何事情来检查一个合理的约束,即组中的非缺失值应该是相同的。

一种方法取决于大多数egen函数尽可能忽略缺失值的事实。因此,当且仅当每个组中的最大值和最小值相同(并且没有丢失)时,只有一个不同的非缺失值,并且可以复制它以替换观察组内的缺失值。 (如果缺少所有值,则不会出现任何问题。)

clear
input group1   group2   info
100       1       .
100       1       .
200       1       10
200       2       20
300       2       . 
end 

bysort group2: egen max = max(info)
by group2: egen min = min(info)
replace info = max if max == min & missing(info) 

list, sepby(group2) 

     +------------------------------------+
     | group1   group2   info   max   min |
     |------------------------------------|
  1. |    100        1     10    10    10 |
  2. |    100        1     10    10    10 |
  3. |    200        1     10    10    10 |
     |------------------------------------|
  4. |    200        2     20    20    20 |
  5. |    300        2     20    20    20 |
     +------------------------------------+

答案 1 :(得分:0)

这样可行

bysort group2 (info): replace info = info[1]

在此找到解决方案: http://www.stata.com/statalist/archive/2006-10/msg00928.html