/**********************************************************************/ /* Pipe type, location (latitude & longitude), and */ /* county FIPS code are in PDATA */ libname mylib ' /* SAS-data-library */ '; data mylib.mapsym; set mylibdata; /**********************************************************************/ x=-lon*3.14165927/180; y=lat*3.14165927/180; /**********************************************************************/ /* XSYS & YSYS=2 specify to evaluate X & Y */ /* as data values. */ /* Center of symbol drawn at coordinate */ /* position. */ /* Specifies that symbols are drawn after the */ /* map is drawn. */ retain function 'label' color 'black' xsys ysys '2' position '5' when 'a'; /**********************************************************************/ style='special'; if pipetype=1 then text='A'; /* Concave square */ else if pipetype=2 then text='E'; /* Club */ else if pipetype=3 then text='D'; /* Diamond */ else if pipetype=4 then text='H'; /* Open circle */ else if pipetype=5 then text='I'; /* Star */ else if pipetype=6 then text='C'; /* Heart */ else if pipetype=7 then text='B'; /* Spade */ /**********************************************************************/ /* This program will prepare a data set to be */ /* used as the Annotate source data. It contains */ /* information needed to place the symbols */ /* identifying the locations and types of pipes */ /* to be shown on the map. The data set named */ /* MAPSYM will become the input data set for */ /* drawing a map of interest. */ /* pipe type, location (latitude & longitude) and */ /* county FIPS code are in mylibdata */ libname mylib ' /* SAS-data-library */ '; data mylib.mapsym; set mylibdata; /* STEP1: Convert latitude and longitude to */ /* conventional SAS form. */ /* Original data are in decimal degrees with */ /* west longitude negative. SAS form is */ /* latitude and longitude in radians with */ /* west longitude positive. Y is SAS latitude, */ /* X is SAS longitude. */ x=-lon*3.14165927/180; y= lat*3.14165927/180; /* STEP 2: Assign annotate variables common to */ /* all points. */ /* See SAS/GRAPH Software: Reference, Vol.1, p 472. */ /* XSYS & YSYS=2 specify to evaluate X & Y as */ /* data values. */ /* Center of symbol drawn at coordinate */ /* position. */ /* Specifies that symbols are drawn after the */ /* map is drawn. */ retain function 'label' color 'black' xsys ysys '2' position '5' when 'a'; /* STEP 3: Select symbols for each pipe type. */ style='special'; /* Selects special character font, */ /* SAS/GRAPH Software: Reference, */ /* Vol.1, p.174 */ if pipetype=1 then text='A'; /* Concave square */ else if pipetype=2 then text='E'; /* Club */ else if pipetype=3 then text='D'; /* Diamond */ else if pipetype=4 then text='H'; /* Open circle */ else if pipetype=5 then text='I'; /* Star */ else if pipetype=6 then text='C'; /* Heart */ else if pipetype=7 then text='B'; /* Spade */ /* STEP 4: Assign a data-separation value to all */ /* observations. When using the GPROJECT procedure */ /* in the mapping routine, the Annotate data and */ /* the state map coordinates are to be combined */ /* for projection and separated again for */ /* annotation. The state coordinate data have a */ /* state FIPS variable (NC=37). By including a */ /* STATE variable in the Annotate data set, these */ /* data may be separated from map coordinate data */ /* after projection with PROC GPROJECT. */ state=999; run; /**********************************************************************/ libname mylib ' /* SAS-data-library */ '; /* pipe location and type data (including symbol data) */ /* are in MYLIB.MAPSYM */ /* STEP1: select subset of pipes */ %let ptype=1 2 3 4 5 6 7; /* CHOOSE PIPE TYPES HERE */ %let reg=1 2 3; /* CHOOSE REGION HERE */ /* 1=west 2=central 3=east */ /* title of map */ title c=black f=centx 'All pipes in Data Set'; data set1; set mylib.mapsym; if pipetype in(&ptype); /* Assign pipe locations to regions: */ /* 1=west of I-77, 2=central, 3=east of I-95. */ if lat-5.407*lon > 472.45 then region=1; else if lat-1.168*lon < 127.09 then region=3; else region=2; if region in(®); run; /**********************************************************************/ data mapmk; set maps.county(where=(state=37)) set1; run; /**********************************************************************/ proc gproject data=mapmk out=both; id county; /* county FIPS variable is common to */ /* both data sets. */ run; /**********************************************************************/ data ncproj symproj; set both; if state=999 then output symproj; /* Projected */ /* Annotate data */ else output ncproj; /* Projected */ county map data */ run; /**********************************************************************/ pattern1 c=black v=e; footnote1 c=black f=special 'A' f=centx ' Pipe type 1' f=special ' E' f=centx ' Pipe type 2' f=special ' D' f=centx ' Pipe type 3'; footnote2 c=black f=special 'H' f=centx ' Pipe type 4' f=special ' I' f=centx ' Pipe type 5' f=special ' C' f=centx ' Pipe type 6'; footnote3 c=black f=special 'B' f=centx ' Pipe type 7'; proc gmap data=ncproj map=ncproj; id county; choro county / nolegend levels=1 annotate=symproj; /* Note Annotate */ /* data set is */ /* SYMPROJ. */ run; quit; /**********************************************************************/ /* This program will prepare a map of selected */ /* points obtained from the previously prepared */ /* MYLIB.MAPSYM data set. */ /* pipe location and type data (including Annotate */ /* data) are in MYLIB.MAPSYM */ libname mylib ' /* SAS-data-library */ '; /* STEP1: select subset of pipes */ %let ptype=1 2 3 4 5 6 7; /* CHOOSE PIPETYPES HERE */ %let reg=1 2 3; /* CHOOSE REGION HERE */ /* 1=west 2=central 3=east */ /* title of map */ title c=black f=centx 'All pipes in Data Set'; data set1; set mylib.mapsym; if pipetype in(&ptype); /* Assign pipe locations to regions: */ /* 1=west of I-77, 2=central, 3=east of I-95. */ if lat-5.407*lon > 472.45 then region=1; else if lat-1.168*lon < 127.09 then region=3; else region=2; if region in(®); run; /* STEP2: Combine map coordinates & */ /* Annotate data set. */ data mapmk; set maps.county(where=(state=37)) set1; run; /* STEP3: project both */ proc gproject data=mapmk out=both; id county; /* county FIPS variable is common */ /* to both sets. */ run; /* STEP4: separate projected data */ data ncproj symproj; set both; if state=999 then output symproj; /* Projected */ /* Annotate data */ else output ncproj; /* Projected */ /* county map data */ run; /* STEP5: make map w/ points annotated */ pattern1 c=black v=e; footnote1 c=black f=special 'A' f=centx ' Pipe type 1' f=special ' E' f=centx ' Pipe type 2' f=special ' D' f=centx ' Pipe type 3'; footnote2 c=black f=special 'H' f=centx ' Pipe type 4' f=special ' I' f=centx ' Pipe type 5' f=special ' C' f=centx ' Pipe type 6'; footnote3 c=black f=special 'B' f=centx ' Pipe type 7'; proc gmap data=ncproj map=ncproj; id county; choro county / nolegend levels=1 annotate=symproj; /* Note Annotate */ /* data set is */ /* SYMPROJ. */ run; quit; /**********************************************************************/ libname mylib ' /* SAS-data-library */ '; /* more program lines */ %let ptype=2 3 4; /* CHOOSE PIPE TYPES HERE */ %let reg=2; /* CHOOSE REGION HERE */ /* 1=west 2=central 3=east */ /* title of map */ title c=black f=simplex 'Pipes of Types 2, 3 & 4 in Central Region'; /* more program lines */ run; /**********************************************************************/ libname mylib ' /* SAS-data-library */ '; /* more program lines */ %let ptype=2 4 5; /* CHOOSE PIPE TYPES HERE */ %let reg=3; /* CHOOSE REGION HERE */ 1=west 2=central 3=east */ /* title of map */ title c=black f=simplex 'Pipes of Types 2, 4 & 5 in East Region'; /* more program lines */ run; /**********************************************************************/