2016-11-09 53 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 | 
    +------------------------------------+