data icecream;
input @1 flavor $10. @12 rank 1. @14 group $1.;
cards;
Strawberry 2 B
Chocolate 1 B
Vanilla 3 B
Strawberry 2 A
Vanilla 1 A
Coffee 1 C
Vanilla 3 C
Chocolate 2 C
;
run;
proc sort data=icecream;
by group flavor;
run;
data _NULL_;
set icecream end=eof;
by group flavor;
if first.group then do;
bycount=0;
total+1;
call symput('grp'||left(total),group);
end;
if first.flavor then
bycount+1;
if flavor='Strawberry' then
call symput('pat'||trim(left(total))||trim(left(bycount)),
'pattern'||trim(left(total))
||trim(left(bycount))
||' c=gray1a'||' v=x3'||';');
if flavor='Chocolate' then
call symput('pat'||trim(left(total))||trim(left(bycount)),
'pattern'||trim(left(total))
||trim(left(bycount))
||' c=black '||' v=solid'||';');
if flavor='Vanilla' then
call symput('pat'||trim(left(total))||trim(left(bycount)),
'pattern'||trim(left(total))
||trim(left(bycount))
||' c=gray7f '||' v=l3'||';');
if flavor='Coffee' then
call symput('pat'||trim(left(total))||trim(left(bycount)),
'pattern'||trim(left(total))
||trim(left(bycount))
||' c=gray4c '||' v=r3'||';');
if last.group then call symput('totnby'||trim(left(total)),bycount);
if eof then call symput('total',total);
run;
%macro pattern;
%do j=1 %to &&totnby&i;
&&pat&i&j
%end;
%mend pattern;
pattern11 c=gray1a v=x3; /* Patterns for first BY group */
pattern12 c=gray7f v=l3;
pattern21 c=black v=solid; /* Patterns for second BY group */
pattern22 c=gray1a v=x3;
pattern23 c=gray7f v=l3;
pattern31 c=black v=solid; /* Patterns for third BY group */
pattern32 c=gray4c v=r3;
pattern33 c=gray7f v=l3;
%macro gchart;
%do i=1 %to &total;
goptions reset=pattern;
%pattern
proc gchart data=icecream;
where group="&&grp&i";
vbar flavor / patternid=midpoint sumvar=rank;
title1 f=swiss "Ice Cream Flavor Rankings, Group &&grp&i";
run;
quit;
%end;
%mend gchart;
%gchart
goptions reset=pattern;
pattern11 c=gray1a v=x3;
pattern12 c=gray7f v=l3;
proc gchart data=icecream;
where group="A";
vbar flavor / sumvar=rank patternid=midpoint;
title1 f=swiss "Ice Cream Flavor Rankings, Group A";
run;
quit;
goptions reset=pattern;
pattern21 c=black v=solid;
pattern22 c=gray1a v=x3;
pattern23 c=gray7f v=l3;
proc gchart data=icecream;
where group="B";
vbar flavor / sumvar=rank patternid=midpoint;
title1 f=swiss "Ice Cream Flavor Rankings, Group B";
run;
quit;
goptions reset=pattern;
pattern31 c=black v=solid;
pattern32 c=gray4c v=r3;
pattern33 c=gray7f v=l3;
proc gchart data=icecream;
where group="C";
vbar flavor / sumvar=rank patternid=midpoint;
title1 f=swiss "Ice Cream Flavor Rankings, Group C";
run;
quit;