Macros SAS宏未检测到文件

Macros SAS宏未检测到文件,macros,sas,Macros,Sas,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 do

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]程序已停止,文件人不存在


我知道文件存在并且在那个位置。有什么想法吗?

函数
exist
的第一个参数的格式应该是
libname.memname
exist
函数的第二个参数指定成员类型;由于未指定成员类型,因此假定为默认值DATA。这意味着该文件具有扩展名为sas7bdat的SAS数据文件

有关成员类型的列表,请参见


由于您的文件是一个.txt文件,我认为它不能被视为库成员。如果我错了,欢迎任何人来纠正我。

DWal就在上面。对于我必须做的事情,这里有一个更完整的答案。我必须将.txt文件转换为sas数据集(特别是.sas7bdat)

然后必须把它写进我的图书馆,我才能使用它

data IN1.person ;
set person;
run;

看起来您的宏分辨率有问题。将
&STPERSON.TXT
更改为
&STPERSON..TXT
,这将允许您解析宏变量,但在该变量和扩展名(TXT)之间保留一个句点字符。实际上,我简化了真正的设置。调用CHECKDS()的宏正在向其传递一个变量“INP”,该变量在另一个宏中赋值。所以它实际上是:%CHECKDS(&INP,PERSON)。但我试图用实际文件显式调用if进行测试。两者都不起作用。您的上述建议无效,但出于测试目的,请添加
%put&FILE位于
%宏
语句下方。这将允许您准确地查看
exist
函数正在查找的内容。SAS UE区分大小写,文件是个人还是个人?而且很有可能它将.txt而不是txt只是意识到
EXIST
是用于检查数据集的函数。您是否尝试过
FILEEXIST
data IN1.person ;
set person;
run;