首页 > 解决方案 > 检查表是否存在,如果不存在则什么都不做

问题描述

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

%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

标签: sas

解决方案


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

推荐阅读