1 The SAS System 11:33 Thursday, November 1, 2018
1 ;*';*";*/;quit;run;
2 OPTIONS PAGENO=MIN;
3 %LET _CLIENTTASKLABEL='Program_newMaill';
4 %LET _CLIENTPROJECTPATH='R:\Mijn Documenten\Stagedocumenten\Eigen project\Prototypes\AutoTest_new.egp';
5 %LET _CLIENTPROJECTNAME='AutoTest_new.egp';
6 %LET _SASPROGRAMFILE=;
7
8 ODS _ALL_ CLOSE;
9 OPTIONS DEV=ACTIVEX;
10 GOPTIONS XPIXELS=0 YPIXELS=0;
11 FILENAME EGSR TEMP;
12 ODS tagsets.sasreport13(ID=EGSR) FILE=EGSR STYLE=HtmlBlue
12 ! STYLESHEET=(URL="file:///C:/Program%20Files/SASHome/x86/SASEnterpriseGuide/5.1/Styles/HtmlBlue.css") NOGTITLE NOGFOOTNOTE
12 ! GPATH=&sasworklocation ENCODING=UTF8 options(rolap="on");
NOTE: Writing TAGSETS.SASREPORT13(EGSR) Body file: EGSR
13
14 GOPTIONS ACCESSIBLE;
15 data _null_;
16 if &testMacro = 1 then call execute('%mail');
17 run;
MPRINT(MAIL): FILENAME Mailbox EMAIL "" type="text/html" subject="Automatische controle";
"why isnt it working"
MPRINT(MAIL): * data _null_;
MPRINT(MAIL): file Mailbox;
NOTE: DATA statement used (Total process time):
real time 0.00 seconds
cpu time 0.00 seconds
NOTE: CALL EXECUTE generated line.
1 + FILENAME Mailbox EMAIL "" type="text/html" subject="Automatische controle"; * data _null_; file
Mailbox;
NOTE: Line generated by the CALL EXECUTE routine.
1 + FILENAME Mailbox EMAIL "" type="text/html" subject="Automatische controle"; * data _null_; file
____
180
1 !+Mailbox;
ERROR 180-322: Statement is not valid or it is used out of proper order.
18
19
20 GOPTIONS NOACCESSIBLE;
21 %LET _CLIENTTASKLABEL=;
22 %LET _CLIENTPROJECTPATH=;
23 %LET _CLIENTPROJECTNAME=;
24 %LET _SASPROGRAMFILE=;
25
26 ;*';*";*/;quit;run;
27 ODS _ALL_ CLOSE;
28
29
30 QUIT; RUN;
31
The error still remains, i just don't get what is wrong . I tried %file Mailbox. But that is not the solution either
proc sql;
select case when nmiss(name)=0 and nmiss(age)=0 and nmiss(sex)=0 then 1
else 0 end into:testMacro
from work.test;
quit;
%macro mail;
FILENAME Mailbox EMAIL ""
type="text/html"
subject="Automatische controle";
%put "why isnt it working";
data _null_;
file Mailbox;
%if &testMacro = 0
%then %do;
%put "values in mailcond are > 0";
%end;
%run;
%mend mail;
data _null_;
if &testMacro = 1 then call execute('%mail');
run;
Remove '%' symbol before RUN. It has to be just 'run' not '%run'
Please find my comments below:
proc sql;
select case when nmiss(name)=0 and nmiss(age)=0 and nmiss(sex)=0 then 1
else 0 end into:testMacro
from work.test;
quit;
%macro mail;
FILENAME Mailbox EMAIL
to="test@email.com" /* TO= is missing */
type="text/html"
subject="Automatische controle";
%put "why isnt it working";
data _null_;
file Mailbox;
/* You maynot need the 'if' condition anymore */
/*%if &testMacro = 0*/
/*%then %do;*/
/* %put "values in mailcond are > 0";*/
/*%end;*/
run;
%mend mail;
data _null_;
if &testMacro = 0 then call execute('%mail');
run;
When you call execute a macro that contains macro logic, use %nrstr:
call execute('%nrstr(%mail'));
otherwise you will experience macro timing problems. Macro statements are executed immediately, but Base SAS code has to wait until the calling datastep ends. %nrstr prevents premature execution of macro logic.
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.