使用另一个数据集更新一个数据集而不使用PROC SQL

时间:2013-01-22 16:44:18

标签: sas

我有以下两个数据集

数据集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 的情况下执行此操作,即使用数据步骤

2 个答案:

答案 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;