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

时间:2019-02-19 16:30:33

标签: 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\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;

感谢帮助:)

1 个答案:

答案 0 :(得分:1)

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

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