Отправка электронного письма из SAS только при соблюдении определенных условий - PullRequest
0 голосов
/ 08 июня 2018

Я хочу, чтобы SAS отправил электронное письмо, но только если глобальная макропеременная и предупреждение равно 1.

Возможно ли это?Я пытаюсь следующее, но это не работает.Он по-прежнему отправляет электронное письмо, когда предупреждение = 0.

filename outbox email
               to=('me@myemail.com')
               subject='Warning Report'
               from='you@myemail.com'
               attach='/report.html';

DATA _null_;
file outbox;
Put "Hello,"//
"Warning report attached."//
"Regards,"/
"Chris";
if &warning. =1
run;

Ответы [ 4 ]

0 голосов
/ 10 июня 2018

Вы не можете условно выполнить шаг на основе выражения if внутри шага.

Вы можете продолжить использовать STEP с открытым кодом и условно изменить оператор RUN, чтобы он стал RUN CANCEL с помощьюразумное использование %sysfunc(ifc.«Выгода» в том, что вам не нужно встраивать логику в отдельный макрос.

%let warning = 0;
data _null_;
  put "NOTE: macro symbol 'warning' is &warning";
run %sysfunc(ifc(&warning,CANCEL,));

%let warning = 1;
data _null_;
  %* never executed because step is cancelled;
  put "NOTE: macro symbol 'warning' is &warning";
run %sysfunc(ifc(&warning,CANCEL,));
0 голосов
/ 08 июня 2018

Я думаю, это потому, что вы не используете , а затем , даже там, я думаю, возникнет проблема с синтаксисом, и SAS не сможет завершить этот блок кода или вернуть ошибку .... Вы можетеположить его в макрос, и он будет работать.

попробуйте что-то вроде этого

%macro email(condition=);

%if &condition.=1 %then %do;
filename outbox email
               to=('me@myemail.com')
               subject='Warning Report'
               from='you@myemail.com'
               attach='/report.html';

DATA _null_;
file outbox;
Put "Hello,";
Put "Warning report attached.";
Put "Regards,";
Put "Chris";
run;
%end;
%mend;
%email(condition=&warning.);
0 голосов
/ 08 июня 2018

Вы должны иметь возможность использовать директивы электронной почты для отмены сообщения.

! EM_ABORT!останавливает текущее сообщение.Вы можете использовать эту директиву, чтобы не дать программе SAS автоматически отправлять сообщение в конце шага DATA.

data _null_;
  file outbox;
  if &warning. then do;
    put "Hello,"
     // "Warning report attached."
     // "Regards,"
      / "Chris"
    ;
  end;
  else put '!EM_ABORT!';
run;
0 голосов
/ 08 июня 2018

Попробуйте это:

  %let warning=1;

  %macro send();
  %if &warning. =1 %then %do;
   filename outbox email
           to=('myemail@mail.com')
           subject='Warning Report'
           from='you@myemail.com'
           ;

  DATA _null_;
  file outbox;
  Put "Hello,"//
  "Warning report attached."//
  "Regards,"/
  "Chris";
  run;
  %end;
  %mend;

  %send;
...