2016-11-09 67 views
-1

假设我有塔塔将1组的其他组的信息,如果组1是一样的

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

然后,对于1组,1组复制的“信息”到其他group1s如果第2组是相同的。

那么结果会是这样。

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

我试图做到这一点使用bysort,但不能想办法做到这一点..

回答

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 | 
    +------------------------------------+