以下の条件で新しい変数WHLDRを作成する必要があります。私は最後のものが正しいかどうかわからない。したがって、rel = 0かつref_1 = 1の場合、multi> 1かつref_1 = 0の場合、whldr = 0でなければこの条件を満たす最初のIDはwhldr = 1であり、続行されます。これは私のコードとサンプルのデータです。ここで最初の関数を使用する
data temp_all;
merge temp_1 (in=inA)
temp_2 (in=inB)
temp_3 (in=inC)
;
by id;
firstid=first.id;
if multi = 1 then do;
if rel = 0 then whldr=1;
else whldr = 0;
end;
else if multi > 1 and ref_1 >= 1 then do;
if rel =0 and ref_1=1 then whldr=1;
else whldr = 0;
end;
else if multi > 1 and ref_1 = 0 then do;
if rel =0 and ref_1=1 then do;
if rel =0 and ref_0 ne '0' then do;
if first.id=1 then whldr=1 ;
else whldr=0;
end;
end;
end;
run;
はサンプルデータです:あなたはWHLDR
という名前の変数を持っていて、それが値1を持つ最初の観測をしたい場合は
data have ;
input id a rel b multi ;
cards;
105 . 0 0 1
110 1 0 1 1
110 0 1 1 1
110 . 2 1 1
113 1 0 1 1
113 2 1 1 1
113 0 2 1 1
113 0 2 1 1
135 1 0 1 1
135 0 1 1 1
176 1 0 1 1
176 0 1 1 1
189 1 0 1 1
189 2 1 1 1
189 0 4 1 1
189 0 4 1 1
;
詳しくは、説明してください。例えば、あなたはどのように人を定義していますか?データセット全体の中で最初の人が欲しいですか?または状態のような他のグループ化変数内にありますか?入力例と結果データの例は、あなたが望むものを明確にするのに役立ちます。 – Tom
これは私のコードです。人は誰ですか、私は最後の条件を満たすデータセット全体の中で最初の人を欲しいです。私は人のレベルのデータを持っており、その条件を満たす最初の人(B)を取得しようとしています。その結果は家計レベルのデータセットになります。 – user601828
複雑なif/then構造を評価して、それが正しいかどうかを調べることはできません。しかし、あなたが望む観測結果にフラグを立てるならば、おそらく、出力結果セットを得るために 'output;'と 'stop;'ステートメントを追加するだけでよいでしょう。 – Tom