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的情况下执行此操作?

4

2 回答 2

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

当然,此解决方案不会保留数据集中观察值的原始顺序,并且仅适用于的第二个数据集包含 的唯一值id

于 2013-01-22T17:12:04.920 回答
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;
于 2013-01-23T09:51:52.517 回答