使用以下代码,电子邮件始终会被发送.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;
Run Code Online (Sandbox Code Playgroud)
虽然该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;
Run Code Online (Sandbox Code Playgroud)
该代码创建一个空白文件.
如果您需要有条件地发送电子邮件,我建议您将电子邮件代码包装在宏中,然后使用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;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
117 次 |
最近记录: |