x cd c:\sdcprof3; %let pgm=cnvtsf3; filename pgm "&pgm..sas"; *<====mo only===; *--------------This version edited to run on Windows at OSEDA/MCDC 7-20-02, JGB ---; /*--This program will read a set of ascii csv files containing the Census 2000 SF3 data for a state (or US in the case of the national file). John Blodgett, OSEDA, U. of Missouri Under contract with the Missouri Census Data Center. Part of the joint project of the national State Data Center. Spring, 2002. ---*/ /*-------Revision history: 7-20-02: Begin revisions to make it run in Windows env. 7-24-02: Running with new data sent on cd this morning. 8-13-02: Error found in reading HCT30H and HCT30G tables, file 70. They were reversed in the length statement at (appx) lines 610/611. 8-21-02: Input statement changed to read a new var, UASC, and to correct value of UAType which was being read from wrong column. 8-28-02: Adding concit to defn of geocode for sumlevs 463 and 465. Reading submcd from col. 168 instead of 160. Adding format county $county. statement, commented out for the windows version. 9-28-02: Mods to process the US file properly. Specifically, modes to recognize SumLev codes for UA- levels. 10-05-02: Mods per feedback from Roy Williams: 1.removed afilesfx macro. 2. fixed col for reading submcd 3. Added when ('400') geocode=ua; --------*/ *<==============code parameter !!!!!!!! ========= specs identifying the file (state or us) to be converted--; %let stab=vt; %let state=50; *---Vermont---; %let ucstab=%upcase(&stab); *---save this report in new .lst file for each state converted---; proc printto print = "..\temp\&pgm&stab..lst" new; run; %let curpath=%str(c:\sdcprof3); filename curpath "&curpath"; *<===points to current directory. We shall do some %include s below that reference sas label-statement modules in the same directory as the current program.--; %let inpath=%str(c:\sdcprof3\data); *<===path (directory) where the input raw data is stored---*; libname sf32000 "&inpath"; *<===========output sas data sets stored here. By default, this is the same directory (folder) as input files======; libname sf3 "&inpath"; *--You can use this alternate libname if you want. Mix and match--; title "Conversion of 2000 Summary File 3 Data for &ucstab"; %let maxobs= 999999; *<=======while testing, limits processing to this many input recs==; %let filesfx=uf3; *<====no more afilesfx macro needed as with sf1. sf3 never uses a u3 suffix-; *filename geos "&inpath\&stab.geo.&filesfx"; *<====assumes you have unzipped the .zip file with this inside; filename geos pipe "unzip -p &inpath\&stab.geo_&filesfx"; x cd &inpath; *<---make it the current directory--; %macro select; %*--This macro will be invoked when reading the headers data. It should assign a value of 1 to _keep to indicate that the record/observation is to be processed. 1 means read the data, 0 means do not.--; retain _keep 1; if sumlev in ('040','050','060','160') and geocomp='00' then _keep=1; else _keep=0; *<====For example==; **<===add/substitute your custom code here. You can access any variable on the geography headers file--; %mend select; *---Define custom SAS format codes. You may want to edit the formats.sas file to make it smaller or to specify a library parm so that the formats are permanently saved--; %include "&curpath/formats.sas"/nosource2; data sf32000.&stab.geos (compress=yes sortedby=LogRecNo label="2000 Summary File 3 (SF3) Geo Headers data for &ucstab" keep=geocode--AreaSQMI PCT) sf32000.&stab.ph(compress=yes sortedby=LogRecNo label="2000 sf3 P & H Tables for &ucstab" keep=geocode--AreaSQMI PCT P1i1--P160Ii41 H1i1--H121i7) sf32000.&stab.phct(compress=yes sortedby=LogRecNo label="2000 sf3 PCT & HCT tables exc PCTr for &ucstab" keep=geocode--AreaSQMI PCT1i1--PCT61i81 HCT1i1--HCT28i13) sf32000.&stab.phctR(compress=yes sortedby=LogRecNo label="2000 sf3 PCT & HCT Tables by Race for &ucstab" keep=geocode--AreaSQMI PCT62Ai1--PCT76Ii29 HCT29Ai1--HCT48Ii3) ; infile geos missover lrecl=1024 obs=&maxobs; retain _first 1; drop _first; length GeoCode $44 SumLev $3 GeoComp $2 AreaName $90; *--establish variable order -- these go first--; retain State "&state" Stab "&stab"; length County $5 Tract $7; *--and then these... -; * format county $county.; *<=====uncomment this if you have format code available and want to see name, not code=; if _first then do; input FileId $char6. stusab $2. @; retain FileId stusab; drop fileid stusab; if substr(FileId,2,3) ne 'SF3' then do; file log; put '******Problem with input geographic headers file. Did not find "SF3" in cols. 2-4 ' FileId= / '***Conversion will not run***'; stop; end; end; input @9 SumLev $3. geocomp $2. @19 LogRecNo 7. @26 Region $1. Division $1. StateCe $2. State $2. Cnty $3. CntySC $2. @37 CouSubFP $5. CouSubCC $2. CouSubSC $2. PlaceFP $5. PlaceCC $2. PlaceDC $1. PlaceSC $2. @56 TractIn $6. BG $1. Block $4. @69 ConCit $5. @78 aianhh $char4. aianhhfp $char5. aianhhcc $char2. aihhtli $1. aitsce $char3. aits $char5. aitscc $char2. anrc $char5. anrccc $char2. @107 MSACMSA $4. MASC $2. CMSA2 $2. MACCI $1. PMSA $4. NECMA $4. @128 UA $5. UASC $2. UAType $1. @136 UrbanRur $1. cd106 $2. cd108 $2. +4 (sldu sldl)($char3.) vtd $char6. vtdi $1. @158 ZCTA3 $3. ZCTA5 $5. @168 SubMCD $5. @173 (AreaLand AreaWatr)(14.) AreaName $90. FuncStat $1. gcuni $1. @293 Pop100 9. HU100 9. IntPtLat 9.6 IntPtLon 10.6 LSADC $2. @332 PartFlag $1. (SDElm SDSec SDUni)($5.) TAZ $6. UGA $5. PUMA5 $5. PUMA1 $5. @384 MACC $char5. UACP $char5. ; %select ; *<-----Invoke the macro that will filter based on value of sumlev-------------------*; if cnty ne ' ' then County=state||cnty; *--edit the tract so that it is in xxxx.xx format with leading and trailing zeroes--; if TractIn ne ' ' then Tract=translate( substr(TractIn,1,4)||'.'||substr(TractIn,5,2) ,'0',' '); drop tractin; %macro concatd(g1,g2,g3,g4,g5,g6,g7,g8); %*--utility macro used to create geocode values-; %*--utility macro to return a SAS expression that will be the concatenation of specified char variables separated by dashes-; %local dash gc; %let dash=%str(||'-'||); %*--we build the value of local variable gc which is then "returned" as the result of invoking the macro-; %let gc=&g1; %if &g2= %then %goto rtrn; %let gc=&gc&dash&g2; %if &g3= %then %goto rtrn; %let gc=&gc&dash&g3; %if &g4= %then %goto rtrn; %let gc=&gc&dash&g4; %if &g5= %then %goto rtrn; %let gc=&gc&dash&g5; %if &g6= %then %goto rtrn; %let gc=&gc&dash&g6; %if &g7= %then %goto rtrn; %let gc=&gc&dash&g7; %if &g8= %then %goto rtrn; %let gc=&gc&dash&g8; %rtrn: &gc %mend concatd; select(SumLev); *---Assign the standardized Geographic Code to uniquely ID the geographic area--; when('010') geocode=' '; when('020') geocode=region; when('030') geocode=division; when('040') geocode=state; when('050') geocode=county; when('060') geocode=%concatd(county,cousubfp); when('070') geocode=%concatd(county,cousubfp,placefp); when('080') geocode=%concatd(county,cousubfp,placefp,tract); when('085') do; geocode=%concatd(county,cousubfp,placefp,tract,UrbanRur); Areaname = "Census Tract "||tract||" ("||TRIM(areaname)||" part)" ; end; when('090') geocode=%concatd(county,cousubfp,placefp,tract,UrbanRur,bg); when('067') geocode=%concatd(county,cousubfp,SubMCD); when('140') geocode=%concatd(county,tract); when('144') geocode=%concatd(county,tract,aianhhfp); when('150') geocode=%concatd(county,tract,bg); when('154') geocode=%concatd(county,tract,bg,aianhhfp); when('155') do; geocode=%concatd(county,placefp); *<===Override areaname to make it the name of the place rather than the county.To leave as-is delete this + next 4 lines; length _arg $7; _arg=state||placefp; drop _arg; areaname=put(_arg,$fplace.); if areaname=_arg then areaname='Place '||placefp; end; when('158') geocode=%concatd(state,placefp,cnty,tract); when('160') geocode=%concatd(state,placefp); when('170') geocode=%concatd(state,concit); when('172') geocode=%concatd(state,concit,placefp); when('250') geocode=aianhh; when('260') geocode=%concatd(aianhhfp,state); when('270') geocode=%concatd(aianhhfp,cnty); when('271') geocode=%concatd(aianhhfp,cnty,cousubfp); when('273') geocode=%concatd(aianhhfp,cnty,cousubfp,placefp); when('252') geocode=aianhh; when('262') geocode=%concatd(aianhhfp,state); when('272') geocode=%concatd(aianhhfp,cnty); when('275') geocode=%concatd(aianhhfp,cnty,cousubfp); when('276') geocode=%concatd(aianhhfp,cnty,cousubfp,placefp); when('254') geocode=aianhh; when('264') geocode=%concatd(aianhhfp,state); when('274') geocode=%concatd(aianhhfp,cnty); when('277') geocode=%concatd(aianhhfp,cnty,cousubfp); when('278') geocode=%concatd(aianhhfp,cnty,cousubfp,placefp); when('256','291','292') geocode=%concatd(aianhhfp,tract); when('258','293','294') geocode=%concatd(aianhhfp,tract,bg); when('251','253','255') geocode=%concatd(aianhhfp,aits); when('257') geocode=%concatd(aianhhfp,aits,tract); when('259') geocode=%concatd(aianhhfp,aits,tract,bg); when('290') geocode=%concatd(aianhhfp,aits,state); when('280','283','286') geocode=%concatd(state,aianhhfp); when('282','285','288') geocode=%concatd(state,aianhhfp,cnty); when('261','265','267') geocode=%concatd(state,aianhhfp,cnty,cousubfp); when('263','266','268') geocode=%concatd(state,aianhhfp,cnty,cousubfp,placefp); when('281','284','287') geocode=%concatd(state,aianhhfp,aits); when('230') geocode=%concatd(state,anrc); when('380') geocode=msacmsa; when('381') geocode=%concatd(msacmsa,state); when('382') geocode=%concatd(msacmsa,state,placefp); when('383') geocode=%concatd(msacmsa,state,cnty); when('384') geocode=%concatd(msacmsa,state,cousubfp); when('385') geocode=pmsa; when('386') geocode=%concatd(pmsa,state); when('387') geocode=%concatd(pmsa,state,cnty); when('388') geocode=%concatd(pmsa,state,cousubfp); when('370') geocode=necma; when('371') geocode=%concatd(necma,state); when('372') geocode=%concatd(necma,state,placefp); when('373') geocode=%concatd(necma,state,cnty); when('390') geocode=%concatd(state,msacmsa); when('391') geocode=%concatd(state,msacmsa,placefp); when('392') geocode=%concatd(state,msacmsa,cnty); when('393') geocode=%concatd(state,msacmsa,cnty,cousubfp); when('395') geocode=%concatd(state,msacmsa,pmsa); when('396') geocode=%concatd(state,msacmsa,pmsa,cnty); when('397') geocode=%concatd(state,msacmsa,pmsa,cnty,cousubfp); when('374') geocode=%concatd(state,necma); when('375') geocode=%concatd(state,necma,placefp); when('376') geocode=%concatd(state,necma,cnty); when('400') geocode=ua; *---the following 7 When clauses treat the SumLev pairs as equivalents. The only "difference" is the order of the variables. On a state level file 420 is State-UA, while on the national file it is UA-State. For assigning geocode, we treat them as the same and always put UA ahead of state.--; when('410','420') geocode=%concatd(UA,state); when('430','431') geocode=%concatd(UA,state,cnty); when('440','441') geocode=%concatd(UA,state,cnty,cousubfp); when('450','451') geocode=%concatd(UA,state,cnty,cousubfp,placefp); when('460','461') geocode=%concatd(UA,state,placefp); when('462','463') geocode=%concatd(UA,state,concit); when('464','465') geocode=%concatd(UA,state,concit,placefp); when('500') geocode=%concatd(state,cd106); when('510') geocode=%concatd(state,cd106,cnty); when('511') geocode=%concatd(state,cd106,cnty,tract); when('521') geocode=%concatd(state,cd106,cnty,cousubfp); when('531') geocode=%concatd(state,cd106,placefp); when('541') geocode=%concatd(state,cd106,concit,placefp); when('550','551','552') geocode=%concatd(state,cd106,aianhhfp); when('553','554','555') geocode=%concatd(state,cd106,aianhhfp,aits); when('850') geocode=zcta3; when('860') geocode=zcta5; when('851') geocode=%concatd(state,zcta3); when('852') geocode=%concatd(state,zcta3,cnty); when('871') geocode=%concatd(state,zcta5); when('881') geocode=%concatd(state,zcta5,cnty); otherwise do; if sumlev ne lag(sumlev) then do; _badsl+1; drop _badsl; if _badsl le 50 then put '**Unrecognized SUMLEV: ' sumlev; end; end; end; *--select group--; geocode=compress(geocode,' '); *---remove any blanks from geocode---; %macro astab; %*---Defines the stab (State Abbreviation) variable when converting a national file---*; %if %quote(&Ucstab) eq US %then %do; if state=' ' then stab=' '; else stab=put(state,$fipstab.); *<====requires the $fipstab format code be defined. See http://mcdc2.missouri.edu/sastools/sas_formats/Sfipstab.sas --; %end; %*--otherwise we have a retain statement above that causes variable stab to have a value of "&stab"-; %mend astab; %astab *--Set flag to indicate whether this geographic summary level will have data for the CT tables--; _readCT= ( sumlev not in ('Z85','090','150','154') ); *<--note that 085, tract/UR is NOT!(now) considered sub-tract-; attrib PCT length=3 format=1. label='PCT /HCT data flag'; PCT=_readCT; *<--------save the flag on the geos data set-------------------------; *--Create land and total area values in square miles. --; LandSQMI=AreaLand/2589988; AreaSQMI=LandSQMI + (AreaWatr/2589988); format LandSQMI AreaSQMI 9.2; format IntPtLon 11.6 IntPtLat 10.6; *<--added 7-13-01-; label SumLev='Geographic Summary Level' GeoComp='Geographic Component'; label cnty='County code'; label LandSQMI='Land Area Sq Mls' AreaSQMI='Total Area Sq Mls' AreaLand='Land Area Sq Meters' AreaWatr='Water Area Sq Meters'; label cd106='Cong District - 106th (1998)' sldu='State Leg District Upper Chbr' sldl='State Leg District Lower Chbr'; label ZCTA5='ZIP Census Tabulation Area'; *---For processing zip codes on the national files we assign the "primary" state code associated with the zip or zip center (zcta5 or zcta3) using the builtin SAS functions zipfips and zipstate--; if sumlev in ('850','860') then do; length _ziparg $5 ; if sumlev='850' then _ziparg=zcta3||'01'; else _ziparg=zcta5; if sumlev='860' and substr(zcta5,4,2) in ("XX","HH") then _ziparg=substr(zcta5,1,3)||'01'; state= put ( zipfips(_ziparg), z2. ); stab = lowcase ( zipstate(_ziparg) ); if stab=' ' then do; _error_=0; file log; _nziperr+1; if _nziperr=1 then put '****ZIP codes not assigned to states****'; put +2 _ziparg $5. @@; end; drop _ziparg _nziperr; end; drop _keep _readCT; *---Use length statements to set up the variables in order in the PDV (program data vector). Then we can used "double-dash" variable intervals in the input statements and SAS will know which variables are in those intervals----*; %*--assign the macro vars containing the first and last variables in each input file--; *<=============================Parm assignment code starts here============================; length P1i1 P2i1 P3i1 P4i1 P5i1-P5i7 P6i1-P6i8 P7i1-P7i17 P8i1-P8i79 P9i1-P9i27 P10i1-P10i19 P11i1-P11i21 P12i1-P12i31 P13i1-P13i19 P14i1-P14i16 5; %let fvar1=P1i1; %let lvar1=P14i16; %let nvar1=248; length P15i1-P15i20 P16i1-P16i26 P17i1-P17i20 P18i1-P18i19 P19i1-P19i67 P20i1-P20i14 P21i1-P21i15 P22i1-P22i9 P23i1-P23i10 P24i1-P24i18 5; %let fvar2=P15i1; %let lvar2=P24i18; %let nvar2=218; length P25i1-P25i35 P26i1-P26i5 P27i1-P27i5 P28i1-P28i25 P29i1-P29i5 P30i1-P30i16 P31i1-P31i15 P32i1-P32i13 P33i1-P33i13 P34i1-P34i17 P35i1-P35i10 P36i1-P36i47 P37i1-P37i35 5; %let fvar3=P25i1; %let lvar3=P37i35; %let nvar3=241; length P38i1-P38i22 P39i1-P39i23 P40i1-P40i21 P41i1-P41i19 P42i1-P42i49 P43i1-P43i15 P44i1-P44i29 P45i1-P45i22 P46i1-P46i27 5; %let fvar4=P38i1; %let lvar4=P46i27; %let nvar4=227; length P47i1-P47i49 P48i1-P48i21 P49i1-P49i55 P50i1-P50i95 5; %let fvar5=P47i1 ; %let lvar5=P50i95; %let nvar5=220; length P51i1-P51i65 P52i1-P52i17 P53i1 P54i1-P54i3 P55i1-P55i120 P56i1-P56i8 P57i1-P57i8 P58i1-P58i3 P59i1-P59i3 P60i1-P60i3 P61i1-P61i3 P62i1-P62i3 P63i1-P63i3 P64i1-P64i3 P65i1-P65i3 P66i1-P66i3 P67i1 5; %let fvar6=P51i1; %let lvar6=P67i1; %let nvar6=250; length P68i1 P69i1 P70i1 P71i1 P72i1 P73i1 P74i1 P75i1 P76i1-P76i17 P77i1 P78i1-P78i3 P79i1-P79i17 P80i1 P81i1-P81i3 P82i1 P83i1 P84i1-P84i43 P85i1-P85i3 P86i1-P86i3 P87i1-P87i17 P88i1-P88i10 P89i1-P89i39 P90i1-P90i41 P91i1-P91i5 5; %let fvar7=P68i1; %let lvar7=P91i5; %let nvar7=213; length P92i1-P92i59 P93i1-P93i19 P94i1-P94i3 P95i1-P95i3 P96i1-P96i3 P97i1-P97i3 P98i1-P98i3 P99i1-P99i3 P100i1-P100i3 P101i1-P101i3 P102i1-P102i5 P103i1-P103i7 P104i1-P104i3 P105i1-P105i3 P106i1-P106i3 P107i1-P107i3 P108i1-P108i3 P109i1-P109i7 P110i1-P110i5 P111i1-P111i3 P112i1-P112i3 P113i1-P113i3 P114i1-P114i3 P115i1-P115i7 P116i1-P116i3 P117i1-P117i3 P118i1-P118i3 P119i1-P119i3 P120i1-P120i3 P121i1-P121i3 P122i1-P122i3 P123i1-P123i3 P124i1-P124i3 P125i1-P125i3 P126i1-P126i5 P127i1-P127i3 P128i1-P128i5 P129i1-P129i5 P130i1-P130i5 P131i1-P131i3 P132i1-P132i3 P133i1-P133i5 P134i1-P134i5 P135i1-P135i3 P136i1-P136i3 P137i1-P137i3 P138i1-P138i7 5; %let fvar8=P92i1; %let lvar8=P138i7; %let nvar8=245; length P139i1-P139i7 P140i1-P140i7 P141i1-P141i7 P142i1-P142i7 P143i1-P143i14 P144i1-P144i14 P145Ai1-P145Ai49 P145Bi1-P145Bi49 P145Ci1-P145Ci49 5; %let fvar9=P139i1; %let lvar9=P145Ci49; %let nvar9=203; length P145Di1-P145Di49 P145Ei1-P145Ei49 P145Fi1-P145Fi49 P145Gi1-P145Gi49 P145Hi1-P145Hi49 5; %let fvar10=P145Di1; %let lvar10=P145Hi49; %let nvar10=245; length P145Ii1-P145Ii49 P146Ai1-P146Ai31 P146Bi1-P146Bi31 P146Ci1-P146Ci31 P146Di1-P146Di31 P146Ei1-P146Ei31 P146Fi1-P146Fi31 5; %let fvar11=P145Ii1; %let lvar11=P146Fi31; %let nvar11=235; length P146Gi1-P146Gi31 P146Hi1-P146Hi31 P146Ii1-P146Ii31 P147Ai1-P147Ai17 P147Bi1-P147Bi17 P147Ci1-P147Ci17 P147Di1-P147Di17 P147Ei1-P147Ei17 P147Fi1-P147Fi17 P147Gi1-P147Gi17 P147Hi1-P147Hi17 P147Ii1-P147Ii17 5; %let fvar12=P146Gi1; %let lvar12=P147Ii17; %let nvar12=246; length P148Ai1-P148Ai17 P148Bi1-P148Bi17 P148Ci1-P148Ci17 P148Di1-P148Di17 P148Ei1-P148Ei17 P148Fi1-P148Fi17 P148Gi1-P148Gi17 P148Hi1-P148Hi17 P148Ii1-P148Ii17 P149Ai1-P149Ai22 P149Bi1-P149Bi22 P149Ci1-P149Ci22 P149Di1-P149Di22 5; %let fvar13=P148Ai1; %let lvar13=P149Di22; %let nvar13=241; length P149Ei1-P149Ei22 P149Fi1-P149Fi22 P149Gi1-P149Gi22 P149Hi1-P149Hi22 P149Ii1-P149Ii22 P150Ai1-P150Ai15 P150Bi1-P150Bi15 P150Ci1-P150Ci15 P150Di1-P150Di15 P150Ei1-P150Ei15 P150Fi1-P150Fi15 P150Gi1-P150Gi15 P150Hi1-P150Hi15 P150Ii1-P150Ii15 5; %let fvar14=P149Ei1; %let lvar14=P150Ii15; %let nvar14=245; length P151Ai1-P151Ai17 P151Bi1-P151Bi17 P151Ci1-P151Ci17 P151Di1-P151Di17 P151Ei1-P151Ei17 P151Fi1-P151Fi17 P151Gi1-P151Gi17 P151Hi1-P151Hi17 P151Ii1-P151Ii17 P152Ai1 P152Bi1 P152Ci1 P152Di1 P152Ei1 P152Fi1 P152Gi1 P152Hi1 P152Ii1 P153Ai1 P153Bi1 P153Ci1 P153Di1 P153Ei1 P153Fi1 P153Gi1 P153Hi1 P153Ii1 P154Ai1-P154Ai17 P154Bi1-P154Bi17 P154Ci1-P154Ci17 P154Di1-P154Di17 5; %let fvar15=P151Ai1; %let lvar15=P154Di17; %let nvar15=239; length P154Ei1-P154Ei17 P154Fi1-P154Fi17 P154Gi1-P154Gi17 P154Hi1-P154Hi17 P154Ii1-P154Ii17 P155Ai1 P155Bi1 P155Ci1 P155Di1 P155Ei1 P155Fi1 P155Gi1 P155Hi1 P155Ii1 P156Ai1 P156Bi1 P156Ci1 P156Di1 P156Ei1 P156Fi1 P156Gi1 P156Hi1 P156Ii1 P157Ai1 P157Bi1 P157Ci1 P157Di1 P157Ei1 P157Fi1 P157Gi1 P157Hi1 P157Ii1 P158Ai1 P158Bi1 P158Ci1 P158Di1 P158Ei1 P158Fi1 P158Gi1 P158Hi1 P158Ii1 P159Ai1-P159Ai17 P159Bi1-P159Bi17 P159Ci1-P159Ci17 P159Di1-P159Di17 P159Ei1-P159Ei17 P159Fi1-P159Fi17 P159Gi1-P159Gi17 5; %let fvar16=P154Ei1; %let lvar16=P159Gi17; %let nvar16=240; length P159Hi1-P159Hi17 P159Ii1-P159Ii17 P160Ai1-P160Ai41 P160Bi1-P160Bi41 P160Ci1-P160Ci41 P160Di1-P160Di41 P160Ei1-P160Ei41 5; %let fvar17=P159Hi1; %let lvar17=P160Ei41; %let nvar17=239; length P160Fi1-P160Fi41 P160Gi1-P160Gi41 P160Hi1-P160Hi41 P160Ii1-P160Ii41 5; %let fvar18=P160Fi1; %let lvar18=P160Ii41; %let nvar18=164; length PCT1i1-PCT1i7 PCT2i1-PCT2i15 PCT3i1-PCT3i29 PCT4i1-PCT4i6 PCT5i1-PCT5i11 PCT6i1-PCT6i6 PCT7i1-PCT7i163 PCT8i1-PCT8i10 5; %let fvar19=PCT1i1; %let lvar19=PCT8i10; %let nvar19=247; length PCT9i1-PCT9i16 PCT10i1-PCT10i83 PCT11i1-PCT11i8 PCT12i1-PCT12i45 PCT13i1-PCT13i17 PCT14i1-PCT14i28 PCT15i1-PCT15i7 5; %let fvar20=PCT9i1; %let lvar20=PCT15i7; %let nvar20=204; length PCT16i1-PCT16i111 PCT17i1-PCT17i111 5; %let fvar21=PCT16i1; %let lvar21=PCT17i111; %let nvar21=222; length PCT18i1-PCT18i109 PCT19i1-PCT19i126 5; %let fvar22=PCT18i1; %let lvar22=PCT19i126; %let nvar22=235; length PCT20i1-PCT20i104 PCT21i1-PCT21i24 PCT22i1-PCT22i43 PCT23i1-PCT23i39 PCT24i1-PCT24i23 5; %let fvar23=PCT20i1; %let lvar23=PCT24i23; %let nvar23=233; length PCT25i1-PCT25i83 PCT26i1-PCT26i101 PCT27i1-PCT27i49 5; %let fvar24=PCT25i1; %let lvar24=PCT27i49; %let nvar24=233; length PCT28i1-PCT28i49 PCT29i1-PCT29i49 PCT30i1-PCT30i49 PCT31i1-PCT31i43 PCT32i1-PCT32i31 5; %let fvar25=PCT28i1; %let lvar25=PCT32i31; %let nvar25=235; %let nvar25=221; *<---override documentation; length PCT33i1-PCT33i47 PCT34i1-PCT34i59 5; %let fvar26=PCT33i1; %let lvar26=PCT34i59; %let nvar26 =106; length PCT35i1-PCT35i185 PCT36i1-PCT36i7 PCT37i1-PCT37i29 5; %let fvar27=PCT35i1; %let lvar27=PCT37i29; %let nvar27 =221; length PCT38i1-PCT38i107 PCT39i1-PCT39i3 PCT40i1-PCT40i11 PCT41i1-PCT41i11 PCT42i1-PCT42i15 PCT43i1-PCT43i15 5; %let fvar28=PCT38i1; %let lvar28=PCT43i15; %let nvar28 =162; length PCT44i1-PCT44i95 PCT45i1-PCT45i6 PCT46i1-PCT46i95 PCT47i1-PCT47i6 PCT48i1-PCT48i3 5; %let fvar29=PCT44i1; %let lvar29=PCT48i3; %let nvar29 =205; length PCT49i1-PCT49i59 PCT50i1-PCT50i144 PCT51i1-PCT51i21 5; %let fvar30=PCT49i1; %let lvar30=PCT51i21; %let nvar30 =224; length PCT52i1-PCT52i29 PCT53i1-PCT53i43 PCT54i1-PCT54i3 PCT55i1-PCT55i107 PCT56i1-PCT56i23 5; %let fvar31=PCT52i1; %let lvar31=PCT56i23; %let nvar31 =205; length PCT57i1-PCT57i47 PCT58i1-PCT58i21 PCT59i1-PCT59i47 PCT60i1-PCT60i47 PCT61i1-PCT61i81 5; %let fvar32=PCT57i1; %let lvar32=PCT61i81; %let nvar32 =243; length PCT62Ai1-PCT62Ai22 PCT62Bi1-PCT62Bi22 PCT62Ci1-PCT62Ci22 PCT62Di1-PCT62Di22 PCT62Ei1-PCT62Ei22 PCT62Fi1-PCT62Fi22 PCT62Gi1-PCT62Gi22 PCT62Hi1-PCT62Hi22 PCT62Ii1-PCT62Ii22 PCT63Ai1-PCT63Ai15 PCT63Bi1-PCT63Bi15 PCT63Ci1-PCT63Ci15 5; %let fvar33=PCT62Ai1; %let lvar33=PCT63Ci15; %let nvar33 =243; length PCT63Di1-PCT63Di15 PCT63Ei1-PCT63Ei15 PCT63Fi1-PCT63Fi15 PCT63Gi1-PCT63Gi15 PCT63Hi1-PCT63Hi15 PCT63Ii1-PCT63Ii15 PCT64Ai1-PCT64Ai18 PCT64Bi1-PCT64Bi18 PCT64Ci1-PCT64Ci18 PCT64Di1-PCT64Di18 PCT64Ei1-PCT64Ei18 PCT64Fi1-PCT64Fi18 PCT64Gi1-PCT64Gi18 PCT64Hi1-PCT64Hi18 5; %let fvar34=PCT63Di1; %let lvar34=PCT64Hi18; %let nvar34 =234; length PCT64Ii1-PCT64Ii18 PCT65Ai1-PCT65Ai16 PCT65Bi1-PCT65Bi16 PCT65Ci1-PCT65Ci16 PCT65Di1-PCT65Di16 PCT65Ei1-PCT65Ei16 PCT65Fi1-PCT65Fi16 PCT65Gi1-PCT65Gi16 PCT65Hi1-PCT65Hi16 PCT65Ii1-PCT65Ii16 PCT66Ai1-PCT66Ai23 PCT66Bi1-PCT66Bi23 PCT66Ci1-PCT66Ci23 5; %let fvar35=PCT64Ii1; %let lvar35=PCT66Ci23; %let nvar35 =231; length PCT66Di1-PCT66Di23 PCT66Ei1-PCT66Ei23 PCT66Fi1-PCT66Fi23 PCT66Gi1-PCT66Gi23 PCT66Hi1-PCT66Hi23 PCT66Ii1-PCT66Ii23 PCT67Ai1-PCT67Ai19 PCT67Bi1-PCT67Bi19 PCT67Ci1-PCT67Ci19 PCT67Di1-PCT67Di19 PCT67Ei1-PCT67Ei19 5; %let fvar36=PCT66Di1; %let lvar36=PCT67Ei19; %let nvar36 =233; length PCT67Fi1-PCT67Fi19 PCT67Gi1-PCT67Gi19 PCT67Hi1-PCT67Hi19 PCT67Ii1-PCT67Ii19 PCT68Ai1-PCT68Ai49 PCT68Bi1-PCT68Bi49 PCT68Ci1-PCT68Ci49 5; %let fvar37=PCT67Fi1; %let lvar37=PCT68Ci49; %let nvar37 =223; length PCT68Di1-PCT68Di49 PCT68Ei1-PCT68Ei49 PCT68Fi1-PCT68Fi49 PCT68Gi1-PCT68Gi49 PCT68Hi1-PCT68Hi49 5; %let fvar38=PCT68Di1; %let lvar38=PCT68Hi49; %let nvar38 =245; length PCT68Ii1-PCT68Ii49 PCT69Ai1-PCT69Ai22 PCT69Bi1-PCT69Bi22 PCT69Ci1-PCT69Ci22 PCT69Di1-PCT69Di22 PCT69Ei1-PCT69Ei22 PCT69Fi1-PCT69Fi22 PCT69Gi1-PCT69Gi22 PCT69Hi1-PCT69Hi22 PCT69Ii1-PCT69Ii22 5; %let fvar39=PCT68Ii1; %let lvar39=PCT69Ii22; %let nvar39 =247; length PCT70Ai1-PCT70Ai27 PCT70Bi1-PCT70Bi27 PCT70Ci1-PCT70Ci27 PCT70Di1-PCT70Di27 PCT70Ei1-PCT70Ei27 PCT70Fi1-PCT70Fi27 PCT70Gi1-PCT70Gi27 PCT70Hi1-PCT70Hi27 PCT70Ii1-PCT70Ii27 5; %let fvar40=PCT70Ai1; %let lvar40=PCT70Ii27; %let nvar40 =243; length PCT71Ai1-PCT71Ai49 PCT71Bi1-PCT71Bi49 PCT71Ci1-PCT71Ci49 PCT71Di1-PCT71Di49 PCT71Ei1-PCT71Ei49 5; %let fvar41=PCT71Ai1; %let lvar41=PCT71Ei49; %let nvar41 =245; length PCT71Fi1-PCT71Fi49 PCT71Gi1-PCT71Gi49 PCT71Hi1-PCT71Hi49 PCT71Ii1-PCT71Ii49 5; %let fvar42=PCT71Fi1; %let lvar42=PCT71Ii49; %let nvar42 =196; length PCT72Ai1-PCT72Ai120 PCT72Bi1-PCT72Bi120 5; %let fvar43=PCT72Ai1; %let lvar43=PCT72Bi120; %let nvar43 =240; length PCT72Ci1-PCT72Ci120 PCT72Di1-PCT72Di120 5; %let fvar44=PCT72Ci1; %let lvar44=PCT72Di120; %let nvar44 =240; length PCT72Ei1-PCT72Ei120 PCT72Fi1-PCT72Fi120 5; %let fvar45=PCT72Ei1; %let lvar45=PCT72Fi120; %let nvar45 =240; length PCT72Gi1-PCT72Gi120 PCT72Hi1-PCT72Hi120 5; %let fvar46=PCT72Gi1; %let lvar46=PCT72Hi120; %let nvar46 =240; length PCT72Ii1-PCT72Ii120 PCT73Ai1-PCT73Ai95 5; %let fvar47=PCT72Ii1; %let lvar47=PCT73Ai95; %let nvar47 =215; length PCT73Bi1-PCT73Bi95 PCT73Ci1-PCT73Ci95 5; %let fvar48=PCT73Bi1; %let lvar48=PCT73Ci95; %let nvar48 =190; length PCT73Di1-PCT73Di95 PCT73Ei1-PCT73Ei95 5; %let fvar49=PCT73Di1; %let lvar49=PCT73Ei95; %let nvar49 =190; length PCT73Fi1-PCT73Fi95 PCT73Gi1-PCT73Gi95 5; %let fvar50=PCT73Fi1; %let lvar50=PCT73Gi95; %let nvar50 =190; length PCT73Hi1-PCT73Hi95 PCT73Ii1-PCT73Ii95 5; %let fvar51=PCT73Hi1; %let lvar51=PCT73Ii95; %let nvar51 =190; length PCT74Ai1-PCT74Ai6 PCT74Bi1-PCT74Bi6 PCT74Ci1-PCT74Ci6 PCT74Di1-PCT74Di6 PCT74Ei1-PCT74Ei6 PCT74Fi1-PCT74Fi6 PCT74Gi1-PCT74Gi6 PCT74Hi1-PCT74Hi6 PCT74Ii1-PCT74Ii6 PCT75Ai1-PCT75Ai59 PCT75Bi1-PCT75Bi59 PCT75Ci1-PCT75Ci59 5; %let fvar52=PCT74Ai1; %let lvar52=PCT75Ci59; %let nvar52 =231; length PCT75Di1-PCT75Di59 PCT75Ei1-PCT75Ei59 PCT75Fi1-PCT75Fi59 PCT75Gi1-PCT75Gi59 5; %let fvar53=PCT75Di1; %let lvar53=PCT75Gi59; %let nvar53 =236; length PCT75Hi1-PCT75Hi59 PCT75Ii1-PCT75Ii59 PCT76Ai1-PCT76Ai29 PCT76Bi1-PCT76Bi29 PCT76Ci1-PCT76Ci29 PCT76Di1-PCT76Di29 5; %let fvar54=PCT75Hi1; %let lvar54=PCT76Di29; %let nvar54 =234; length PCT76Ei1-PCT76Ei29 PCT76Fi1-PCT76Fi29 PCT76Gi1-PCT76Gi29 PCT76Hi1-PCT76Hi29 PCT76Ii1-PCT76Ii29 5; %let fvar55=PCT76Ei1; %let lvar55=PCT76Ii29; %let nvar55 =145; length H1i1 H2i1-H2i3 H3i1 H4i1-H4i2 H5i1-H5i7 H6i1-H6i3 H7i1-H7i3 H8i1-H8i7 H9i1-H9i8 H10i1-H10i17 H11i1-H11i17 H12i1-H12i3 H13i1-H13i3 H14i1-H14i21 H15i1-H15i3 H16i1-H16i8 H17i1-H17i17 H18i1-H18i3 5; %let fvar56=H1i1; %let lvar56=H18i3; %let nvar56 =127; length H19i1-H19i125 H20i1-H20i13 H21i1-H21i59 H22i1-H22i19 H23i1-H23i10 H24i1 H25i1 H26i1-H26i21 5; %let fvar57=H19i1; %let lvar57=H26i21; %let nvar57 =249; length H27i1-H27i3 H28i1-H28i3 H29i1-H29i7 H30i1-H30i11 H31i1-H31i11 H32i1-H32i23 H33i1-H33i23 H34i1-H34i10 H35i1 H36i1-H36i21 H37i1-H37i3 H38i1-H38i15 H39i1-H39i3 H40i1-H40i10 H41i1-H41i7 H42i1-H42i15 H43i1-H43i35 H44i1-H44i15 5; %let fvar58=H27i1; %let lvar58=H44i15; %let nvar58 =216; length H45i1-H45i35 H46i1-H46i3 H47i1-H47i3 H48i1-H48i7 H49i1-H49i43 H50i1-H50i3 H51i1-H51i7 H52i1-H52i7 H53i1-H53i13 H54i1-H54i24 H55i1 H56i1 H57i1 H58i1 H59i1-H59i22 H60i1 H61i1 H62i1-H62i24 H63i1 H64i1 H65i1-H65i3 H66i1-H66i8 H67i1-H67i37 H68i1-H68i3 5; %let fvar59=H45i1; %let lvar59=H68i3; %let nvar59 =250; length H69i1-H69i11 H70i1 H71i1-H71i50 H72i1-H72i50 H73i1-H73i50 H74i1-H74i25 H75i1 H76i1 H77i1 H78i1-H78i8 H79i1-H79i8 H80i1-H80i8 H81i1-H81i3 H82i1 H83i1-H83i3 H84i1-H84i25 H85i1 H86i1 5; %let fvar60=H69i1; %let lvar60=H86i1; %let nvar60 =248; length H87i1-H87i25 H88i1 H89i1 H90i1-H90i32 H91i1-H91i2 H92i1-H92i3 H93i1-H93i3 H94i1-H94i23 H95i1-H95i3 H96i1-H96i50 H97i1-H97i57 H98i1-H98i32 H99i1-H99i3 H100i1-H100i3 H101i1-H101i3 H102i1-H102i3 H103i1-H103i3 H104i1-H104i3 5; %let fvar61=H87i1; %let lvar61=H104i3; %let nvar61 =250; length H105i1-H105i3 H106i1-H106i3 H107i1-H107i3 H108i1-H108i3 H109i1-H109i3 H110i1-H110i3 H111i1-H111i3 H112i1-H112i3 H113i1-H113i3 H114i1-H114i3 H115i1-H115i3 H116i1-H116i3 H117i1-H117i3 H118i1-H118i3 H119i1-H119i3 H120i1-H120i7 H121i1-H121i7 5; %let fvar62=H105i1; %let lvar62=H121i7; %let nvar62 =59; length HCT1i1-HCT1i53 HCT2i1-HCT2i35 HCT3i1-HCT3i83 5; %let fvar63=HCT1i1; %let lvar63=HCT3i83; %let nvar63 =171; length HCT4i1-HCT4i115 5; %let fvar64=HCT4i1; %let lvar64=HCT4i115; %let nvar64 =115; length HCT5i1-HCT5i143 5; %let fvar65=HCT5i1; %let lvar65=HCT5i143; %let nvar65 =143; length HCT6i1-HCT6i147 HCT7i1-HCT7i101 5; %let fvar66=HCT6i1; %let lvar66=HCT7i101; %let nvar66 =248; length HCT8i1-HCT8i99 HCT9i1-HCT9i15 HCT10i1-HCT10i21 HCT11i1-HCT11i25 HCT12i1-HCT12i3 HCT13i1-HCT13i5 HCT14i1-HCT14i51 5; %let fvar67=HCT8i1; %let lvar67=HCT14i51; %let nvar67 =219; length HCT15i1-HCT15i63 HCT16i1-HCT16i45 HCT17i1-HCT17i106 5; %let fvar68=HCT15i1; %let lvar68=HCT17i106; %let nvar68 =214; length HCT18i1-HCT18i120 HCT19i1-HCT19i16 HCT20i1 HCT21i1 HCT22i1-HCT22i39 HCT23i1-HCT23i43 5; %let fvar69=HCT18i1; %let lvar69=HCT23i43; %let nvar69 =220; length HCT24i1-HCT24i43 HCT25i1-HCT25i15 HCT26i1-HCT26i15 HCT27i1-HCT27i15 HCT28i1-HCT28i13 HCT29Ai1-HCT29Ai3 HCT29Bi1-HCT29Bi3 HCT29Ci1-HCT29Ci3 HCT29Di1-HCT29Di3 HCT29Ei1-HCT29Ei3 HCT29Fi1-HCT29Fi3 HCT29Gi1-HCT29Gi3 HCT29Hi1-HCT29Hi3 HCT29Ii1-HCT29Ii3 HCT30Ai1-HCT30Ai11 HCT30Bi1-HCT30Bi11 HCT30Ci1-HCT30Ci11 HCT30Di1-HCT30Di11 HCT30Ei1-HCT30Ei11 HCT30Fi1-HCT30Fi11 HCT30Gi1-HCT30Gi11 HCT30Hi1-HCT30Hi11 HCT30Ii1-HCT30Ii11 HCT31Ai1-HCT31Ai7 HCT31Bi1-HCT31Bi7 HCT31Ci1-HCT31Ci7 5; %let fvar70=HCT24i1; %let lvar70=HCT31Ci7; %let nvar70=248; length HCT31Di1-HCT31Di7 HCT31Ei1-HCT31Ei7 HCT31Fi1-HCT31Fi7 HCT31Gi1-HCT31Gi7 HCT31Hi1-HCT31Hi7 HCT31Ii1-HCT31Ii7 HCT32Ai1-HCT32Ai3 HCT32Bi1-HCT32Bi3 HCT32Ci1-HCT32Ci3 HCT32Di1-HCT32Di3 HCT32Ei1-HCT32Ei3 HCT32Fi1-HCT32Fi3 HCT32Gi1-HCT32Gi3 HCT32Hi1-HCT32Hi3 HCT32Ii1-HCT32Ii3 HCT33Ai1-HCT33Ai3 HCT33Bi1-HCT33Bi3 HCT33Ci1-HCT33Ci3 HCT33Di1-HCT33Di3 HCT33Ei1-HCT33Ei3 HCT33Fi1-HCT33Fi3 HCT33Gi1-HCT33Gi3 HCT33Hi1-HCT33Hi3 HCT33Ii1-HCT33Ii3 HCT34Ai1-HCT34Ai3 HCT34Bi1-HCT34Bi3 HCT34Ci1-HCT34Ci3 HCT34Di1-HCT34Di3 HCT34Ei1-HCT34Ei3 HCT34Fi1-HCT34Fi3 HCT34Gi1-HCT34Gi3 HCT34Hi1-HCT34Hi3 HCT34Ii1-HCT34Ii3 HCT35Ai1-HCT35Ai3 HCT35Bi1-HCT35Bi3 HCT35Ci1-HCT35Ci3 HCT35Di1-HCT35Di3 HCT35Ei1-HCT35Ei3 HCT35Fi1-HCT35Fi3 HCT35Gi1-HCT35Gi3 HCT35Hi1-HCT35Hi3 HCT35Ii1-HCT35Ii3 HCT36Ai1-HCT36Ai24 HCT36Bi1-HCT36Bi24 HCT36Ci1-HCT36Ci24 HCT36Di1-HCT36Di24 5; %let fvar71=HCT31Di1; %let lvar71=HCT36Di24; %let nvar71=246; length HCT36Ei1-HCT36Ei24 HCT36Fi1-HCT36Fi24 HCT36Gi1-HCT36Gi24 HCT36Hi1-HCT36Hi24 HCT36Ii1-HCT36Ii24 HCT37Ai1 HCT37Bi1 HCT37Ci1 HCT37Di1 HCT37Ei1 HCT37Fi1 HCT37Gi1 HCT37Hi1 HCT37Ii1 HCT38Ai1 HCT38Bi1 HCT38Ci1 HCT38Di1 HCT38Ei1 HCT38Fi1 HCT38Gi1 HCT38Hi1 HCT38Ii1 HCT39Ai1-HCT39Ai11 HCT39Bi1-HCT39Bi11 HCT39Ci1-HCT39Ci11 HCT39Di1-HCT39Di11 HCT39Ei1-HCT39Ei11 HCT39Fi1-HCT39Fi11 HCT39Gi1-HCT39Gi11 HCT39Hi1-HCT39Hi11 HCT39Ii1-HCT39Ii11 HCT40Ai1 HCT40Bi1 HCT40Ci1 HCT40Di1 HCT40Ei1 HCT40Fi1 HCT40Gi1 HCT40Hi1 HCT40Ii1 5; %let fvar72=HCT36Ei1; %let lvar72=HCT40Ii1; %let nvar72=246; length HCT41Ai1-HCT41Ai25 HCT41Bi1-HCT41Bi25 HCT41Ci1-HCT41Ci25 HCT41Di1-HCT41Di25 HCT41Ei1-HCT41Ei25 HCT41Fi1-HCT41Fi25 HCT41Gi1-HCT41Gi25 HCT41Hi1-HCT41Hi25 HCT41Ii1-HCT41Ii25 HCT42Ai1 HCT42Bi1 HCT42Ci1 HCT42Di1 HCT42Ei1 HCT42Fi1 HCT42Gi1 HCT42Hi1 HCT42Ii1 HCT43Ai1 HCT43Bi1 HCT43Ci1 HCT43Di1 HCT43Ei1 HCT43Fi1 HCT43Gi1 HCT43Hi1 HCT43Ii1 5; %let fvar73=HCT41Ai1; %let lvar73=HCT43Ii1; %let nvar73=243; length HCT44Ai1-HCT44Ai32 HCT44Bi1-HCT44Bi32 HCT44Ci1-HCT44Ci32 HCT44Di1-HCT44Di32 HCT44Ei1-HCT44Ei32 HCT44Fi1-HCT44Fi32 HCT44Gi1-HCT44Gi32 HCT44Hi1-HCT44Hi32 HCT44Ii1-HCT44Ii32 5; %let fvar74=HCT44Ai1; %let lvar74=HCT44Ii32; %let nvar74 =224; length HCT44Hi1-HCT44Hi32 HCT44Ii1-HCT44Ii32 HCT45Ai1-HCT45Ai2 HCT45Bi1-HCT45Bi2 HCT45Ci1-HCT45Ci2 HCT45Di1-HCT45Di2 HCT45Ei1-HCT45Ei2 HCT45Fi1-HCT45Fi2 HCT45Gi1-HCT45Gi2 HCT45Hi1-HCT45Hi2 HCT45Ii1-HCT45Ii2 HCT46Ai1-HCT46Ai3 HCT46Bi1-HCT46Bi3 HCT46Ci1-HCT46Ci3 HCT46Di1-HCT46Di3 HCT46Ei1-HCT46Ei3 HCT46Fi1-HCT46Fi3 HCT46Gi1-HCT46Gi3 HCT46Hi1-HCT46Hi3 HCT46Ii1-HCT46Ii3 HCT47Ai1-HCT47Ai23 HCT47Bi1-HCT47Bi23 HCT47Ci1-HCT47Ci23 HCT47Di1-HCT47Di23 HCT47Ei1-HCT47Ei23 HCT47Fi1-HCT47Fi23 5; %let fvar75=HCT44Hi1; %let lvar75=HCT47Fi23; %let nvar75=247; length HCT47Gi1-HCT47Gi23 HCT47Hi1-HCT47Hi23 HCT47Ii1-HCT47Ii23 HCT48Ai1-HCT48Ai3 HCT48Bi1-HCT48Bi3 HCT48Ci1-HCT48Ci3 HCT48Di1-HCT48Di3 HCT48Ei1-HCT48Ei3 HCT48Fi1-HCT48Fi3 HCT48Gi1-HCT48Gi3 HCT48Hi1-HCT48Hi3 HCT48Ii1-HCT48Ii3 5; %let fvar76=HCT47Gi1; %let lvar76=HCT48Ii3; %let nvar76 =96; *<==================================End parm assignment code=================================== *; *<====You can comment out or delete these 4 %include statements if you do not want or need the variable labels. These modules created by Roy Williams, MISER, Mass. SDC from the sf3 data dictionary file. -----*; %include "&curpath/PLabels.sas"/nosource2; *--label statements for the P tables--; %include "&curpath/PCTLabels.sas"/nosource2; *--label statements for PCT tables--; %include "&curpath/HLabels.sas"/nosource2; *--label statements for the H tables--; %include "&curpath/HCTLabels.sas"/nosource2; *--label statements for HCT tables--; /* Apparent bug in SAS caused these statements to fail so had to go to an alternate strategy. %include curpath(PLabels)/nosource2; *--label statements for P tables--; %include curpath(PCTLabels)/nosource2; *--label statements for PCT tables--; %include curpath(HLabels)/nosource2; *--label statements for the H tables--; %include curpath(HCTLabels)/nosource2; *--label statements for HCT tables--; */ %macro readloop(verify=0); %local ifile i2; %*----loop to read from all 76 input csv files -- at least those that are relevant----*; %do ifile=1 %to 76; %if &ifile < 10 %then %let i2=0&ifile; %else %let i2=&ifile; *filename in&ifile "&stab.000&i2..&filesfx"; *--e.g. vt00012.uf3 after substitution when ifile=12--; filename in&ifile pipe "unzip -p &inpath\&stab.000&i2._&filesfx"; %*<==========NOTE====================; _iseg="&i2"; _isegck=' '; %*--in case we do not read the segment because it is a PCT segment for a below-tract sumlev--; infile in&ifile obs=&maxobs dsd missover lrecl=3048; %*<===lrecl may need to be increased for larger areas==; %if %upcase( %substr(&&fvar&ifile , 2,2)) =CT %then %let ctfile=1; %else %let ctfile=0; %*--We read the variables associated with the ith input file. Except that for certain summary levels and certain input files there will not be any data. We check for this with the _readCT flag and generate that extra conditions when we detect that we have a file with pct variables-; if _keep %if &ctfile %then %str( and _readCT ); then input _fileid $ _stateid $ _000 $ _isegck $2. +1 logrecnock 7. +1 &&fvar&ifile -- &&lvar&ifile ; *<--------here is where we reap reward for declaring all vars in order-; %if &ctfile %then %str( else if _readCT then input; ); %else %str( else input;); %*then input _first12 $char12. _isegck $2. +1 logrecnock 7. +1 ; %*<=====old code, replace 11-01===; %*--to flush the record when _keep=0---; if _isegck ne ' ' then link cklogrecno; retain _varerr 0; drop _varerr; %if &verify=1 %then %do; *---verify that we have read the correct number of variables from the input file---*; array _file&ifile (*) &&fvar&ifile -- &&lvar&ifile; if _first then _ndim=dim(_file&ifile); if _first then if _ndim ne &&nvar&ifile then do; _varerr+1; file log; put "***Problem with variables specified for file &ifile . Expecting &&nvar&ifile variables," " found " _ndim 3.; end; %end; %*--verify processing--; %end; %*--do ifile loop--------*; %mend readloop; options mprint; *-------------------Here is the big loop where we read up to 39 files (segments)-------------------*; %readloop (verify=0) *<--verify=1 was run on vt file and it passed--; ; if _varerr then do; file log; put '*****Conversion run aborting due to above note variable list errors****'; stop; *<=======================Batch runs should replace this with an abort statement--; end; _first=0; if _keep; *---subsetting if. No observation output if _keep=0---; *-----output the data sets.---------------*; output sf32000.&stab.geos; output sf32000.&stab.ph; if _readCT then do; output sf32000.&stab.phct; output sf32000.&stab.phctR; end; **drop logrecnock _isegck _iseg _readCT _keep _fileid _stateid _000 ; **_first12; return; cklogrecno: if logrecno ne logrecnock or _isegck ne _iseg then do; file log; put ///"********Problem with file synching: LogRecNo on segment " _iseg " does not match the geo headers value " "or segment code not expected. ******" / "Reading seg file " _iseg +1 'found segment code ' _isegck / LogRecNo= logrecnock= _n_= / _all_ / '******Job is aborting*********************************' ; stop; end; return; run; /* *<========================Comment out while testing===================================== *-----------Create datasets indices to allow for quicker queries--------------------*; proc datasets library=sf32000 nolist; modify &stab.ph; index create SumLev; index create county; index create sumcnty=(SumLev county); modify &stab.geos; index create SumLev; index create county; modify &stab.phct; index create SumLev; index create county; %macro usmods; %*--This is code that is conditionally executed or not based on whether we are doing a us file convert-; %global state; %if &state=00 %then %do; modify usgeos; index create state; modify usph; index create state; modify usphct; index create state; modify usphctR; index create state; %end; %mend usmods; %usmods quit; proc contents data=sf32000._all_ details nods; run cancel; *<=========note cancel. May want to run this ONCE since it generates a TON of output!!-; ==========================================end commented out code================================ */ data sumlevs/view=sumlevs; set sf3.&stab.geos(keep=SumLev State geocomp pop100); sumlev_code=sumlev; if geocomp='00'; run; proc tabulate data=sumlevs; class sumlev_code sumlev; var pop100; format sumlev $sumlev.; table sumlev_code*SumLev=' '*pop100*(n*f=comma7. sum*f=comma12.) ; title2 'Proc Tabulate Report: Geography Summary Levels: # Occurrences & Total Pops'; title3 '(excludes cases where geocomp is not 00)'; run; %include sascode(notify);