%let gpath=C:\; %let dpi=200; ods html close; ods listing style=HTMLBlue gpath="&gpath" image_dpi=&dpi; proc format; value res 0='1.0 mg' 1='2.0 mg' 2='3.0 mg' 3='4.0 mg' 4='3.0 F6 mg' 5='4.0 F6 mg'; run; /*--Create some data--*/ data tumor; label Duration='Duration of Treatment' Discontinued='Discontinued'; format Drug res.; length Code $6; do i=1 to 20; Response=100*(ranuni(3)-0.7); Duration=50*ranuni(3); Discontinued=.; if ranuni(3) > 0.8 then Discontinued=duration-5; Drug=floor(6*ranuni(3)); if ranuni(3) > 0.7 then Code='FL'; else Code='DLBCL'; Codeloc=ifn(response > 0, 0, response); Baseline=20+180*(ranuni(2)); output; end; run; /*--Sort by descending response--*/ proc sort data=tumor out=tumor; by descending Response; run; data tumorsorted; set tumor; j=_n_; run; ods html; proc print;run; ods html close; /*--Define Attributes map for walls and axes--*/ data attrmap; length ID $ 9 value $10 fillcolor $ 10 show $8; id='Resp'; value='1.0 mg'; fillcolor='white'; show='Attrmap'; output; id='Resp'; value='2.0 mg'; fillcolor='cxffffc0'; show='Attrmap'; output; id='Resp'; value='3.0 mg'; fillcolor='cxf0d0a0'; show='Attrmap'; output; id='Resp'; value='4.0 mg'; fillcolor='orange'; show='Attrmap'; output; id='Resp'; value='3.0 F6 mg'; fillcolor='cxff7f00'; show='Attrmap'; output; id='Resp'; value='4.0 F6 mg'; fillcolor='red'; show='Attrmap'; output; run; /*--WaterFall with Treatment Duration Template--*/ proc template; define statgraph Waterfall_Duration; begingraph / axislineextent=data; entrytitle 'Tumor Response and Duration by Subject Id'; entryfootnote halign=left 'This graph uses simulated data for illustration only' / textattrs=(size=7pt style=italic); layout lattice / columndatarange=union rowweights=(0.4 0.6) rowgutter=0; columnaxes; columnaxis / display=none discreteopts=(colorbands=odd colorbandsattrs=(transparency=0.2)); endcolumnaxes; layout overlay / yaxisopts=(griddisplay=on offsetmax=0.15 tickvalueattrs=(size=7) labelattrs=(size=7)) walldisplay=none; barchartparm category=j response=duration / datalabel=duration fillattrs=graphdata1 datalabelattrs=(size=5) dataskin=pressed displaybaseline=auto; scatterplot x=j y=discontinued / markerattrs=(symbol=diamondfilled size=9) filledoutlinedmarkers=true markerfillattrs=(color=gold) markeroutlineattrs=(color=black) name='d' legendlabel='Discontinued'; discretelegend 'd' / location=inside valign=top halign=left valueattrs=(size=7) border=false autoitemsize=true; endlayout; layout overlay / yaxisopts=(griddisplay=on tickvalueattrs=(size=5) labelattrs=(size=7) offsetmax=0 linearopts=(tickvaluepriority=true) label='Change from Baseline (%)') walldisplay=none; bandplot x=j limitupper=20 limitlower=-30 / extend=true display=(outline) outlineattrs=graphdata1(pattern=dash thickness=1); barchartparm category=j response=response / group=drug groupdisplay=cluster datalabelattrs=(size=5) dataskin=pressed name='a' datalabelfitpolicy=rotate; textplot x=j y=codeloc text=code / rotate=90 position=left textattrs=(size=6) contributeoffsets=(ymin); discretelegend 'a' / location=inside valign=bottom halign=left across=3 opaque=false valueattrs=(size=5) border=false; endlayout; endlayout; endgraph; end; run; /*--WaterFall with Treatment Duration Graph--*/ ods graphics / reset width=4in height=4in imagename='Waterfall_Duration'; proc sgrender template=Waterfall_Duration data=tumorsorted dattrmap=attrmap; format duration 3.0; label baseline='Baseline (mm)'; dattrvar drug="Resp"; run; /*--WaterFall with Tumor Baseline Template--*/ proc template; define statgraph Waterfall_Baseline; begingraph / axislineextent=data; entrytitle 'Tumor Response and Duration by Subject Id'; entryfootnote halign=left 'This graph uses simulated data for illustration only' / textattrs=(size=7pt style=italic); layout lattice / columndatarange=union rowweights=(0.3 0.45 0.25) rowgutter=0; columnaxes; columnaxis / display=none discreteopts=(colorbands=odd colorbandsattrs=(transparency=0.2)); endcolumnaxes; layout overlay / yaxisopts=(griddisplay=on offsetmax=0.15 tickvalueattrs=(size=7) labelattrs=(size=7)) walldisplay=none; barchartparm category=j response=duration / datalabel=duration fillattrs=graphdata1 datalabelattrs=(size=5) dataskin=pressed displaybaseline=auto; scatterplot x=j y=discontinued / markerattrs=(symbol=diamondfilled size=9) filledoutlinedmarkers=true markerfillattrs=(color=gold) markeroutlineattrs=(color=black) name='d' legendlabel='Discontinued'; discretelegend 'd' / location=inside valign=top halign=left valueattrs=(size=7) border=false autoitemsize=true; endlayout; layout overlay / yaxisopts=(griddisplay=on tickvalueattrs=(size=5) labelattrs=(size=7) offsetmax=0 linearopts=(tickvaluepriority=true) label='Change from Baseline (%)') walldisplay=none; bandplot x=j limitupper=20 limitlower=-30 / extend=true display=(outline) outlineattrs=graphdata1(pattern=dash thickness=1); barchartparm category=j response=response / group=drug groupdisplay=cluster datalabelattrs=(size=5) dataskin=pressed name='a' datalabelfitpolicy=rotate; textplot x=j y=codeloc text=code / rotate=90 position=left textattrs=(size=6) contributeoffsets=(ymin); discretelegend 'a' / location=inside valign=bottom halign=left across=3 opaque=false valueattrs=(size=5) border=false; endlayout; layout overlay / yaxisopts=(griddisplay=on tickvalueattrs=(size=5) labelattrs=(size=7) offsetmin=0 linearopts=(tickvaluepriority=true)) walldisplay=none; needleplot x=j y=baseline / lineattrs=(color=green pattern=solid thickness=5); scatterplot x=j y=baseline / markerattrs=(symbol=circlefilled size=9) filledoutlinedmarkers=true markerfillattrs=(color=white) markeroutlineattrs=(color=green); endlayout; endlayout; endgraph; end; run; /*--WaterFall with Tumor Baseline Graph--*/ ods graphics / reset width=4in height=4in imagename='Waterfall_Baseline'; proc sgrender template=Waterfall_Baseline data=tumorsorted dattrmap=attrmap; format duration 3.0; label baseline='Baseline (mm)'; dattrvar drug="Resp"; run;