SAS Data Step if语句不起作用

Mic*_*air 2 sas

使用以下代码,电子邮件始终会被发送.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)

Joe*_*Joe 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;
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)