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