With the NFL preseason wrapping up, here's a SAS ODS Graphics bubble chart comparison of the weights of the Chicago Bears by position. Data is from the Bears' Depth Chart and Roster. Bear Down!
* Fun With SAS ODS Graphics: Weights of Chicago Bears Starters
Data Source: Chicago Bears Depth Chart (as of 8/8/2023) and Roster
chicagobears.com/team/depth-chart
chicagobears.com/team/players-roster/;
data BearsStarters; /* Read in players' position, name, weight, x/y position location */
infile cards dsd delimiter=',' missover;
input position : $2. player : $25. weight x y;
if substr(position,1,1)^='*'; /* Skip "comments" in data */
if y>0 then do; positiontop=position; position=''; end; /* Defense? Display position on top, not bottom */
cards;
*==> DEFENSE, POSITION, WEIGHT, X, Y
DE,DeMarcus Walker,280,-2,0.5
DT,Justin Jones,309,-1,0.5
DT,Andrew Billings,311,1,0.5
DE,Yannick Ngakoue,246,2,0.5
LB,T.J. Edwards,242,3,1.5
LB,Tremaine Edmunds,250,0,1.5
LB,Jack Sanborn,234,-3,1.5
CB,Jaylon Johnson,196,-5,2.5
CB,Kyler Gordon,200,5,2.5
S,Eddie Jackson,206,-1,3.5
S,Jaquan Brisker,200,1,3.5
*==> OFFENSE, POSITION, WEIGHT, X, Y
WR,DJ Moore,210,-5,-0.5
LT,Braxton Jones,310,-2,-0.5
LG,Teven Jenkins,321,-1,-0.5
C,Cody Whitehair,316,0,-0.5
RG,Nate Davis,316,1,-0.5
RT,Darnell Wright,335,2,-0.5
TE,Cole Kmet,260,3,-0.5
WR,Darnell Mooney,173,5,-1.5
QB,Justin Fields,228,0,-1.5
RB,Khalil Herbert,212,1,-2.5
FB,Khari Blasingame,233,0,-2.5
WR,Chase Claypool,238,-4,-1.5
*==> SPECIAL TEAMS, POSITION, WEIGHT, X, Y
P,Trenton Gill,219,-5,-4.5
K,Cairo Santos,175,-4,-4.5
LS,Patrick Scales,226,-3,-4.5
H,Trenton Gill,219,-2,-4.5
KR,Velus Jones Jr.,200,-1,-4.5
PR,Velus Jones Jr.,200,0,-4.5
;
%SGANNO; /* Use SAS ODS Graphics annotate macros to add Bears logo to chart */
data bearslogo; /* Specify size of image and location in terms of x/y values */
%SGIMAGE (image="/home/ted.conway/bears.png",drawspace="DATAVALUE",x1=4.5,y1=-4.5,height=1.5,heightunit="DATA",anchor="CENTER");
ods graphics on / height=10in width=10in noborder; /* Create chart of offensive/defensive formations and special teams players */
proc sgplot data=bearsstarters aspect=1 noborder nowall noautolegend sganno=bearslogo;
styleattrs backcolor=cx196f0c; /* Set background to "grass green" color */
inset "Chicago Bears Starting Players' Weights by Position" "(Source: 8/8 Depth Chart and Roster)" / textattrs=(color=white size=18pt) position=top valuealign=center; /* Display headings */
bubble x=x y=y size=weight / bradiusmax=.325in bradiusmin=.01 proportional nofill datalabel=positiontop datalabelpos=top datalabelattrs=(weight=bold size=8pt color=white) lineattrs=(color=white); /* Display defensive positions above bubbles */
bubble x=x y=y size=weight / bradiusmax=.325in bradiusmin=.01 proportional nofill datalabel=position datalabelpos=bottom datalabelattrs=(weight=bold size=8pt color=white) lineattrs=(color=white); /* Display offensive, special teams positions above bubbles */
bubble x=x y=y size=weight / bradiusmax=.325in bradiusmin=.01 proportional colormodel=(lightblue navy) colorresponse=weight datalabel=weight datalabelpos=center datalabelattrs=(weight=bold size=11pt color=white) lineattrs=(color=white); /* Display weights in bubbles that are sized/shaded by weight */
refline 0 / axis=y label="" labelloc=inside lineattrs=(color=white thickness=1.5pt); /* Draw a white 'line of scrimmage' */
refline 0 / axis=y label="DEFENSE" labelloc=inside labelpos=max lineattrs=(thickness=0) labelattrs=(weight=bold size=8pt color=white); /* Add Defense/Offense/Special Teams labels */
refline -.25 / axis=y label="OFFENSE" labelloc=inside labelpos=max lineattrs=(thickness=0) labelattrs=(weight=bold size=8pt color=white);
refline -4 / axis=y label="SPECIAL TEAMS" labelloc=inside labelpos=min lineattrs=(thickness=0) labelattrs=(weight=bold size=8pt color=white);
xaxis display=none values=(-5 5) offsetmin=.05 offsetmax=.05; /* Suppress axes, add a little padding space */
yaxis display=none values=(-5 5) offsetmin=.05 offsetmax=.05;
run;
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
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.