首页 > 解决方案 > SAS SQL根据宏变量结果创建表

问题描述

我正在努力根据宏变量结果在 proc sql SAS 中创建一个新表。

1)我想检查是否存在必要的表。

2)如果它存在,那么我想用给定的参数创建一个新表。

3)如果它不存在,我想创建一个具有不同参数的新表。

我想我知道如何检查表是否存在(日志结果中的 0 或 1):

        %let tex1 = %sysfunc(exist(Base.pk_&monthP1));   
        %put tex1 = &tex1.;

但我不知道如何将此结果实现到 proc sql 语句中。

我需要这样的东西:

        proc sql;
        create table test as
        select case when &text1 = 0 then select ...
        else 
        select ...
        end ;
        quit;

提前感谢您提供建议的解决方案。

标签: sqlvariablesif-statementsassas-macro

解决方案


因此,如果两个表具有相同的结构,那么 SQL 代码中唯一需要更改的部分就是 FROM 子句。有条件地将宏变量设置为要使用的名称并将数据集的名称替换为对宏变量的引用可能更容易。

select var1,varb, ....
  from &dsname.

现在问题变成了仅设置宏变量之一。你可以用宏观逻辑来做到这一点。但是您也可以使用数据步骤逻辑来做到这一点。

data _null_ ;
  if exist("Base.pk_&monthP1") then call symputx('dsname','table1');
  else call symputx('dsname','table2');
run;
proc sql;
   ... from &dsname. ...

推荐阅读