Minor but indicative.
There multiple steps involving created a data sets Cntr2, cntr3 etc. like this that appear to only be intended to create macro variable:
data cntr4;
length cntr2 $3;
cntr2=4-1;
cntr2=compress(cntr2);
run;
proc sql noprint;
select cntr2 into :cntr2 from cntr4;
quit;
If the 4 comes from a macro variable that is only ever integer values then this could replace the data step and the Proc sql call. I know they aren't taking much time but proliferating data steps and procedure calls do add up. I couldn't see where any of these CntrX data sets were used for anything except creation of the same named macro variable.
%let cntr2 = %eval(¯ovariable. -1);
What I am seeing is apparently a bunch of data sets named in part with Provide, data source or time frame and FIPS code values. My feeling, especially because of the LOOP over Provider and FIPS if not quite the data source is that By group processing still seems more likely to reduce run time.
... View more