我们在写相对复杂的宏的时候,通常会在开始位置加一些判断,比如判断某个变量是否在、一个路径是否存在、一个路径下面某种文件是否存在。。。
前面两个在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;
- 判断一个路径是否存在
当然,如果是UNIX SAS我们还可以直接用函数FILEEXIST来判断。程序如下:%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;
%if %sysfunc(fileexist(%nrbquote(&dir))) %then ...;
- 判断一个路径下面某种文件(txt)是否存在可以用FILENAME PIPE,程序如下:
%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;