具有不同列的联合表

Union tables with different columns

我有两个大表(每个约 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;

一个简单的数据步骤应该做一件事:

data result_tab;
set Table_1 Table_2;
run;

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

不幸的是,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;