我收到带有以下内容的通用“声明无效或乱序”消息:
%macro test;
data _null_;
%if %sysfunc(fileexist("C:\report_201809.xlsx")) = 1 %then %do;
rc=%sysfunc(rename("C:\report_201809.xlsx",
"C:\report_201809.xlsx"_old.xlsx",'file'));
%end;
%mend;
%test;
答案 0 :(得分:1)
以下代码将为您提供所需的信息。虽然可以在数据步骤中使用%if
语句,但是通常不需要。我猜测错误是由于%sysfunc
和fileexist
函数周围的rename
函数引起的。 %sysfunc
允许您在数据步骤之外调用数据步骤功能,因此此处不需要。
%macro test;
data _null_;
if fileexist("C:\file.txt") then do;
rc = rename("C:\file.txt", "C:\file2.txt", 'file');
end;
run;
%mend;
或者,您可以使用X Command来执行Windows命令。您可以使用以下语句替换rename
函数。
x move C:\file.txt C:\file2.txt;
答案 1 :(得分:1)
删除DATA _NULL_
或按照@J_Lard进行。
在%sysfunc
调用的函数调用中使用的宏参数被隐式引用,并且不需要其他'
或"
%macro test;
%local rc;
%if %sysfunc(fileexist(C:\report_201809.xlsx)) = 1 %then %do;
%let rc = %sysfunc(rename(C:\report_201809.xlsx,C:\report_201809_old.xlsx,file));
%end;
%test;
如果文件名"C:\report_201809.xlsx"_old.xlsx"
(具有多余的"
)已更正为"C:\report_201809_old.xlsx"
,则您的原始代码可能已经起作用(通过非显而易见的副作用)