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;
Catch the best of SAS Innovate 2025 — anytime, anywhere. Stream powerful keynotes, real-world demos, and game-changing insights from the world’s leading data and AI minds.
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.