SAS Enterprise Guide 8.3:当进程中断时发送自动邮件

编程语言 2026-07-08

我想让我的SAS Enterprise Guide过程在流程的任意地方出问题时发送邮件。目前这个流程共有12个独立步骤,当拉取较大的数据集时,有时会出现超时问题。

我试着用类似下面的方式来查找错误,但不确定是否真的能让它起作用:

%MACRO error_email;
    %if &syscc > 0 %then %do;
        FILENAME OUTBOX EMAIL;
        DATA _NULL_;
 ...

基本上,我希望像下面这样的代码只在某一步发生错误时执行(下面的代码是在所有步骤都正确完成后才会执行的):

FILENAME OUTBOX EMAIL;
DATA _NULL_;
    FILE OUTBOX
    TO = ("[email protected]")
    FROM = ("[email protected]")
    CC = ("[email protected]")
    SUBJECT = "Process Name Process Completion"
    ATTACH = ("&logs_out.Counts_And_Stats.html"
              "&logs_out.Project_Name_Project_Log.txt"
              "&logs_out.Project_Name_Tables_Produced.txt");
    FILE OUTBOX;
    PUT "The super-awesome-fancy-pants process has completed.";
    PUT "Please find high-level statistics and the system log attached in this email.";
    PUT "For questions regarding this report, please reach out to your local human.";
    PUT " ";
    PUT "Thank you"; 
RUN;

有没有人有这方面的经验?

解决方案

我刚刚找到一个对我有用的答案。它使用一个宏,在我需要它在每段代码执行完后触发的时候调用。

%global runerror;

%macro runerror;
    %if &syserr. > 4 %then %do; 
    /* ANYTHING GREATER THAN 4 IS INDICATIVE OF AN ERROR */
    /* REFERENCE: https://support.sas.com/kb/45/143.html */
        FILENAME OUTBOX EMAIL;
        DATA _NULL_;
            FILE OUTBOX
            TO = ("[email protected]")
            FROM = ("[email protected]")
            CC = ("[email protected]")
            SUBJECT = "Fancy Process Failure"
            ATTACH = ("&logs_out.Project_Log.txt");
            FILE OUTBOX;
            PUT "The super-duper-awesome process has encountered an issue.";
            PUT "Please use the attached log to determine the cause of the issue.";
            PUT "For questions regarding this report, please reach out to your local code-monger.";
            PUT " ";
            PUT "Thank you"; 
        RUN;

        FILENAME OUTBOX CLEAR;
    %end;
%mend runerror;

然后,在我需要的每段代码之后,我放上 %runerror;,效果很好。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章