%let gpath='.'; %let dpi=200; ods html close; ods listing gpath=&gpath image_dpi=&dpi; /*--Fips data--*/ data FipsUsa; input Fips StateCode $4-5 StateFull $7-30 Region $31-40; datalines; 1 AL Alabama South 2 AK Alaska NorthWest 4 AZ Arizona SouthWest 5 AR Arkansas South 6 CA California SouthWest 8 CO Colorado SouthWest 9 CT Connecticut NorthEast 10 DE Delaware NorthEast 11 DC District of Columbia NorthEast 12 FL Florida South 13 GA Georgia South 15 HI Hawaii West 16 ID Idaho NorthWest 17 IL Illinois MidWest 18 IN Indiana MidWest 19 IA Iowa MidWest 20 KS Kansas MidWest 21 KY Kentucky SouthEast 22 LA Louisiana South 23 ME Maine NorthEast 24 MD Maryland NorthEast 25 MA Massachusetts NorthEast 26 MI Michigan MidWest 27 MN Minnesota MidWest 28 MS Mississippi South 29 MO Missouri MidWest 30 MT Montana NorthWest 31 NE Nebraska MidWest 32 NV Nevada SouthWest 33 NH New Hampshire NorthEast 34 NJ New Jersey NorthEast 35 NM New Mexico SouthWest 36 NY New York NorthEast 37 NC North Carolina SouthEast 38 ND North Dakota MidWest 39 OH Ohio MidWest 40 OK Oklahoma South 41 OR Oregon NorthWest 42 PA Pennsylvania NorthEast 44 RI Rhode Island NorthEast 45 SC South Carolina South 46 SD South Dakota MidWest 47 TN Tennessee SouthEast 48 TX Texas South 49 UT Utah SouthWest 50 VT Vermont NorthEast 51 VA Virginia SouthEast 53 WA Washington NorthWest 54 WV West Virginia SouthEast 55 WI Wisconsin MidWest 56 WY Wyoming NorthWest 72 PR Puerto Rico Pacific ; run; /*--Remove Alsaka, Hawaii & Puerto Rico--*/ data usa; set maps.states(where=(density<=1 and (state not in(2, 15, 72)))); length pid $8; keep state segment x y pid fips; by state segment; /*--Make unique Id for each state+segment combination--*/ pid=put(state, 3.0) || put(segment, 3.0); Fips=state; run; proc print;run; proc sort data=usa; by fips segment; run; data usa1; keep state segment x y pid fips StateCode StateFull Region; merge usa fipsusa; by fips; run; /*proc print data=usa1(obs=1000);run;*/ /*--Blank out state code and name for secondary segments--*/ data usa1a; set usa1; if segment ne 1 then do; statecode=''; statefull=''; end; if region='South' then south='South'; if region='NorthWest' then northwest='NorthWest'; if region='SouthWest' then southwest='SouthWest'; if region ne 'Pacific'; run; proc print;run; proc gproject data=usa1a out=usap; id state; run; data bar; input Reg $1-10 Product $12-19 Revenue; datalines; NorthWest Desks 25000 NorthWest Chairs 15000 NorthWest Lamps 10000 SouthWest Desks 20000 SouthWest Chairs 25000 SouthWest Lamps 15000 South Desks 15000 South Chairs 20000 South Lamps 30000 run; /*proc print;run;*/ data usapb; set usap bar; run; /*proc print;run;*/ /*--Simple Choro Map by Region--*/ proc template; define statgraph Map; dynamic _skin _color; begingraph / designwidth=6in designheight=4.5in subpixel=on; entrytitle 'USA Map by Region'; layout overlayEquated / walldisplay=none xaxisopts=(display=none) yaxisopts=(display=none) ; polygonPlot x=x y=y id=pid / group=region display=(fill outline) outlineattrs=(color=black) dataskin=_skin labelattrs=(color=black size=5) label=statecode includemissinggroup=false name='map'; discretelegend 'map' / location=inside across=1 halign=right valign=bottom valueattrs=(size=7) border=false; endlayout; entryfootnote halign=left 'Using Polygon Plot in an Layout OverlayEquated'; endgraph; end; run; ods graphics / reset width=4in height=3in imagename='Map_940M2' attrpriority=color antialiasmax=4000 dataskinmax=2200; proc sgrender data=usapb template=Map; dynamic _skin="sheen" _color='Black'; run; /*--Micro Maps--*/ proc template; define statgraph MicroMaps; dynamic _skin _color; begingraph / designwidth=4in designheight=6in subpixel=on; entrytitle 'Revenues by Region and Product'; discreteattrmap name="states" / ignorecase=true; value "NorthWest" / fillattrs=graphdata1; value "SouthWest" / fillattrs=graphdata2; value "South" / fillattrs=graphdata3; enddiscreteattrmap; discreteattrvar attrvar=southfill var=south attrmap="states"; discreteattrvar attrvar=northwestfill var=northwest attrmap="states"; discreteattrvar attrvar=southwestfill var=southwest attrmap="states"; layout lattice / columns=1; layout overlayEquated / walldisplay=none xaxisopts=(offsetmin=0.0 offsetmax=0.0 display=none) yaxisopts=(offsetmin=0.0 offsetmax=0.0 display=none) ; polygonPlot x=x y=y id=pid / group=northwestfill display=(fill outline) outlineattrs=(color=black) dataskin=_skin labelattrs=(color=black size=5) label=eval(ifc(region='NorthWest',statecode,'')); entry halign=right 'NorthWest' / textattrs=(size=7); endlayout; layout overlayEquated / walldisplay=none xaxisopts=(offsetmin=0.0 offsetmax=0.0 display=none) yaxisopts=(offsetmin=0.0 offsetmax=0.0 display=none) ; polygonPlot x=x y=y id=pid / group=southwestfill display=(fill outline) outlineattrs=(color=black) dataskin=_skin labelattrs=(color=black size=5) label=eval(ifc(region='SouthWest',statecode,'')); entry halign=right 'SouthWest' / textattrs=(size=7); endlayout; layout overlayEquated / walldisplay=none xaxisopts=(offsetmin=0.0 offsetmax=0.0 display=none) yaxisopts=(offsetmin=0.0 offsetmax=0.0 display=none) ; polygonPlot x=x y=y id=pid / group=southfill display=(fill outline) outlineattrs=(color=black) dataskin=_skin labelattrs=(color=black size=5) label=eval(ifc(region='South',statecode,'')); entry halign=right 'South' / textattrs=(size=7); endlayout; endlayout; entryfootnote halign=left 'Using Polygon in a Layout Lattice' / textattrs=(size=6); endgraph; end; run; ods graphics / reset width=3in height=4in imagename='MicroMaps_940M2' attrpriority=color antialiasmax=4000 dataskinmax=2200; proc sgrender data=usapb template=MicroMaps; dynamic _skin="sheen" _color='Black'; run; /*--Micro Maps with Bar--*/ proc template; define statgraph MicroMapBar; dynamic _skin _color; begingraph / designwidth=6in designheight=6in subpixel=on; entrytitle 'Revenues by Region and Product'; discreteattrmap name="states" / ignorecase=true; value "NorthWest" / fillattrs=graphdata1; value "SouthWest" / fillattrs=graphdata2; value "South" / fillattrs=graphdata3; enddiscreteattrmap; discreteattrvar attrvar=southfill var=south attrmap="states"; discreteattrvar attrvar=northwestfill var=northwest attrmap="states"; discreteattrvar attrvar=southwestfill var=southwest attrmap="states"; layout lattice / columns=2; layout overlayEquated / walldisplay=none xaxisopts=(display=none) yaxisopts=(offsetmax=0.1 display=none); polygonPlot x=x y=y id=pid / group=northwestfill display=(fill outline) outlineattrs=(color=black) dataskin=_skin labelattrs=(color=black size=5) label=eval(ifc(region='NorthWest',statecode,'')); entry 'NorthWest' / valign=top textattrs=(size=7); endlayout; layout overlay / walldisplay=none xaxisopts=(display=(tickvalues) tickvalueattrs=(size=7) griddisplay=on) yaxisopts=(display=(ticks tickvalues) tickvalueattrs=(size=7)); barchart x=eval(ifc(reg='NorthWest', product, '')) y=revenue / orient=horizontal dataskin=gloss fillattrs=graphdata1; endlayout; layout overlayEquated / walldisplay=none xaxisopts=(display=none) yaxisopts=(offsetmax=0.1 display=none); polygonPlot x=x y=y id=pid / group=southwestfill display=(fill outline) outlineattrs=(color=black) dataskin=_skin labelattrs=(color=black size=5) label=eval(ifc(region='SouthWest',statecode,'')); entry 'SouthWest' / valign=top textattrs=(size=7); endlayout; layout overlay / walldisplay=none xaxisopts=(display=(tickvalues) tickvalueattrs=(size=7) griddisplay=on) yaxisopts=(display=(ticks tickvalues) tickvalueattrs=(size=7)); barchart x=eval(ifc(reg='SouthWest', product, '')) y=revenue / orient=horizontal dataskin=gloss fillattrs=graphdata2; endlayout; layout overlayEquated / walldisplay=none xaxisopts=(display=none) yaxisopts=(offsetmax=0.1 display=none); polygonPlot x=x y=y id=pid / group=southfill display=(fill outline) outlineattrs=(color=black) dataskin=_skin labelattrs=(color=black size=5) label=eval(ifc(region='South',statecode,'')); entry 'South' / valign=top textattrs=(size=7); endlayout; layout overlay / walldisplay=none xaxisopts=(display=(tickvalues) tickvalueattrs=(size=7) griddisplay=on) yaxisopts=(display=(ticks tickvalues) tickvalueattrs=(size=7)); barchart x=eval(ifc(reg='South', product, '')) y=revenue / orient=horizontal dataskin=gloss fillattrs=graphdata3; endlayout; endlayout; entryfootnote halign=left 'Using Polygon and Bar Chart in a Layout Lattice' / textattrs=(size=6); endgraph; end; run; ods graphics / reset width=4in height=4in imagename='MicroMapBar_940M2' attrpriority=color antialiasmax=4000 dataskinmax=2200; proc sgrender data=usapb template=MicroMapBar; dynamic _skin="sheen" _color='Black'; run;