Here's one way to do it, using Proc Gmap and annotate ...
data my_data; input statecode $ 1-2 value; state=stfips(statecode); datalines; NC 491 SC 352 VA 108 ; run;
data my_map; set maps.us (where=(statecode in ('NC' 'SC' 'VA'))); run;
proc sql noprint; create table anno_dots as select unique my_data.*, uscenter.x, uscenter.y from my_data left join maps.uscenter on my_data.state=uscenter.state; quit; run;
%let max_val=500; /* maximum size of data value to scale to */ %let max_area=40; /* size of the maximum dot you want in the map */ data anno_dots; set anno_dots; length function $8 color $20; xsys='2'; ysys='2'; hsys='3'; when='a'; function='pie'; rotate=360; size=sqrt((value/&max_val)*&max_area/3.14); color='dodgerblue'; style='psolid'; output; color='gray33'; style='pempty'; output; run;
pattern1 v=s color=grayf5;
proc gmap data=my_map map=my_map anno=anno_dots; id statecode; choro segment / levels=1 nolegend coutline=gray55; run;
... View more