gpt4 book ai didi

如果出现错误,SAS 电子邮件

转载 作者:行者123 更新时间:2023-12-04 20:10:41 31 4
gpt4 key购买 nike

是否有任何代码/宏可以合并到我的 sas 程序中,一旦我的 sas 代码在运行时发生错误,它会立即给我发送电子邮件?

另外,这封电子邮件是否可能包含发生的错误?

最佳答案

是的……也不是……

这是可能的 - 但没有很好的方法来做到这一点。您必须在每个过程之后检查以查看是否发生错误。基本上,您会插入一行代码以在整个代码中执行数十(或数百)次测试。

我经常发现,在整个程序运行之后进行测试就足够了。如果中途确实发生了错误,那么 SAS 通常会进入语法检查模式,因此它不会在错误发生后执行任何代码。

这种方法也有其自身的一系列问题。从包含错误信息的 SYS 宏变量开始,仅存储最近错误的信息。我们可以检查日志,但问题是日志仍在被我们当前运行的程序使用,并检查是什么阻止我们使用 SAS 打开它来读取它。

我解决这个问题的方法是调用 SAS 两次。第一次运行程序并将日志保存到指定文件。第二次运行一个程序,该程序将检查刚刚创建的日志文件并在满足特定条件时发送电子邮件(例如以 ERROR: 开头的行。

一些细节...当您第二次启动 sas 时,您可以使用 SYSPARM 参数传入您要检查的日志文件的名称。您可以使用类似这样的代码解析日志文件(我建议您根据自己的情况自定义条件):

**
** READ IN LOGFILE. CHECK FOR PROBLEMS
*;

data problems log;
length line $1000;

infile "&logfile";
input;

logfile = "&logfile";
line_no = _n_;
line = _infile_;
problem = 0;

if
(
line =: "ERROR:"
or line =: "WARNING:"
or line =: "NOTE: Numeric values have been converted to character values"
or line =: "NOTE: Character values have been converted to numeric values"
or line =: "NOTE: Missing values were generated as a result of performing an operation on missing values"
or line =: "NOTE: MERGE statement has more than one data set with repeats of BY values"
or line =: "NOTE: Invalid (or missing) arguments to the INTNX function have caused the function to return"
or line =: "INFO: Character variables have defaulted to a length of 200"
or line =: "NOTE: Invalid"
)
and not
(
line =: "WARNING: Your system is scheduled to expire"
or line =: "WARNING: The Base Product product with which Session Manager is associated"
or line =: "WARNING: will be expiring soon, and is currently in warning mode to indicate"
or line =: "WARNING: this upcoming expiration. Please run PROC SETINIT to obtain more"
or line =: "WARNING: information on your warning period."
or line =: "WARNING: This CREATE TABLE statement recursively references the target table. A consequence"
or line =: "WARNING: Unable to copy SASUSER registry to WORK registry. Because of this, you will not see registry customizations during this"
or line =: "WARNING: Estimates did not improve after a ridge was encountered in the objective function."
or line =: "WARNING: Estimates may not have converged."
or line =: "ERROR: A lock is not available for"
or line =: "ERROR: Errors printed on page"
or (line =: "WARNING: Apparent symbolic reference TODT not resolved." and "%upcase(&jobname)" eq "DIAL800.REPORTING_API")
)
then do;
problem = 1;
output problems;
end;
output log;
run;

filename mymail email content_type="text/html"
to=( test@test.test )
from=("myemail@test.test")
subject="mysubject"
attach="&logfile";

data _null_;
length divider $200;

file mymail;

set problems end=eof;

divider = repeat('=',80);

if _n_ eq 1 then do;
put '<font style="font-family:courier new;font-size:9pt"><br>';
put divider "<br>";
put "SUMMARY OF PROBLEMS: &logfile <br>";
put divider "<br><br>";
end;

put line_no 5. ": " line "<br>";

if eof then do;
put divider "<br>";
put "END OF SUMMARY <br>";
put divider "<br><br>";
end;

run;

从你的问题中不清楚你是否知道如何在 SAS 中发送电子邮件,但如果不知道,我建议先用谷歌搜索它,如果你仍然无法让它工作,然后回来发布一个单独的问题。

编辑:您可以在调用 SAS 时使用 -LOG "myfile.log" 参数指定 SAS 应将日志文件保存到的位置。

关于如果出现错误,SAS 电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9535843/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com