【发布时间】:2015-10-11 23:53:39
【问题描述】:
CMS 发布了一个 SAS 宏来检查文件是否存在:
** check existance of dataset**;
%macro CHECKDS(FILE,LONGFILE);
%if %sysfunc(exist(&FILE)) %then;
%else %do;
data _null_;
file print ls=255;
&MSG30 put "ERROR : [Msg30] Program halted, file &LONGFILE does not exist";
abort; run;
%end;
%mend CHECKDS;
现在当我用这个来称呼它时:
LIBNAME IN1 "/folders/myfolders/";
%CHECKDS(&STPERSON.TXT,PERSON)
run;
我收到此错误:错误:[Msg30] 程序已停止,文件 PERSON 不存在。
我知道文件存在并且在那个位置。有什么想法吗?
【问题讨论】:
-
您的宏分辨率似乎有问题。将
&STPERSON.TXT更改为&STPERSON..TXT,这将允许您的宏变量解析,但在它和扩展名(TXT)之间留一个句点字符。 -
我实际上是从真正的设置中简化了这个。调用 CHECKDS() 的宏正在向它传递一个变量“INP”,该变量在不同的宏中分配。所以它实际上是:%CHECKDS(&INP, PERSON)。但我试图用实际文件显式调用 if 进行测试。两者都不起作用。您的上述建议无效,但谢谢,
-
出于测试目的,在
%macro语句下方添加%put &FILE;。这将使您能够准确地看到exist函数正在寻找什么。 -
SAS UE 区分大小写,文件是 PERSON 还是 person?并且很可能是 .txt 而不是 TXT
-
刚刚意识到
EXIST是检查数据集的函数。你试过FILEEXIST吗?