Stata应用组1';如果组1相同,则将信息发送给其他组

Stata应用组1';如果组1相同,则将信息发送给其他组,stata,Stata,如果我有 group1 group2 info 100 1 . 100 1 . 200 1 10 200 2 20 300 2 . 然后,对于group1,如果group2相同,则将group1的“信息”复制到其他group1 所以结果是这样的 group1 group2 info 100 1 10 100 1 10 200

如果我有

group1   group2   info
100     1       .
100     1       .
200     1       10
200     2       20
300     2       .  
然后,对于group1,如果group2相同,则将group1的“信息”复制到其他group1

所以结果是这样的

group1   group2   info
100       1       10
100       1       10
200       1       10
200       2       20
300       2       20
我试着用bysort做这件事,但想不出一个方法来做这件事。

这会管用的

bysort group2 (info): replace info = info[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 |
     +------------------------------------+