使用以下代码,电子邮件始终会被发送。 1显然不等于0,但它仍然运行。我试过删除do部分,但仍然遇到同样的问题。
data _null_;
set TestTable;
if 1 = 0 then do;
file sendit email
to=("email@gmail.com")
subject="Some Subject Line";
end;
run;
答案 0 :(得分:7)
虽然file
语句被认为是可执行语句(因此不应在伪if
语句后面执行),但这并非完全正确。 SAS在编译期间看到file
语句,并且知道它需要创建要写入的文件 - 因此,它有点编译时间。这就是这里发生的事情 - 由于编译器的活动,SAS创建了文件(在本例中是电子邮件),然后实际上并没有用任何东西填充它,但在一天结束时仍然有一封电子邮件。
任何其他文件都会发生同样的事情 - 就像这样:
data _null_;
set sashelp.class;
if 0 then do;
file "c:\temp\test_non_zero.txt";
put name $;
end;
run;
该代码创建一个空白文件。
如果您需要有条件地发送电子邮件,我建议您在宏中包装电子邮件代码,然后使用数据集中的call execute
或类似内容调用该宏。像这样:
%macro write_email(parameters);
data _null_;
file sendit email
to=("email@gmail.com")
subject="Some Subject Line";
run;
%mend write_email;
data _null_;
set TestTable;
if 0 then do;
call execute('%write_email(parameters)');
end;
run;
答案 1 :(得分:1)
使用电子邮件指令中止邮件。 http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a002058232.htm
data _null_;
file sendit email to=("email@gmail.com") subject="Some Subject Line";
if nobs=0 then put '!EM_ABORT!';
set TestTable nobs=nobs;
....
run;