%let gpath='C:\'; data assoc; keep x y value row pct rowL pctL blank; length x y $8; retain rowsum total 0; format pct percent6.1; format row 1.0; label row='Total'; rowL='Total'; pctL='Percent'; do y='North', 'South', 'East', 'West'; rowsum=0; row=.; blank=.; do x='Desk', 'Chair', 'Table', 'Lamp', 'Sofa'; value=ceil(rannorm(3)+0.9); if value < 1 then value=1; output; rowsum=rowsum+value; end; x='Total'; value=.; row=rowsum; pct=.; blank=3; output; x='Percent'; value=.; row=rowsum; pct=.; blank=3; output; total=total+rowsum; end; call symputx('total', total); run; proc print; run; data assoc2; set assoc; if x eq 'Percent' then do; pct=row/&total; row=.; end; run; /*--Step 1--*/ proc template; define statgraph Grid_Plot_1; begingraph; layout overlay; scatterplot x=x y=y / markersizeresponse=value xaxis=x2 markerattrs=graphdata7(symbol=squarefilled); endlayout; endgraph; end; run; ods html close; %let dpi=150; ods listing style=htmlblue gpath=&gpath image_dpi=&dpi; ods graphics / reset width=2.7in height=1.5in imagename='Grid_Plot_1'; proc sgrender data=assoc2 template=Grid_Plot_1; run; /*--Step 2--*/ proc template; define statgraph Grid_Plot_2; begingraph; layout overlay; scatterplot x=x y=y / markersizeresponse=value xaxis=x2 markerattrs=graphdata7(symbol=squarefilled); scatterplot x=rowL y=y / markercharacter=row xaxis=x2; scatterplot x=pctL y=y / markercharacter=pct xaxis=x2; endlayout; endgraph; end; run; ods graphics / reset width=2.7in height=1.5in imagename='Grid_Plot_2'; proc sgrender data=assoc2 template=Grid_Plot_2; run; /*--Step 3--*/ proc template; define statgraph Grid_Plot_3; begingraph; layout overlay / walldisplay=none x2axisopts=(griddisplay=on display=(tickvalues)) yaxisopts=(griddisplay=on display=(tickvalues)); scatterplot x=x y=y / markersizeresponse=value xaxis=x2 markerattrs=graphdata7(symbol=squarefilled); scatterplot x=rowL y=y / markercharacter=row xaxis=x2; scatterplot x=pctL y=y / markercharacter=pct xaxis=x2; endlayout; endgraph; end; run; ods graphics / reset width=2.7in height=1.5in imagename='Grid_Plot_3'; proc sgrender data=assoc2 template=Grid_Plot_3; run; /*--Step 4--*/ proc template; define statgraph Grid_Plot_F; begingraph; legendItem type=marker name="s" /markerattrs=graphdata7(symbol=squarefilled size=7) label="0-5 %"; legendItem type=marker name="m" /markerattrs=graphdata7(symbol=squarefilled size=14) label="5-10 %"; legendItem type=marker name="l" /markerattrs=graphdata7(symbol=squarefilled size=21) label="10-20 %"; layout overlay / walldisplay=none x2axisopts=(griddisplay=on display=(tickvalues)) yaxisopts=(griddisplay=on display=(tickvalues)); scatterplot x=x y=y / markersizeresponse=value xaxis=x2 markerattrs=graphdata7(symbol=squarefilled); scatterplot x=x y=y / markersizeresponse=blank xaxis=x2 markersizemin=17 markerattrs=graphdata1(symbol=squarefilled color=white); scatterplot x=rowL y=y / markercharacter=row xaxis=x2; scatterplot x=pctL y=y / markercharacter=pct xaxis=x2; discretelegend 's' 'm' 'l' / title='Market Share:' border=false; endlayout; endgraph; end; run; ods graphics / reset width=2.7in height=1.5in imagename='Grid_Plot_F' noborder; proc sgrender data=assoc2 template=Grid_Plot_F; run;