x cd /pub/data/sf32000/Tools; %let pgm=invoke_sdcpro3; filename pgm "&pgm..sas"; /* Setup to invoke the sdcpro3 macro to generate one or more profile reports using the sdcprofile3 code by the national SDC. */ options NOmprint NOsource2; *options mprint source2; libname user '/tmp/scratch/user'; libname sf3 '/pub/data/sf32000'; ods listing close; %let temp=; *options msglevel=i fullstimer; *include '/pub/sasmacro/sdcpro3.sas'; *sdcpro3(setin=sf3temp.mostcnty,stab=mo,sumlev=040,logrecno=1,profiles=all) ; *sdcpro3(setinstab=mo,sumlev=050,logrecno=1,profiles=all) ; %macro doit(county,cntyname,sumlev=050); %global gstab; %local stab; %let stab=&gstab; %if &sumlev=050 %then %do; data c&county; set sf3.&gstab.stcnty; where county="&county"; run; %end; %else %if &sumlev=040 %then %do; %*--when SumLev=040 we assume the first pos parm, called county, is reall the fips state code; data c&county; set sf3.&stab.stcnty (obs=1); run; %end; %local i gpros gpro; %let gpros=1 2 i p h je aml d ft; %let i=1; %let gpro=%scan(&gpros,1); %do %until(&gpro eq %str()); %sdcpro3(setin=c&county,stab=&gstab,sumlev=&sumlev, outlib=%str(/pub/webrepts/sdcprofiles3/&gstab),profiles=&gpro,outname=&sumlev._&county._&gpro) %let i=%eval(&i+1); %let gpro=%scan(&gpros,&i); %end; %put ***Profiles generated for &county &cntyname ****; %mend doit; /*<=========================Comment out===================================== *---do all the profiles for the state level---; %let gstab=mo; %doit(29,Missouri,sumlev=040); %let gstab=ks; %doit(20,Kansas,sumlev=040); %let gstab=il; %doit(17,Illinois,sumlev=040); %let gstab=mo; *docos(names=1,cos=,stab=mo); *<------Does all counties in Missouri--; %let gstab=ks; %docos(names=1,cos=,state=20) *<------Does all counties in Kansas--; %let gstab=il; %docos(names=1,cos=,state=17) *<------Does all counties in Illinois--; ===========================End commented out================================ */ *=======================Do all places of 10000 or more pop============================; %macro doplaces(stab); %*--Create a temp dataset with all the data for places 10000+. In subsequent loop go thru this dataset and create temporayr 1-obs subsets which are then used as the input set for each invocation of sdcpro3 for that place ( 9 invocations for 9 profiles). --; %global gstab; %let gstab=&stab; data &stab.places ; merge sf3.&stab.ph sf3.&stab.phct sf3.&stab.phctr end=last; by logrecno; where SumLev='160' and pop100 ge 10000; retain macvname 'placexxxx' nsfx ' '; nsfx=left(put(_n_,4.)); *substr(macvname,6)=nsfx; *<---looks like we do not need this after all---; *call symput(macvname,placefp); *<---so, for example, &place4 contains FIPS place code for the 4th place. Etc.-; if last then call symput('nplaces',trim(nsfx)); run ; %put &stab.places dataset created with &nplaces observations *******; %*---This do loop executes once per (selected) place. We create a 1-obs dataset and then invoke the profiles code 9 times to generate the set of profiles.---; %do j=1 %to &nplaces; data d&j; set &stab.places(obs=&j firstobs=&j); call symput('placefp',placefp); call symput('placename',areaname); put 'Begin processing ' placefp areaname; run; %local i gpros gpro; %let gpros=1 2 i p h je aml d ft; %let i=1; %let gpro=%scan(&gpros,1); %do %until(&gpro eq %str()); %sdcpro3(setin=d&j,stab=&gstab,sumlev=160, outlib=%str(/pub/webrepts/sdcprofiles3/&gstab),profiles=&gpro,outname=160_&placefp._&gpro) %let i=%eval(&i+1); %let gpro=%scan(&gpros,&i); %end; %put ***Profiles generated for &placefp ****; %end; %*---j loop to process places----; %mend doplaces; options NOmprint; %doplaces(mo); %doplaces(ks); %doplaces(il); %include sascode(notify);