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