%let gpath='C:\Work\Blogs\Graphically Speaking\2013\Post_March_10_2013_VBarParm'; %let dpi=100; ods html close; ods listing gpath=&gpath image_dpi=&dpi; data Revenue; format Sales Cost Profit dollar10.0; format Units comma10.0; do Product='Chair', 'Desk', 'Lamp', 'Sofa', 'Table'; Units=5000*(1+ranuni(2)); do Qtr='Q1', 'Q2', 'Q3', 'Q4'; Units=round(units*(1+0.1*ranuni(2))); Sales=10*Units*(1+0.1*ranuni(2)); Cost =6*Units*(1+0.1*ranuni(2)); Profit=sales-cost; output; end; end; run; /*ods html;*/ /*proc print data=revenue(obs=6) noobs;*/ /* var product qtr units sales cost profit;*/ /*run;*/ /*ods html close;*/ /*--Bar Chart of Sales, Cost and Profit--*/ ods graphics / reset width=5in height=3in imagename='VBar'; proc sgplot data=revenue; title 'Sales, Costs and Profits'; vbar product / response=sales dataskin=gloss nostatlabel fillattrs=graphdatadefault; vbar product / response=cost dataskin=gloss nostatlabel barwidth=0.6 fillattrs=graphdata1; vline product / response=profit nostatlabel lineattrs=graphdata2(thickness=5 pattern=solid); yaxis offsetmin=0 display=(nolabel) grid; run; /*--Summarize the data--*/ proc means data=Revenue sum noprint; class product; var Sales Cost Profit; output out=revenueSum sum(Sales Cost Profit Units) = Sales_sum Cost_sum Profit_sum Units_sum; run; /*--Build Units Sold Label--*/ data revenueSum2; label sales_sum='Sales' cost_sum='Costs' profit_sum='Profit' units_sum='Units'; set revenueSum(where=(_type_ eq 1)) end=last; retain ymax 0; UnitLabel=cat('Units =', put(units_sum, comma8.0)); ymax=max(ymax, sales_sum); if last then call symput("YMAX", ymax); run; /*--Locate highest Y axis value for positioning Units Sold label--*/ data revenueSum3; set revenueSum2; YMax=&YMAX * 1.15; run; proc print;run; /*--Bar Chart of Sales, Cost and Profit and Units Sold--*/ ods graphics / reset width=5in height=3in imagename='VBarParm'; proc sgplot data=revenueSum2; title 'Sales, Costs and Profits with Units Sold'; vbarparm category=product response=sales_sum / dataskin=gloss datalabel=UnitLabel datalabelattrs=(size=8) fillattrs=graphdatadefault name='s'; vbarparm category=product response=cost_sum / dataskin=gloss barwidth=0.6 fillattrs=graphdata1 name='c'; series x=product y=profit_sum / lineattrs=graphdata3(thickness=9 pattern=solid) transparency=0.4 name='p'; scatter x=product y=profit_sum / markerattrs=graphdata3(size=15 symbol=circlefilled); scatter x=product y=profit_sum / markerattrs=(size=9 symbol=circlefilled color=white); yaxis offsetmin=0 display=(nolabel) grid values=(0 to 400000 by 100000); keylegend 's' 'c' 'p'; run; /*--Horizontal Bar Chart of Sales, Cost and Profit and Units Sold--*/ ods graphics / reset width=5in height=3in imagename='HBarParm_Scat'; proc sgplot data=revenueSum3; title 'Sales, Costs and Profits with Units Sold'; hbarparm category=product response=sales_sum / dataskin=gloss fillattrs=graphdatadefault name='s'; hbarparm category=product response=cost_sum / dataskin=gloss barwidth=0.6 fillattrs=graphdata1 name='c'; series x=profit_sum y=product / lineattrs=graphdata3(thickness=9 pattern=solid) transparency=0.4 name='p' legendlabel='Profit'; scatter x=profit_sum y=product / markerattrs=graphdata3(size=15 symbol=circlefilled); scatter x=profit_sum y=product / markerattrs=(size=9 symbol=circlefilled color=white); scatter x=ymax y=product / markerchar=unitlabel markercharattrs=(size=8); xaxis offsetmin=0 display=(nolabel) grid; yaxis display=(nolabel); keylegend 's' 'c' 'p'; run; /*--Bar Chart of Sales, Cost and Profit and Units Sold on Y2 axis--*/ ods graphics / reset width=5in height=3in imagename='VBarParm_Series'; proc sgplot data=revenueSum3; title 'Sales, Costs and Profits with Units Sold'; vbarparm category=product response=sales_sum / dataskin=gloss fillattrs=graphdatadefault name='s'; vbarparm category=product response=cost_sum / dataskin=gloss barwidth=0.6 fillattrs=graphdata1 name='c'; series x=product y=profit_sum / lineattrs=graphdata3(thickness=9 pattern=solid) transparency=0.4 name='p'; scatter x=product y=profit_sum / markerattrs=graphdata3(size=15 symbol=circlefilled); scatter x=product y=profit_sum / markerattrs=(size=9 symbol=circlefilled color=white); series x=product y=units_sum / lineattrs=graphdata2(thickness=5 pattern=solid) Y2axis name='u'; yaxis offsetmin=0 Label='Sales, Costs, Profits' grid; y2axis label='Units Sold' valueattrs=(color=darkred) labelattrs=(color=darkred); keylegend 's' 'c' 'p' 'u'; run; /*--Bar Chart of Sales, Cost and Profit and Units Sold on Y2 axis with zero baseline--*/ ods graphics / reset width=5in height=3in imagename='VBarParm_Series2'; proc sgplot data=revenueSum3; title 'Sales, Costs and Profits with Units Sold'; vbarparm category=product response=sales_sum / dataskin=gloss fillattrs=graphdatadefault name='s'; vbarparm category=product response=cost_sum / dataskin=gloss barwidth=0.6 fillattrs=graphdata1 name='c'; series x=product y=profit_sum / lineattrs=graphdata3(thickness=5 pattern=solid) name='p'; scatter x=product y=profit_sum / markerattrs=graphdata3(size=15 symbol=circlefilled); scatter x=product y=profit_sum / markerattrs=(size=9 symbol=circlefilled color=white); series x=product y=units_sum / lineattrs=graphdata2(thickness=5 pattern=solid) Y2axis name='u'; scatter x=product y=units_sum / markerattrs=graphdata2(size=15 symbol=circlefilled) Y2axis; scatter x=product y=units_sum / markerattrs=(size=9 symbol=circlefilled color=white) Y2axis; yaxis offsetmin=0 Label='Sales, Costs, Profits' grid; y2axis label='Units Sold' valueattrs=(color=darkred) labelattrs=(color=darkred) offsetmin=0 values=(0 to 40000 by 10000); keylegend 's' 'c' 'p' 'u'; run;