我有以下两个数据集
数据集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 的情况下执行此操作,即使用数据步骤?
答案 0 :(得分:3)
有很多方法可以做到这一点。最简单的方法是对两个数据集进行排序,然后使用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
添加的变量;新变量将来自第二个数据集B
。
当然,此解决方案不会保留数据集中观察结果的原始顺序 AND 仅适用,因为您的第二个数据集包含唯一值id
。
答案 1 :(得分:0)
我试过这个并且它对我有用,即使你想要保留在该列中的数据。为了完整起见,我还添加了一个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;