Hi, I am trying to write a macro for ISO8601 date imputaion. I have submitted the following code. But it is giving me syntax error. Please find me the error. Thanks. Submitted Code %macro dtimpute(var=,vout=,mon=,day=);
data dateimpute;
set dates;
%if &var.^='' %then
%do;
%if %scan(&var.,2,'-')='' %then
%do;
%if %scan(&var.,3,'-')='' %then &vout.=strip(&var.)||strip("-&mon.")||strip("-&day");
%else &vout.=%sysfunc(putn(%scan(&var.,1,'-'),'$4.'))||"-&mon.-"||%sysfunc(putn(%scan(&var.,3,'-'),'$2.'));
%end;
%else %if %scan(&var.,3,'-')='' %then &vout.=strip(&var.)||strip("-&day.");
%else &vout.=&var.;
%end;
run;
%mend dtimpute;
%dtimpute (var=DATE,vout=DATEIMP,mon=06,day=15); LOG 87 %dtimpute (var=DATE,vout=DATEIMP,mon=06,day=15);
MLOGIC(DTIMPUTE): Beginning execution.
MLOGIC(DTIMPUTE): Parameter VAR has value DATE
MLOGIC(DTIMPUTE): Parameter VOUT has value DATEIMP
MLOGIC(DTIMPUTE): Parameter MON has value 06
MLOGIC(DTIMPUTE): Parameter DAY has value 15
MPRINT(DTIMPUTE): data dateimpute;
MPRINT(DTIMPUTE): set dates;
SYMBOLGEN: Macro variable VAR resolves to DATE
MLOGIC(DTIMPUTE): %IF condition &var.^='' is TRUE
SYMBOLGEN: Macro variable VAR resolves to DATE
MLOGIC(DTIMPUTE): %IF condition %scan(&var.,2,'-')='' is FALSE
SYMBOLGEN: Macro variable VAR resolves to DATE
MLOGIC(DTIMPUTE): %IF condition %scan(&var.,3,'-')='' is FALSE
SYMBOLGEN: Macro variable VOUT resolves to DATEIMP
SYMBOLGEN: Macro variable VAR resolves to DATE
NOTE: Line generated by the invoked macro "DTIMPUTE".
5 run;
---
22
MPRINT(DTIMPUTE): DATEIMP=DATE run
MLOGIC(DTIMPUTE): Ending execution.
MPRINT(DTIMPUTE): ;
ERROR 22-322: Syntax error, expecting one of the following: !, !!, &, *, **, +, -, /, <, <=, <>, =,
>, ><, >=, AND, EQ, GE, GT, IN, LE, LT, MAX, MIN, NE, NG, NL, NOTIN, OR, ^=, |, ||,
~=.
... View more