%let name=star_wars_releases;
filename odsout '.';

/*
Graphing data from Star Wars wikipedia page:
https://en.wikipedia.org/wiki/Star_Wars#Saga_and_Anthology_films
*/

data releases;
input release_date date9. title_info $ 11-80;
length episode $20;
episode=trim(left(scan(trim(left(scan(title_info,2,':'))),1,'-')));
length episode_roman $5;
episode_roman=scan(episode,2,' ');
if episode_roman='I' then episode_num=1;
if episode_roman='II' then episode_num=2;
if episode_roman='III' then episode_num=3;
if episode_roman='IV' then episode_num=4;
if episode_roman='V' then episode_num=5;
if episode_roman='VI' then episode_num=6;
if episode_roman='VII' then episode_num=7;
if episode_roman='VIII' then episode_num=8;
if episode_roman='IX' then episode_num=9;
length title $100;
title=trim(left(scan(title_info,2,'-')));
datalines;
25May1977 Star Wars: Episode IV - A New Hope
21may1980 Star Wars: Episode V - The Empire Strikes Back
25may1983 Star Wars: Episode VI - Return of the Jedi
19may1999 Star Wars: Episode I - The Phantom Menace
16may2002 Star Wars: Episode II - Attack of the Clones
19may2005 Star Wars: Episode III - Revenge of the Sith
18dec2015 Star Wars: Episode VII - The Force Awakens
15dec2017 Star Wars: Episode VIII - The Last Jedi
20dec2019 Star Wars: Episode IX - The Rise of Skywalker
;
run;

proc sort data=releases out=releases;
by descending release_date;
run;

data anno_releases; set releases;
end_date=lag(release_date);
if end_date=. then end_date="01jan2030"d;
run;

/* Annotate the 'bar' segments for each event */
data anno_releases; set anno_releases;
length function color $8 style $35;
xsys='2'; ysys='2'; when='a'; hsys='3';

function='move';
x=release_date;
y=episode_num; 
output;

function='move';
y=y-.2; 
output;

length html $300;
html=
 'title='||quote(
  trim(left(title_info))||'0d'x||
  'Release date: '||trim(left(put(release_date,nldate.))))||
 ' href='||quote('http://www.google.com/search?&q='||trim(left(title_info)));
function='bar'; line=0; style='solid';
color='gray';
if episode_num in (1 2 3) then color='cx7fc97f';
if episode_num in (4 5 6) then color='cxbeaed4';
if episode_num in (7 8 9) then color='cxfdc086';
y=y+2*.2; 
x=end_date; 
output;

run;

data anno_releases_outline; set anno_releases;
style='empty'; color='gray77'; html='';
run;

data anno_titles; set releases;
length function color $8 style $35 text $100;
xsys='2'; ysys='2'; when='a'; hsys='3';
x=release_date;
y=episode_num+.45; 
function='label'; position='6'; size=2.2; color='gray55';
text=trim(left(title));
run;

data anno_releases; set anno_releases anno_releases_outline anno_titles;
run;


goptions device=png;
goptions ypixels=600 xpixels=900;
 
ODS LISTING CLOSE;
ODS HTML path=odsout body="&name..htm" 
 (title="Star Wars Timeline") 
 style=htmlblue;

goptions gunit=pct ftitle='albany amt/bold' ftext='albany amt' htitle=4.0 htext=2.5;
goptions ctext=gray33;

axis1 label=(f='albany amt/bold' 'Episode') 
 style=0 major=none minor=none offset=(5,5);

axis2 label=(f='albany amt/bold' 'Release Date') 
 style=0 order=('01jan1975'd to '01jan2030'd by year5) 
 major=none minor=none offset=(0,0);

symbol1 v=none i=none;

title1 ls=1.5 "Star Wars Movie Timeline";

proc gplot data=releases anno=anno_releases;
format episode_num roman.;
format release_date year.;
plot episode_num*release_date /
 vaxis=axis1 haxis=axis2 noframe
 autohref chref=gray99 lhref=33
 autovref cvref=gray99 lvref=33
 des='' name="&name";
run;

quit;
ODS HTML CLOSE;
ODS LISTING;
