2016-11-09 4 views
-1

ある場合のStataは他のグループにグループ1の情報を適用するには、私はその後GROUP1が同じ

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

があるとグループ2が同じであれば、グループ1のために、他のgroup1sにグループ1の「情報」をコピーしてください。

結果は次のようになります。

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

私はこの使用してbysortを実行しようとしましたが、これを行うための方法を考えることができませんでした。..

答えて

1

この例は変数group1が無関係であることを意味しているので、困惑しています。私は、言い回しではなく例を確定的なものとして取り上げます。

@timatによる解決策は、右の行に沿っていますが、グループ内の欠損値が同じでなければならないという賢明な制約をチェックすることはありません。

ほとんどのegen関数は、可能な範囲で欠損値を無視するという事実にヒントがあります。したがって、各グループの最大値と最小値が同一である(欠損していない)場合にのみ、1つの異なる非欠損値が存在し、観察グループ内の欠損値を置換するためにコピーすることができる。 (値がすべて失われても何も問題はありません)

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 | 
    +------------------------------------+ 
関連する問題