以下の2つのデータセットがあります
データセット A
id age mark
1 . .
2 . .
1 . .
データセット B
id age mark
2 20 200
1 10 100
出力として以下のデータセットが必要です
出力データセット
id age mark
1 10 100
2 20 200
1 10 100
PROC SQLを使用せずにこれを実行する方法、つまりDATA STEPを使用する方法は?
以下の2つのデータセットがあります
データセット A
id age mark
1 . .
2 . .
1 . .
データセット B
id age mark
2 20 200
1 10 100
出力として以下のデータセットが必要です
出力データセット
id age mark
1 10 100
2 20 200
1 10 100
PROC SQLを使用せずにこれを実行する方法、つまりDATA STEPを使用する方法は?
これを行うには多くの方法があります。最も簡単な方法は、2 つのデータ セットを並べ替えてから を使用することMERGE
です。例えば:
proc sort data=A;
by id;
run;
proc sort data=B;
by id;
run;
data WANT;
merge A(drop=age mark) B;
by ID;
run;
秘訣は、追加する変数を最初のデータ セットから削除A
することです。新しい変数は 2 番目のデータ セットから取得されB
ます。
もちろん、このソリューションは、データセット内の観測の元の順序を保持せず、2 番目のデータセットに の一意の値が含まれているためにのみ機能しますid
。
その列に保存したいデータがある場合でも、これを試してみましたが、うまくいきました。完全を期すために、SQL バリアントも追加しました。
data a;
input id a;
datalines;
1 10
2 20
;
data b;
input id a;
datalines;
1 .
1 5
1 .
2 .
3 4
;
data c (drop=b);
merge a (rename = (a=b) in=ina) b (in = inb);
by id;
if b ne . then a = b;
run;
proc sql;
create table d as
select a.id, a.a from a right join b on a.id=b.id where a.id is not null
union all
select b.id, b.a from a right join b on a.id = b.id where a.id is null
;
quit;