SAS宏程序中的查询

我们在写相对复杂的宏的时候,通常会在开始位置加一些判断,比如判断某个变量是否在、一个路径是否存在、一个路径下面某种文件是否存在。。。

前面两个在sascommunity中已经有了,链接分别为变量路径。搬运如下:

  1.  判断某个变量是否在
    %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;
    
  2. 判断一个路径是否存在
    %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;
    
    当然,如果是UNIX SAS我们还可以直接用函数FILEEXIST来判断。程序如下:
    %if %sysfunc(fileexist(%nrbquote(&dir))) %then ...;
    
  3. 判断一个路径下面某种文件(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;
    
曾宪华 /
本文采用 署名-非商业性使用-相同方式共享 3.0许可协议 属于 程序人生 分类, 被贴了 Macro FILENAME PIPE 书签

上一篇 认识Annotate Facility
下一篇 人间仙境—三清山