打印警告,如果那么else语句sas

时间:2017-03-04 01:36:38

标签: if-statement logging sas warnings

我正在写一个if / then / else语句,其中最后一个是:

if variable2 = 'foo' then variable = 'bar' 
else variable = .

我是否可以在日志文件中打印自定义“警告”,该日志文件包含变量2名称的列表或数组

variable = .

2 个答案:

答案 0 :(得分:4)

您可以使用PUTLOG语句将消息写入日志。

if variable2 = 'foo' then variable = 'bar' ;
else do;
   variable = . ;
   putlog "WARNING: bad value " variable2 = ;
end ;

答案 1 :(得分:0)

看起来OP需要一条包含所有相关变量名称的消息。有多种方法可以做到这一点......最简单的是在此步骤完成后输出数据集上的快速PROC SQL:

proc sql noprint;
  select distinct variable2 into :bad_vals separated by ' '
    from my_data
    where variable = .
  ;
quit;

%put WARNING: Bad values of VARIABLE: &bad_vals;

这适用于相对较小的数据集;对于大数据集,您可以通过在初始数据步骤运行时维护相关值列表来避免额外的数据传递,并且只需在数据步骤结束时打印一次消息。

data mydata;
   length bad_vals $ 10000;
   drop bad_vals;
   set in end=end;
   ...blah...
   ...else do;
     variable = .;
     bad_vals = strip(bad_vals) || ' ' || variable2;
   end;
   if end then do;
     putlog 'WARNING: Bad values of VARIABLE:' bad_vals;
   end;
run;

或者您可以使用宏var而不是数据步骤var bad_vals