Very odd- it works perfectly now without the macros- thank you. Nice to see arrays in action in sas. Any chance i can nest it in a macro like below? Syntax has gotten the best of me - below code is erorring out (i hvae 115 of those variables in the actual dataset, would be nice to have it automated for the "returns" array - tried the %DO_OVER macro but didnt work).... %macro cumretsarr (field=,cnt=); %LET var = &field; data project.ToyData6; set project.ToyData3; data project.ToyData6; set project.ToyData3; by i; array varlist {cnt} &var; array cumvals {cnt} _temporary_; array logvals {cnt} _temporary_; array returns {cnt} &var /* array returns {cnt} %DO_OVER(var,PHRASE=rtn.? ) ; ******/ do _n_=1 to cnt; logvals{_n_} = log(1+varlist{_n_}); if first.i then cumvals{_n_} = logvals{_n_}; else cumvals{_n_} = cumvals{_n_} + logvals{_n_}; returns{_n_} = exp(cumvals{_n_}) - 1; end; run; %mend cumretsarr; %macro loop(values); %let count=%sysfunc(countw(&values)); %do i = 1 %to &count; %let value=%qscan(&values,&i,%str(,)); /* %cumrets (field=&value,cnt=count); */ %cumretsarr (field=&value,cnt=count); %end; %mend; %loop(%str(ret, CLongGrowth_lag6, CLongGrowth_lag7, TotalReportableGrowth_lag1, TotalReportableGrowth_lag2, TotalReportableGrowth_lag3, TotalReportableGrowth_lag4, TotalReportableGrowth_lag5, TotalReportableGrowth_lag6, TotalReportableGrowth_lag7)); /************ below is part of the log file when above is run - doesnt seem to like the list &var and the %do_over macro i tried to invoke ******************/ NOTE: Line generated by the invoked macro "CUMRETSARR". 1031 data project.ToyData6; set 1031! project.ToyData3; by i; array varlist {cnt} &var; array cumvals {cnt} _temporary_; array --- --- --- 22 22 22 202 202 202 1031! logvals {cnt} _temporary_; array returns {cnt} &var do _n_=1 to cnt; logvals{_n_} NOTE 137-205: Line generated by the invoked macro "CUMRETSARR". 1031 data project.ToyData6; set project.ToyData3; data project.ToyData6; set 1031! project.ToyData3; by i; array varlist {cnt} &var; array cumvals {cnt} _temporary_; array 1031! logvals {cnt} _temporary_; array returns {cnt} &var do _n_=1 to cnt; logvals{_n_} --- 22 ERROR 22-322: Syntax error, expecting one of the following: an integer constant, *. ERROR 202-322: The option or parameter is not recognized and will be ignored. NOTE: Line generated by the invoked macro "CUMRETSARR". 1031 data project.ToyData6; set project.ToyData3; data project.ToyData6; set 1031! project.ToyData3; by i; array varlist {cnt} &var; array cumvals {cnt} _temporary_; array 1031! logvals {cnt} _temporary_; array returns {cnt} &var do _n_=1 to cnt; logvals{_n_} --- 202 ERROR 202-322: The option or parameter is not recognized and will be ignored. NOTE 137-205: Line generated by the invoked macro "CUMRETSARR". 1031 data project.ToyData6; set project.ToyData3; data project.ToyData6; set 1031! project.ToyData3; by i; array varlist {cnt} &var; array cumvals {cnt} _temporary_; array 1031! logvals {cnt} _temporary_; array returns {cnt} &var do _n_=1 to cnt; logvals{_n_} -
... View more