Hi, I am trying to automate my code. I am getting errors. The same code works fine if called like this: %check_elig(method=eom,start='01jan2011'd, end='31may2011'd, state=nm); 22 23 options fmtsearch=(auto WORK frmtdir library); 24 options mprint symbolgen mlogic pageno=1 nocenter; 25 26 data _null_; 27 %let today=%sysfunc(today()); 28 %let sdate= %str(%')%sysfunc(intnx(month,&today,-2,b),yymmdd10.)%str(%'); SYMBOLGEN: Macro variable TODAY resolves to 19660 29 %let edate= %str(%')%sysfunc(intnx(month,&today,-1,e),yymmdd10.)%str(%'); SYMBOLGEN: Macro variable TODAY resolves to 19660 30 call symput("bullet",'95'x); 31 call symput("tm",'AE'x); 32 call symput("copyright",'A9'x); 33 run; NOTE: DATA statement used (Total process time): real time 0.00 seconds cpu time 0.00 seconds 34 35 36 %macro check_elig(method=,start=, end=, state=); 37 38 data _null_; 39 40 start=mdy(substr("&start",7,2),substr("&start",10,2),substr("&start",2,4)); 2 The SAS System 15:31 Tuesday, October 29, 2013 41 end=mdy(substr("&end",7,2),substr("&end",10,2),substr("&end",2,4)); 42 call symput('months',intck('month', &start, &end)); 43 44 45 run; 46 47 data _null_; 48 %do i=0 %to &months; 49 call symput("start_&i","'"||put(intnx('month', &start, &i, 'B'),yymmdd10.)||"'"); 50 call symput("end_&i","'"||put(intnx('month', &start, &i, 'E'),yymmdd10.)||"'"); 51 call symput("nondrug_&i","nondrug_"||strip(year(intnx('month', &start, &i, 'B')))||strip(put(month(intnx('month', 51 ! &start, &i, 'B')),z2.))); 52 call symput("drug_&i","drug_"||strip(year(intnx('month', &start, &i, 'B')))||strip(put(month(intnx('month', 52 ! &start, &i, 'B')),z2.))); 53 %end; 54 run; 55 56 57 %mend check_elig; 58 59 /* 60 %check_elig(method=eom,start='01jan2011'd, end='31may2011'd, state=nm); 61 */ 62 %check_elig(method=eom,start=%unquote(&sdate), end=%unquote(&edate), state=nm); MLOGIC(CHECK_ELIG): Beginning execution. SYMBOLGEN: Macro variable SDATE resolves to '2013-08-01' SYMBOLGEN: Some characters in the above value which were subject to macro quoting have been unquoted for printing. SYMBOLGEN: Macro variable EDATE resolves to '2013-09-30' SYMBOLGEN: Some characters in the above value which were subject to macro quoting have been unquoted for printing. MLOGIC(CHECK_ELIG): Parameter METHOD has value eom MLOGIC(CHECK_ELIG): Parameter START has value '2013-08-01' MLOGIC(CHECK_ELIG): Parameter END has value '2013-09-30' MLOGIC(CHECK_ELIG): Parameter STATE has value nm MPRINT(CHECK_ELIG): data _null_; SYMBOLGEN: Macro variable START resolves to '2013-08-01' SYMBOLGEN: Macro variable START resolves to '2013-08-01' SYMBOLGEN: Macro variable START resolves to '2013-08-01' MPRINT(CHECK_ELIG): start=mdy(substr("'2013-08-01'",7,2),substr("'2013-08-01'",10,2),substr("'2013-08-01'",2,4)); SYMBOLGEN: Macro variable END resolves to '2013-09-30' SYMBOLGEN: Macro variable END resolves to '2013-09-30' SYMBOLGEN: Macro variable END resolves to '2013-09-30' MPRINT(CHECK_ELIG): end=mdy(substr("'2013-09-30'",7,2),substr("'2013-09-30'",10,2),substr("'2013-09-30'",2,4)); SYMBOLGEN: Macro variable START resolves to '2013-08-01' SYMBOLGEN: Macro variable END resolves to '2013-09-30' MPRINT(CHECK_ELIG): call symput('months',intck('month', '2013-08-01', '2013-09-30')); MPRINT(CHECK_ELIG): run; NOTE: Character values have been converted to numeric values at the places given by: (Line):(Column). 62:29 62:50 62:72 62:104 62:123 62:143 62:2 62:2 NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column). 62:186 NOTE: Invalid numeric data, '2013-08-01' , at line 62 column 2. NOTE: Invalid numeric data, '2013-09-30' , at line 62 column 2. start=19571 end=19631 _ERROR_=1 _N_=1 NOTE: Missing values were generated as a result of performing an operation on missing values. Each place is given by: (Number of times) at (Line):(Column). 1 at 62:186 NOTE: DATA statement used (Total process time): 3 The SAS System 15:31 Tuesday, October 29, 2013 real time 0.00 seconds cpu time 0.00 seconds MPRINT(CHECK_ELIG): data _null_; SYMBOLGEN: Macro variable MONTHS resolves to . ERROR: A character operand was found in the %EVAL function or %IF condition where a numeric operand is required. The condition was: &months ERROR: The %TO value of the %DO I loop is invalid. ERROR: The macro CHECK_ELIG will stop executing. MLOGIC(CHECK_ELIG): Ending execution. 63 64 GOPTIONS NOACCESSIBLE; 65 %LET _CLIENTTASKLABEL=; 66 %LET _CLIENTPROJECTPATH=; 67 %LET _CLIENTPROJECTNAME=; 68 %LET _SASPROGRAMFILE=; 69 70 ;*';*";*/;quit;run; ____ 180 ERROR 180-322: Statement is not valid or it is used out of proper order. NOTE: The SAS System stopped processing this step because of errors. NOTE: DATA statement used (Total process time): real time 0.00 seconds cpu time 0.00 seconds 71 ODS _ALL_ CLOSE; 72 73 74 QUIT; RUN; 75
... View more