这不是 SQL 与普通 SAS 一样擅长的东西,但它肯定是可能的。
几个选项:
外部联接,使用 COALESCE。比其他选项更难编写,因为您必须在初始选择中将每个变量写出两次。
proc sql;
select coalesce(s1.id,s2.id) as id, coalescec(s1.race,s2.race) as race from (
(select * from sample2) s2
full outer join
(select *,"1" as sample1 from sample1) s1
on s2.id=s1.id);
quit;
与 EXISTS 子查询联合。速度较慢,取决于桌子的大小;如果这是一个 10k 表和一个 10 行表,这是一个快速的解决方案;如果是 2 个 10k 表,这很慢。
proc sql;
select * from sample1
union
select * from sample2 where not exists (
select 1 from sample1 where sample1.id=sample2.id
);
quit;
用 JOIN 联合。可能比上述查询更快,具体取决于索引等。
proc sql;
select * from sample1
union
select sample2.* from sample2
left join sample1
on sample1.id=sample2.id
where missing(sample1.id);
quit;
但 SAS 中最简单的解决方案无疑是在 SAS 中进行。
data sample12_view/view=sample12_view;
set sample1 sample2;
run;
proc sort nodupkey data=sample12_view out=sample12;
by id;
run;
或者
data sample12;
merge sample1(in=s1) sample2(in=s2);
by id;
run;
在这种情况下,s2 将替换 s1,因此如果您更喜欢其他选项,请更改合并语句的顺序。