具有不同列的联合表
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;
我有两个大表(每个约 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;