After checking out the How Do I Show Geographical Data Using the SGMAP Procedure? on-demand seminar from @DanH_sas, how could I not try to create a map of the 25 biggest college football stadiums in the country? Btw, documentation shows there are LOTS more useful SGMAP BUBBLE statement options once I get access to SAS Viya 3.5, Post-9.4M6.
* Fun With SAS ODS Graphics: The 25 Largest College Football Stadiums
Data source: ncaa.com/news/football/article/2018-07-30/25-biggest-college-football-stadiums-country;
FILENAME stadiums url 'https://docs.google.com/spreadsheets/d/1WGsCQQog2VBiobj9eCnUa_bQO9sGTH11VEq13-MNNNk/export?format=csv&gid=0';
proc import datafile=stadiums out=stadiums DBMS=CSV REPLACE; GETNAMES=Yes; DATAROW=2; * Grab geocoded point data from Google Sheets;
data stadiums2; * Nudge Rank+Sachool (Rank+School) a bit to avoid collisions (Top/Middle/Bottom, Left/Center/Right);
set stadiums;
select (school);
when ('San Diego State', 'Auburn', 'Michigan', 'South Carolina', 'Florida') schoolR=' '||catx(' ',rank,school);
when ('Southern Cal.', 'San Diego Stat', 'Texas', 'Alabama') schoolL=catx(' ',rank,school);
when ('Georgia') schoolTL=catx(' ',rank,school);
when ('Notre Damex') schoolBL=catx(' ',rank,school);
when ('Ohio State', 'Notre Dame') schoolB=catx(' ',rank,school);
when ('Clemson','UAB','Penn State') schoolTR=catx(' ',rank,school);
otherwise schoolT=catx(' ',rank,school);
end;
data heading; * Provide a report heading near NW coast;
longitude=-110.0000; latitude=44.1; heading='25 Largest College Football Stadiums';
data chartdata; * Merge point data + heading;
set stadiums2 heading;
ods graphics / reset height=6.25in width=11in antialias;
proc sgmap plotdata=chartdata noautolegend; * Chart data;
esrimap url='http://services.arcgisonline.com/arcgis/rest/services/Canvas/World_Light_Gray_Base';
bubble x=longitude y=latitude size=capacity / datalabel=schoolT datalabelattrs=(size=8pt color=navy) datalabelpos=top; * Stadium points;
bubble x=longitude y=latitude size=capacity / datalabel=schoolR datalabelattrs=(size=8pt color=navy) datalabelpos=right;
bubble x=longitude y=latitude size=capacity / datalabel=schoolL datalabelattrs=(size=8pt color=navy) datalabelpos=left;
bubble x=longitude y=latitude size=capacity / datalabel=schoolTR datalabelattrs=(size=8pt color=navy) datalabelpos=topright;
bubble x=longitude y=latitude size=capacity / datalabel=schoolTL datalabelattrs=(size=8pt color=navy) datalabelpos=topleft;
bubble x=longitude y=latitude size=capacity / datalabel=schoolBL datalabelattrs=(size=8pt color=navy) datalabelpos=bottomleft;
bubble x=longitude y=latitude size=capacity / datalabel=schoolB datalabelattrs=(size=8pt color=navy) datalabelpos=bottom;
scatter x=longitude y=latitude / datalabel=heading datalabelattrs=(size=18pt color=navy) markerattrs=(size=0); * Heading;
run;
Sample Data (Full Data at Google Sheets)
I think you don't need separate variables for the labels, nor separate BUBBLE statements. You can put all labels in one variable:
data Have;
length Label $10;
input x y size Label;
datalines;
0 0 102 Texas
0 3 86 Oklahoma
0 5 85 Nebraska
1 0 102 LSU
1 6 69 Iowa
2 8 80 Wisconson
3 2 101 Alabama
;
proc sgplot data=Have;
bubble x=x y=y size=size / datalabel=Label datalabelattrs=(size=8pt color=navy) datalabelpos=top;
run;
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.