SAS:来自不同表的Concat列(相同的行数)

时间:2018-11-25 15:01:34

标签: merge sas

我有两个表,它们的行数相同,但是没有一列,我可以将它们连接在一起。喜欢:

data table1(keep=Model) table2(keep=MSRP);
    set sashelp.cars;
run;

为了实现以下目的,我如何组合表1和表2:

enter image description here

在python中,我会以pandas.concat([table1, table2], axis=1)的身份进行操作,但在这里我尝试尝试以下操作:

data cancated;
    set table1 table2;
run;

proc sql;
    create table joined as
    select * from table1
    union 
    select * from table2;

    delete from joined where Model is missing or MSRP is missing;
run;

但特别是第二个给了我错误:

  

错误:UNION的第一个贡献者的第1列不同   从第二个开始输入。

因此,如果我完全理解,就无法使用不同类型的变量进行这种连接。

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用merge语句而不使用任何by语句来获取来自两个或更多数据集的观测值的逐行匹配。

data concated;
  merge table1 table2;
run;

对于每个数据集,您也可以只使用单独的set语句。

data concated;
  set table1;
  set table2;
run;

区别在于两个数据集具有不同数量的观察值。使用merge时,观测值的数量将与较大数据集的数量相匹配。 (仅来自较小数据集的变量将保留其值。)使用set语句,结果将仅具有较小数据集中的观测值数量。当任何set条语句读取到输入数据集的末尾时,该步骤将结束。

答案 1 :(得分:1)

执行类似查询中的操作。您需要使用如下所示的行号,然后加入并删除。

 data table1(keep=Model var) table2(keep=MSRP var);
set sashelp.cars;
var = _n_;
run;

 proc sql;
 create table joined(drop=var) as 
 select a.*, b.* from table1 a
 full join table2 b
 on a.var = b.var;

 delete from joined where Model is missing or MSRP is missing
 ;