我有以下两个数据集
数据集 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的情况下执行此操作?
我有以下两个数据集
数据集 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的情况下执行此操作?
有很多方法可以做到这一点。最简单的方法是对两个数据集进行排序,然后使用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
。
当然,此解决方案不会保留数据集中观察值的原始顺序,并且仅适用于您的第二个数据集包含 的唯一值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;