仅在存在SAS SQL时选择变量

时间:2016-12-12 10:33:04

标签: sql variables sas exists

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语法。

非常感谢!

1 个答案:

答案 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;