Email SAS:宏发送电子邮件(如果存在)

Email SAS:宏发送电子邮件(如果存在),email,sas,Email,Sas,我尝试建立一个小系统,它将验证附件是否存在(来自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

我尝试建立一个小系统,它将验证附件是否存在(来自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 = ("xzy.yzx@email.com")
         CC = ("xzy.yzx@email.com")
         REPLYTO = ("xzy.yzx@email.com")
         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;
%LET ATTACH1=%STR(C:\XXX\YYYY\ZZZZZ\XYZ\uuu1&calosc..csv);
%LET ATTACH2=%STR(C:\XXX\YYYY\ZZZZZ\XYZ\uuuz&calosc..csv);
%LET ATTACH3=%STR(C:\XXX\YYYY\ZZZZZ\XYZ\uuu3&calosc..csv);
%LET ATTACH4=%STR(C:\XXX\YYYY\ZZZZZ\XYZ\uuu4&calosc..csv);
%宏查找文件;
%让ZALACZNIKI=;
%如果%SYSFUNC(FILEEXIST(&ATTACH1))%,则&ZALACZNIKI=&ZALACZNIKI | |和ATTACH1 | | |“”;
%如果%SYSFUNC(FILEEXIST(&ATTACH2))%,则&ZALACZNIKI=&ZALACZNIKI | |和ATTACH2 | | |“”;
%如果%SYSFUNC(FILEEXIST(&ATTACH3))%,则&ZALACZNIKI=&ZALACZNIKI | |和ATTACH3 | | |“”;
%如果%SYSFUNC(FILEEXIST(&ATTACH4))%,则&ZALACZNIKI=&ZALACZNIKI | |和ATTACH4 | | |“”;
%普特&扎拉茨尼基;
%如果%SYSFUNC(FILEEXIST(&ATTACH1))或%SYSFUNC(FILEEXIST(&ATTACH2))或%SYSFUNC(FILEEXIST(&ATTACH3))或%SYSFUNC(FILEEXIST(&ATTACH4))%,则
%做;
文件名发件箱电子邮件
FROM=(“XX系统报告”)
TO=(“xzy。yzx@email.com")
CC=(“xzy。yzx@email.com")
答复=(“xzy。yzx@email.com")
主题=(“testowy”)
附加=(“&ZALACZNIKI”);
数据为空;
文件发件箱;
放上“你好”;
放;
放置%SYSFUNC(COMPBL(
“这是一封示例电子邮件。”);
放;
放置%SYSFUNC(COMPBL(
“通过使用COMPBL,我们删除了文本中多余的空格。”);
放置%SYSFUNC(COMPBL(
“与此电子邮件行没有分隔。”);
跑
文件名发件箱清除;
%结束;
%ELSE%注意:文件不存在,不会发送电子邮件。;
%修补FINDMYFILE;
%FINDMYFILE;

谢谢您的帮助:)

您在这里遗漏了一些东西:

%IF %SYSFUNC(FILEEXIST(&ATTACH4)) %THEN &ZALACZNIKI = &ZALACZNIKI || &ATTACH4 || ' ';
您需要使用%LET重新分配宏变量(如果您打算这样做),并且不需要连接运算符,但文件名周围可能需要双引号:

%IF %SYSFUNC(FILEEXIST(&ATTACH4)) %THEN %LET ZALACZNIKI = &ZALACZNIKI. "&ATTACH4.";
使用宏变量时,可能不需要引号,否则会得到:

“文件1”“文件2”“文件3”

那么就这么做吧:

ATTACH = (&ZALACZNIKI.);
尝试此代码以了解其工作原理:

%let file1 = C:\temp;
%let file2 = C:\temp2;

%let z = ;

%let z = &z. "&file1.";
%let z = &z. "&file2.";

%put &z;

你能分享一下这里有什么不起作用吗?任何错误代码或警告?如果您已经在使用数据步骤,为什么不直接使用数据步骤进行测试?您可以使用电子邮件指令附加现有文件。