SAS PROC SQL使用FULL JOIN连接两个表

时间:2014-12-22 09:47:05

标签: sas

假设我有两个数据集,

--Table 1--      --Table 2--
ID  Amount       ID  Amount1 Code
A01   0.1        A01  0.3     x
A02   0.2        A02  0.2     y
A02   0.3        A03  0.4     g 
A03   0.4        A03  0.5     u
A05   0.6        B01  0.1     k

我正在尝试通过连接表1和表2来创建新数据集(表3)。 预期的最终结果应如下所示:

--Table 3--
ID  Amount  Amount1  Code
A01   0.1     .       .
A01   .       0.3     x
A02   0.2     0.2     y
A02   0.3     .       .
A03   0.4     0.4     g
A05   0.6     .       .
B01   .       0.1     k

表格将根据ID加入,其中金额和金额1同时进行比较。 我尝试使用PROC SQL FULL JOIN,但结果似乎有点奇怪。 谢谢。

2 个答案:

答案 0 :(得分:6)

新手用户唯一可能不明显的事情是必须对ID进行coalesce()。

proc sql;
create table joined as
select coalesce(a.ID, b.ID) as ID, a.Amount, b.Amount1, b.Code
from Table1 a
full join Table2 b
on a.ID = b.ID;
quit;

无论如何,SAS这样做的方法是合并两个表。如果您对表进行了预先排序或对ID具有索引,那么这也会更有效:

data merged;
merge table1 table2;
by ID;
run;

答案 1 :(得分:0)

以下代码产生的结果与您要求的结果非常接近,尽管我无法弄清楚为什么" u"在您请求的数据集中设置为缺失。

    proc sql;
      create table joined as
      select coalesce(a.ID, b.ID) as ID, a.Amount, b.Amount, b.Code
      from Table1 a natural full join Table2(rename=(amount1=amount)) b
       ;
    quit;