Select 变量仅当存在 SAS SQL

Select variable only if exists SAS SQL

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 的 table,包括来自 2 个数据集的 VAR1 以及 VAR2,其中 a.VAR1=b.VAR1。

我希望此代码 运行 包括 VAR2 如果它可用。有时不是,因此代码崩溃。

我可以通过使用一些宏编写代码两次来做到这一点,但想知道是否有可以使用的快速 SQL 语法。

非常感谢!

一个选项是创建一个宏变量,该变量将具有 VAR1 或 VAR1,VAR2,具体取决于它是否存在。 dictionary.columns 是元数据 table,您可以从中获取它,它在 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;