重命名SAS宏中的外部文件

时间:2019-01-04 16:31:00

标签: sas

我收到带有以下内容的通用“声明无效或乱序”消息:

%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;

2 个答案:

答案 0 :(得分:1)

以下代码将为您提供所需的信息。虽然可以在数据步骤中使用%if语句,但是通常不需要。我猜测错误是由于%sysfuncfileexist函数周围的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",则您的原始代码可能已经起作用(通过非显而易见的副作用)