PROC SQL;
CREATE TABLE SET3 AS
SELECT
a.VAR1 , b.VAR1 AS P_VAR1 ,
a.VAR2
FROM SET1 AS a FULL JOIN SET2 AS B
ON a.VAR1 = b.VAR1
;
QUIT;
上面的代码创建了一个名为SET3的表,包括来自2个数据集的VAR1,以及VAR2,其中a.VAR1 = b.VAR1。
我希望此代码能够运行以包含VAR2 (如果可用) 。它有时不会,因此代码崩溃。
我可以通过用一些宏编写代码两次来做到这一点,但是想知道是否有可以使用的快速SQL语法。
非常感谢!
答案 0 :(得分:2)
一个选项是创建一个宏变量,它将具有VAR1或VAR1,VAR2,具体取决于它是否存在。 dictionary.columns
是您可以从中获取的元数据表,可在proc sql
中找到。
最终数据的顺序会略有不同(a.VAR1,a.VAR2,b.VAR1),但希望这不会成为问题。
proc sql noprint;
select cats('a.',name) into :varlist separated by ','
from dictionary.columns
where libname='WORK' and memname='SET1' and name in ('VAR1','VAR2');
quit;
%put &=varlist.;
PROC SQL;
CREATE TABLE SET3 AS
SELECT
&varlist. , b.VAR1 AS P_VAR1
FROM SET1 AS a FULL JOIN SET2 AS B
ON a.VAR1 = b.VAR1
;
QUIT;