检查表是否存在,如果不执行任何操作

时间:2018-08-06 15:41:58

标签: sas

我的宏有问题。如果名称存在,请尝试创建表。

%let tableA = Cars;
%let tableB =;

这有效:

%macro CREATETABLE(name); 
%if %symexist(name) = 1 %then %do; 
proc sql;
Create table ....

但是如果表名不存在:

%else...( do nothing )

我希望SAS什么都不做,但我没有让它工作。由于表名确实存在,因此总是会出现SAS错误。

%CREATETABLE(CARS)/%CREATETABLE(&tableA) - works, %symexist(chkTabelle) -> 1
%CREATETABEL(asfsf)/%CREATETABLE(&tableB) - error, %symexist(chkTabelle) -> 0

1 个答案:

答案 0 :(得分:0)

%symexist检查是否存在宏符号。宏符号NAME始终存在。听起来您想检查数据集是否存在。为此,您可以使用EXIST()函数。

从文档中

http://support.sas.com/kb/24/670.html

%macro checkds(dsn);
   %if %sysfunc(exist(&dsn)) %then %do;
      proc print data = &dsn;
      run;
   %end;
   %else %do;
      data _null_;
         file print;
         put #3 @10 "Data set &dsn. does not exist";
      run;
   %end;
%mend checkds;