Oscars are tonight, so here's a SAS ODS Graphics annotated text + needle chart of the implied probability + odds of winning for the Best Picture nominees (Spoiler Alert: things look good for One Battle After Another!).
Didn't get to watch all the nominees? No problem! Clickable images in GitHub-hosted version of SAS ODS Graphics chart will take you to the 2026 Academy Awards Best Picture nominee trailers on YouTube!
* Fun With SAS ODS Graphics: What Are the Odds of Winning for the 2026 Best Picture Oscar Nominees?;
proc import datafile='/home/ted.conway/nominees/nominees2026.xlsx' dbms=xlsx out=nominees replace; * Import nominee info and odds from Excel;
* Create annotation dataset that using imported nominee info;
%SGANNO; * Images all the same height, but displayed at height that matches their probability of winning;
data nominees2026; * Add annotation info about nominated films;
set nominees(obs=10); * Only first 10 rows have movie info;
retain function 'image' border "true" linecolor "white" drawspace "datavalue" imagescale "fitheight" height 1 heightunit "DATA" anchor "BOTTOM";
image=cats('/home/ted.conway/nominees/',PosterImage,'.jpg'); * Annotation info that's constant for all films;
xc1=BestPictureNominee; * x-axis value for movie names (categorical);
y1=Probability; * y-axis value for bottom of image (probability);
txtProbOdds=cats(put(probability,percent6.2))||' '||cats('(',odds,')'); * Dispaly probability + odds above image;
ProbabilityPlus1=Probability+1.01; * y-axis value for probability (display probability + odds above image, which has height of 1);
* Generate chart of films/probability of winning (Text+Needle plots and annotation);
ods html5 path='/home/ted.conway/nominees' body='oscars2026.html' options(bitmap_mode="inline"); * Create clickable web page graph;
ods graphics / reset imagemap=on height=6in width=24in imagefmt=png noborder imagename='Oscars2026'; * Use SVG for sharper static image, PNG format for clickable movie images that play YouTube trailers;
proc sgplot data=nominees2026 sganno=nominees2026 nowall noborder noautolegend ;
styleattrs backcolor=black; * Lights out - they're movies!;
inset "2026 Best Picture Nominees: Implied Probability & Odds of Winning (Click Image to View YouTube Trailer)"
/ textattrs=(color=white size=17pt weight=bold) position=topleft;
text x=BestPictureNominee y=probabilityplus1 text=txtProbOdds / strip contributeoffsets=none textattrs=(size=12pt color=white weight=bold) position=top; * Display probabilities/odds above images;
needle x=BestPictureNominee y=probability / lineattrs=(thickness=4pt color=white); * Show a drop line from image to baseline ("lollipop" chart);
xaxis display=(nolabel noticks noline) valueattrs=(color=white weight=bold size=12pt) offsetmin=.06 offsetmax=.06; * X-axis displays movie names in descending order of probability;
yaxis display=(nolabel noticks noline) valueattrs=(color=white weight=bold size=12pt) values=(0 .25 .50 .75 1.00 2) valuesdisplay=('0' '25%' '50%' '75%' '100%' ' ') offsetmin=.01 offsetmax=.05; * Y-axis displays probablility of winning;
refline 0 .25 .5 .75 1 / axis=y lineattrs=(color=grey) label=""; * Display reference lines for at 0%/25%/50%/75%/100%;
run;
ods html5 close;
DETAIL (SVG)
EXCEL INPUT
Dive into keynotes, announcements and breakthroughs on demand.
Explore 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.