Переименовать внешний файл в макросе SAS - PullRequest
0 голосов
/ 04 января 2019

Я получаю общее сообщение «Заявление недействительно или вышло из строя» со следующим:

%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 голосов
/ 04 января 2019

Удалите 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"

0 голосов
/ 04 января 2019

Код ниже должен дать вам то, что вам нужно. Хотя вы можете использовать %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;
...