i have sas program has base year of data , 5 forecast years. forecast years have same calculations, use prior year's data base year calculations. want avoid copying data 5 times , changing suffix of variable names. great have 1 forecast year , have loop or array change suffix of variable names. here updated code based on inputs:
*start macro loop - takes 2 parameters, first year of dataset created , last year; %macro loop(year_start, year_end); *loop on years; %do year=&year_start %to &year_end; *create macro variable previous years; %let prev_year=%eval(&year_start-1); data schoolaidfy&year_start.; set work.forecastinputs; * cost per pupil amounts; l201_fy&start_year.= l203_fy&prev_year.; l202_fy&start_year.= round(scpp*spg_fy&start_year.,1); l203_fy&start_year.= sum(l201_fy&start_year.,l202_fy&start_year.); l204_fy&start_year.= l206_fy&prev_year.; l205_fy&start_year.= round(ts_scpp*spg_fy&start_year.,0.01); l206_fy&start_year.= sum(l204_fy&start_year.,l205_fy&start_year.); l207_fy&start_year.= l209_fy&prev_year.; l208_fy&start_year.= round(pd_scpp*spg_fy&start_year.,0.01); l209_fy&start_year.= sum(l207_fy&start_year.,l208_fy&start_year.); l210_fy&start_year.= l212_fy&prev_year.; l211_fy&start_year.= round(ei_scpp*spg_fy&start_year.,0.01); l212_fy&start_year.= sum(l210_fy&start_year.,l211_fy&start_year.); l213_fy&start_year.= l215_fy&prev_year.; l214_fy&start_year.= round(tl_scpp*spg_fy&start_year.,0.01); l215_fy&start_year.= sum(l213_fy&start_year.,l214_fy&start_year.); run; %end; *end of loop; %mend; *end of macro; %loop(year_start=17, year_end=20);
here log:
2 sas system 11:35 monday, september 28, 2015 58 l215_fy&start_year.= sum(l213_fy&start_year.,l214_fy&start_year.); 59 60 run; 61 62 63 %end; 64 *end of loop; 65 66 %mend; 67 *end of macro; 68 69 %loop(year_start=17, year_end=20); 180: line , column cannot determined. note: nospool on. rerunning option spool might allow recovery of line , column error has occurred. error 180-322: statement not valid or used out of proper order. warning: apparent symbolic reference start_year not resolved. 180: line , column cannot determined. note: nospool on. rerunning option spool might allow recovery of line , column error has occurred. error 180-322: statement not valid or used out of proper order. 180: line , column cannot determined. note: nospool on. rerunning option spool might allow recovery of line , column error has occurred. error 180-322: statement not valid or used out of proper order. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. note: line generated invoked macro "loop". 69 ,l202_fy&start_year.); l204_fy&start_year.= l206_fy&prev_year.; l205_fy&start_year.= _______ 180 69 ! round(ts_scpp*spg_fy&start_year.,0.01); l206_fy&start_year.= sum(l204_fy&start_year.,l205_fy&start_year.); 69 ! l207_fy&start_year.= l209_fy&prev_year.; warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. note: line generated invoked macro "loop". 69 ,l202_fy&start_year.); l204_fy&start_year.= l206_fy&prev_year.; l205_fy&start_year.= _______ 180 69 ! round(ts_scpp*spg_fy&start_year.,0.01); l206_fy&start_year.= sum(l204_fy&start_year.,l205_fy&start_year.); 69 ! l207_fy&start_year.= l209_fy&prev_year.; error 180-322: statement not valid or used out of proper order. note: line generated invoked macro "loop". 69 ,l202_fy&start_year.); l204_fy&start_year.= l206_fy&prev_year.; l205_fy&start_year.= 69 ! round(ts_scpp*spg_fy&start_year.,0.01); l206_fy&start_year.= sum(l204_fy&start_year.,l205_fy&start_year.); _______ 180 69 ! l207_fy&start_year.= l209_fy&prev_year.; error 180-322: statement not valid or used out of proper order. note: line generated invoked macro "loop". 69 ,l202_fy&start_year.); l204_fy&start_year.= l206_fy&prev_year.; l205_fy&start_year.= 69 ! round(ts_scpp*spg_fy&start_year.,0.01); l206_fy&start_year.= sum(l204_fy&start_year.,l205_fy&start_year.); 69 ! l207_fy&start_year.= l209_fy&prev_year.; _______ 180 error 180-322: statement not valid or used out of proper order. 3 sas system 11:35 monday, september 28, 2015 warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. note: line generated invoked macro "loop". 69 l208_fy&start_year.= round(pd_scpp*spg_fy&start_year.,0.01); l209_fy&start_year.= _______ _______ _______ 180 180 180 69 ! sum(l207_fy&start_year.,l208_fy&start_year.); l210_fy&start_year.= l212_fy&prev_year.; l211_fy&start_year.= 69 ! round(ei_scpp*spg_fy&start_year.,0.01); warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. note: line generated invoked macro "loop". 69 l208_fy&start_year.= round(pd_scpp*spg_fy&start_year.,0.01); l209_fy&start_year.= 69 ! sum(l207_fy&start_year.,l208_fy&start_year.); l210_fy&start_year.= l212_fy&prev_year.; l211_fy&start_year.= _______ 180 69 ! round(ei_scpp*spg_fy&start_year.,0.01); error 180-322: statement not valid or used out of proper order. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. note: line generated invoked macro "loop". 69 l212_fy&start_year.= sum(l210_fy&start_year.,l211_fy&start_year.); l213_fy&start_year.= l215_fy&prev_year.; _______ _______ 180 180 69 ! l214_fy&start_year.= round(tl_scpp*spg_fy&start_year.,0.01); l215_fy&start_year.= 69 ! sum(l213_fy&start_year.,l214_fy&start_year.); warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. note: line generated invoked macro "loop". 69 l212_fy&start_year.= sum(l210_fy&start_year.,l211_fy&start_year.); l213_fy&start_year.= l215_fy&prev_year.; 69 ! l214_fy&start_year.= round(tl_scpp*spg_fy&start_year.,0.01); l215_fy&start_year.= _______ 180 69 ! sum(l213_fy&start_year.,l214_fy&start_year.); error 180-322: statement not valid or used out of proper order. note: line generated invoked macro "loop". 69 l212_fy&start_year.= sum(l210_fy&start_year.,l211_fy&start_year.); l213_fy&start_year.= l215_fy&prev_year.; 69 ! l214_fy&start_year.= round(tl_scpp*spg_fy&start_year.,0.01); l215_fy&start_year.= _______ 180 69 ! sum(l213_fy&start_year.,l214_fy&start_year.); error 180-322: statement not valid or used out of proper order. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. 4 sas system 11:35 monday, september 28, 2015 warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. note: sas system stopped processing step because of errors. warning: data set work.schoolaidfy17 may incomplete. when step stopped there 0 observations , 1197 variables. warning: data set work.schoolaidfy17 not replaced because step stopped. note: data statement used (total process time): real time 0.01 seconds cpu time 0.01 seconds 180: line , column cannot determined. note: nospool on. rerunning option spool might allow recovery of line , column error has occurred. error 180-322: statement not valid or used out of proper order. warning: apparent symbolic reference start_year not resolved. 180: line , column cannot determined. note: nospool on. rerunning option spool might allow recovery of line , column error has occurred. error 180-322: statement not valid or used out of proper order. 180: line , column cannot determined. note: nospool on. rerunning option spool might allow recovery of line , column error has occurred. error 180-322: statement not valid or used out of proper order. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. note: line generated invoked macro "loop". 69 ,l202_fy&start_year.); l204_fy&start_year.= l206_fy&prev_year.; l205_fy&start_year.= _______ 180 69 ! round(ts_scpp*spg_fy&start_year.,0.01); l206_fy&start_year.= sum(l204_fy&start_year.,l205_fy&start_year.); 69 ! l207_fy&start_year.= l209_fy&prev_year.; warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. note: line generated invoked macro "loop". 69 ,l202_fy&start_year.); l204_fy&start_year.= l206_fy&prev_year.; l205_fy&start_year.= _______ 180 69 ! round(ts_scpp*spg_fy&start_year.,0.01); l206_fy&start_year.= sum(l204_fy&start_year.,l205_fy&start_year.); 69 ! l207_fy&start_year.= l209_fy&prev_year.; error 180-322: statement not valid or used out of proper order. note: line generated invoked macro "loop". 69 ,l202_fy&start_year.); l204_fy&start_year.= l206_fy&prev_year.; l205_fy&start_year.= 69 ! round(ts_scpp*spg_fy&start_year.,0.01); l206_fy&start_year.= sum(l204_fy&start_year.,l205_fy&start_year.); _______ 180 69 ! l207_fy&start_year.= l209_fy&prev_year.; error 180-322: statement not valid or used out of proper order. note: line generated invoked macro "loop". 69 ,l202_fy&start_year.); l204_fy&start_year.= l206_fy&prev_year.; l205_fy&start_year.= 69 ! round(ts_scpp*spg_fy&start_year.,0.01); l206_fy&start_year.= sum(l204_fy&start_year.,l205_fy&start_year.); 69 ! l207_fy&start_year.= l209_fy&prev_year.; _______ 180 error 180-322: statement not valid or used out of proper order. 5 sas system 11:35 monday, september 28, 2015 warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. note: line generated invoked macro "loop". 69 l208_fy&start_year.= round(pd_scpp*spg_fy&start_year.,0.01); l209_fy&start_year.= _______ _______ _______ 180 180 180 69 ! sum(l207_fy&start_year.,l208_fy&start_year.); l210_fy&start_year.= l212_fy&prev_year.; l211_fy&start_year.= 69 ! round(ei_scpp*spg_fy&start_year.,0.01); warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. note: line generated invoked macro "loop". 69 l208_fy&start_year.= round(pd_scpp*spg_fy&start_year.,0.01); l209_fy&start_year.= 69 ! sum(l207_fy&start_year.,l208_fy&start_year.); l210_fy&start_year.= l212_fy&prev_year.; l211_fy&start_year.= _______ 180 69 ! round(ei_scpp*spg_fy&start_year.,0.01); error 180-322: statement not valid or used out of proper order. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. note: line generated invoked macro "loop". 69 l212_fy&start_year.= sum(l210_fy&start_year.,l211_fy&start_year.); l213_fy&start_year.= l215_fy&prev_year.; _______ _______ 180 180 69 ! l214_fy&start_year.= round(tl_scpp*spg_fy&start_year.,0.01); l215_fy&start_year.= 69 ! sum(l213_fy&start_year.,l214_fy&start_year.); warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. note: line generated invoked macro "loop". 69 l212_fy&start_year.= sum(l210_fy&start_year.,l211_fy&start_year.); l213_fy&start_year.= l215_fy&prev_year.; 69 ! l214_fy&start_year.= round(tl_scpp*spg_fy&start_year.,0.01); l215_fy&start_year.= _______ 180 69 ! sum(l213_fy&start_year.,l214_fy&start_year.); error 180-322: statement not valid or used out of proper order. note: line generated invoked macro "loop". 69 l212_fy&start_year.= sum(l210_fy&start_year.,l211_fy&start_year.); l213_fy&start_year.= l215_fy&prev_year.; 69 ! l214_fy&start_year.= round(tl_scpp*spg_fy&start_year.,0.01); l215_fy&start_year.= _______ 180 69 ! sum(l213_fy&start_year.,l214_fy&start_year.); error 180-322: statement not valid or used out of proper order. warning: apparent symbolic reference start_year not resolved. 6 sas system 11:35 monday, september 28, 2015 warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. note: sas system stopped processing step because of errors. warning: data set work.schoolaidfy17 may incomplete. when step stopped there 0 observations , 1197 variables. warning: data set work.schoolaidfy17 not replaced because step stopped. note: data statement used (total process time): real time 0.01 seconds cpu time 0.01 seconds 180: line , column cannot determined. note: nospool on. rerunning option spool might allow recovery of line , column error has occurred. error 180-322: statement not valid or used out of proper order. warning: apparent symbolic reference start_year not resolved. 180: line , column cannot determined. note: nospool on. rerunning option spool might allow recovery of line , column error has occurred. error 180-322: statement not valid or used out of proper order. 180: line , column cannot determined. note: nospool on. rerunning option spool might allow recovery of line , column error has occurred. error 180-322: statement not valid or used out of proper order. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. note: line generated invoked macro "loop". 69 ,l202_fy&start_year.); l204_fy&start_year.= l206_fy&prev_year.; l205_fy&start_year.= _______ 180 69 ! round(ts_scpp*spg_fy&start_year.,0.01); l206_fy&start_year.= sum(l204_fy&start_year.,l205_fy&start_year.); 69 ! l207_fy&start_year.= l209_fy&prev_year.; warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. note: line generated invoked macro "loop". 69 ,l202_fy&start_year.); l204_fy&start_year.= l206_fy&prev_year.; l205_fy&start_year.= _______ 180 69 ! round(ts_scpp*spg_fy&start_year.,0.01); l206_fy&start_year.= sum(l204_fy&start_year.,l205_fy&start_year.); 69 ! l207_fy&start_year.= l209_fy&prev_year.; error 180-322: statement not valid or used out of proper order. note: line generated invoked macro "loop". 69 ,l202_fy&start_year.); l204_fy&start_year.= l206_fy&prev_year.; l205_fy&start_year.= 69 ! round(ts_scpp*spg_fy&start_year.,0.01); l206_fy&start_year.= sum(l204_fy&start_year.,l205_fy&start_year.); _______ 180 69 ! l207_fy&start_year.= l209_fy&prev_year.; error 180-322: statement not valid or used out of proper order. note: line generated invoked macro "loop". 69 ,l202_fy&start_year.); l204_fy&start_year.= l206_fy&prev_year.; l205_fy&start_year.= 69 ! round(ts_scpp*spg_fy&start_year.,0.01); l206_fy&start_year.= sum(l204_fy&start_year.,l205_fy&start_year.); 69 ! l207_fy&start_year.= l209_fy&prev_year.; _______ 180 note: sas system stopped processing step because of errors. warning: data set work.schoolaidfy17 may incomplete. when step stopped there 0 observations , 1197 variables. warning: data set work.schoolaidfy17 not replaced because step stopped. note: data statement used (total process time): real time 0.01 seconds cpu time 0.01 seconds 180: line , column cannot determined. note: nospool on. rerunning option spool might allow recovery of line , column error has occurred. error 180-322: statement not valid or used out of proper order. warning: apparent symbolic reference start_year not resolved. 180: line , column cannot determined. note: nospool on. rerunning option spool might allow recovery of line , column error has occurred. error 180-322: statement not valid or used out of proper order. 180: line , column cannot determined. note: nospool on. rerunning option spool might allow recovery of line , column error has occurred. error 180-322: statement not valid or used out of proper order. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. note: line generated invoked macro "loop". 69 ,l202_fy&start_year.); l204_fy&start_year.= l206_fy&prev_year.; l205_fy&start_year.= _______ 180 69 ! round(ts_scpp*spg_fy&start_year.,0.01); l206_fy&start_year.= sum(l204_fy&start_year.,l205_fy&start_year.); 69 ! l207_fy&start_year.= l209_fy&prev_year.; warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. warning: apparent symbolic reference start_year not resolved. note: line generated invoked macro "loop". 69 ,l202_fy&start_year.); l204_fy&start_year.= l206_fy&prev_year.; l205_fy&start_year.= _______ note: sas system stopped processing step because of errors. warning: data set work.schoolaidfy17 may incomplete. when step stopped there 0 observations , 1197 variables. warning: data set work.schoolaidfy17 not replaced because step stopped. note: data statement used (total process time): real time 0.01 seconds cpu time 0.01 seconds 70 71 72 73 74 goptions noaccessible; 75 %let _clienttasklabel=; 76 %let _clientprojectpath=; 77 %let _clientprojectname=; 78 %let _sasprogramfile=; 79 80 ;*';*";*/;quit;run; 81 ods _all_ close; 82 83 84 quit; run; 85
you need macro loop if want different datasets. if want single data set
*start macro loop - takes 2 parameters, first year of dataset created , last year; options mprint symbolgen; %macro loop(year_start, year_end); *loop on years; %do year=&year_start %to &year_end; *create macro variable previous years; %let prev_year=%eval(&year_start-1); data schoolaid_fy&year_start.; set work.schoolaid_fy&prev_year.; * cost per pupil amounts; l201_fy&start_year.= l203_fy&prev_year.; l202_fy&start_year.= round(scpp*spg_fy&prev_year.,1); l203_fy&start_year.= sum(l201_fy&prev_year.,l202_fy&prev_year.); *rest of code; run; %end; *end of loop; %mend; *end of macro;
then have call macro, example if want 15 20 use year_start=15 , year_end=20.
%loop(year_start=15, year_end=20);
Comments
Post a Comment