具有不同列的联合表

时间:2016-02-09 06:25:07

标签: sas proc-sql

我有两个大表(每个约1GB),有许多不同的列,我想在sas中执行一个联合。

目前,我使用以下方法使用proc sql和union all。

SELECT A, B, '' as C from Table_1 UNION ALL SELECT '' as A, B, C from Table_2

然而,这不是优选的,因为我在两个表中都有几十行,而且我不断添加它们。因此,我正在寻找一种自动创建空白列的方法,而不必明确地将它们写出来。

我也尝试了以下查询:
select * from (select * from Table_1), (select * from Table_2)

然而,这似乎是计算密集型的,需要永远运行。

有没有更好的方法来做到这一点?我也愿意使用data set而不是proc sql;

2 个答案:

答案 0 :(得分:6)

简单的数据步骤应该做的事情:

data result_tab;
set Table_1 Table_2;
run;

这将重写两个表。表_2中的记录将添加到result_tab的末尾。数据步骤中的Set语句将声明两个输入表中的变量。

答案 1 :(得分:0)

不幸的是,PROC SQL确实要求所有数据集在使用UNION时具有相同的变量。如果您可以使用DATA SET,那么PROC SORT NODUPKEY将是最简单的(可能不是最有效)。要使用PROC SQL,您需要为缺少的变量分配NULL值。例如:

data dset1;
input var1 var2;
datalines;
1 2
2 2
3 2
;
run;

data dset2;
input var1 var3;
datalines;
4 1
5 1
6 1
;
run;

PROC SQL;
    CREATE TABLE dset3 AS
    SELECT var1, var2, . AS var3 FROM dset1 
    UNION
    SELECT var1, . AS var2, var3 FROM dset2
QUIT;

PROC PRINT DATA=dset3; RUN;