Я пытаюсь создать небольшую систему, которая будет проверять наличие вложений (из 4 источников) и, если они существуют, отправлять эти вложения по электронной почте. Если есть - то пришлите. Я нашел интересный код, но у меня есть проблема с небольшой проверкой четырех файлов и склейкой переменной с путем к ним.
%LET ATTACH1=%STR(C:\XXX\YYYY\ZZZZZ\XYZ_1_&calosc..csv);
%LET ATTACH2=%STR(C:\XXX\YYYY\ZZZZZ\XYZ_2_&calosc..csv);
%LET ATTACH3=%STR(C:\XXX\YYYY\ZZZZZ\XYZ_3_&calosc..csv);
%LET ATTACH4=%STR(C:\XXX\YYYY\ZZZZZ\XYZ_4_&calosc..csv);
%MACRO FINDMYFILE;
%LET ZALACZNIKI = ;
%IF %SYSFUNC(FILEEXIST(&ATTACH1)) %THEN &ZALACZNIKI = &ZALACZNIKI || &ATTACH1 || ' ';
%IF %SYSFUNC(FILEEXIST(&ATTACH2)) %THEN &ZALACZNIKI = &ZALACZNIKI || &ATTACH2 || ' ';
%IF %SYSFUNC(FILEEXIST(&ATTACH3)) %THEN &ZALACZNIKI = &ZALACZNIKI || &ATTACH3 || ' ';
%IF %SYSFUNC(FILEEXIST(&ATTACH4)) %THEN &ZALACZNIKI = &ZALACZNIKI || &ATTACH4 || ' ';
%PUT &ZALACZNIKI;
%IF %SYSFUNC(FILEEXIST(&ATTACH1)) OR %SYSFUNC(FILEEXIST(&ATTACH2)) OR %SYSFUNC(FILEEXIST(&ATTACH3)) OR %SYSFUNC(FILEEXIST(&ATTACH4)) %THEN
%DO;
FILENAME OUTBOX EMAIL
FROM = ("XX SYSTEM REPORT <noreply@systemaccount>")
TO = ("[email protected]")
CC = ("[email protected]")
REPLYTO = ("[email protected]")
SUBJECT = (" testowy ")
ATTACH = ("&ZALACZNIKI.");
DATA _NULL_;
FILE OUTBOX;
PUT "Hello,";
PUT ;
PUT %SYSFUNC(COMPBL(
"This is an example email."));
PUT ;
PUT %SYSFUNC(COMPBL(
"By using COMPBL we remove extra blanks from our text."));
PUT %SYSFUNC(COMPBL(
"There is no separation with this email line."));
RUN;
FILENAME OUTBOX CLEAR;
%END;
%ELSE %PUT NOTE: FILE DOES NOT EXIST AND NO EMAIL WILL BE SENT.;
%MEND FINDMYFILE;
%FINDMYFILE;
Спасибо за помощь :)
Если вы уже используете шаг данных, почему бы просто не использовать шаг данных для тестирования? Вы можете использовать директивы электронной почты для прикрепления существующих файлов.

Здесь вам не хватает нескольких вещей:
%IF %SYSFUNC(FILEEXIST(&ATTACH4)) %THEN &ZALACZNIKI = &ZALACZNIKI || &ATTACH4 || ' ';
Вам нужно использовать %LET для переназначения макропеременной, если это ваше намерение, и операторы конкатенации не требуются, но вам могут понадобиться двойные кавычки вокруг имени файла:
%IF %SYSFUNC(FILEEXIST(&ATTACH4)) %THEN %LET ZALACZNIKI = &ZALACZNIKI. "&ATTACH4.";
Когда вы начнете использовать переменную макроса, вам, вероятно, не понадобятся кавычки, иначе вы получите:
""file1" "file2" "file3""
Так что просто сделайте это:
ATTACH = (&ZALACZNIKI.);
Поэкспериментируйте с этим кодом, чтобы узнать, как он работает:
%let file1 = C:\temp;
%let file2 = C:\temp2;
%let z = ;
%let z = &z. "&file1.";
%let z = &z. "&file2.";
%put &z;
Можете ли вы поделиться, что здесь не работает? Есть коды ошибок или предупреждения?