我们在写相对复杂的宏的时候,通常会在开始位置加一些判断,比如判断某个变量是否在、一个路径是否存在、一个路径下面某种文件是否存在。。。
前面两个在sascommunity中已经有了,链接分别为变量、路径。搬运如下:
%macro VarExist(ds,var);
%local rc dsid result;
%let dsid=%sysfunc(open(&ds));
%if %sysfunc(varnum(&dsid, &var)) > 0 %then %do;
%let result=1;
%put NOTE: Var &var exists in &ds;
%end;
%else %do;
%let result=0;
%put NOTE: Var &var not exists in &ds;
%end;
%let rc=%sysfunc(close(&dsid));
&result
%mend VarExist;
%macro DirExist(dir) ;
%local rc fileref return;
%let rc = %sysfunc(filename(fileref, &dir)) ;
%if %sysfunc(fexist(&fileref)) %then %let return=1;
%else %let return=0;
&return
%mend DirExist;
%let fexist=1;
filename fexist pipe "ls &dir.*.txt";
data _null_;
infile fexist truncover end=eof;
input;
if prxmatch('/(\*\.txt not found)/', _INFILE_) then call symputx('fexist', 0);
run;
filename fexist clear;