/**********************************************************************/
data rainfall;
input @1 city $13. @15 rainfall 4.2 @20 qtr 1.;
cards;
Asheville 8.2 1
Asheville 9.1 2
Asheville 10.2 3
Asheville 9.1 4
Charlotte 11.3 1
Charlotte 8.7 2
Charlotte 8.9 3
Charlotte 10.5 4
Raleigh 5.2 1
Raleigh 5.1 2
Raleigh 9.5 3
Raleigh 8.6 4
Greensboro 11.2 1
Greensboro 11.1 2
Greensboro 9.2 3
Greensboro 7.6 4
Winston_Salem 10.9 1
Winston_Salem 10.5 2
Winston_Salem 9.1 3
Winston_Salem 8.7 4
run;
/**********************************************************************/
proc sort data=rainfall;
by city rainfall;
run;
/**********************************************************************/
data rainfall;
set rainfall end=eof;
by city;
retain i o;
if first.city then
do;
i=i+1;
call symput('start'||left(i),rainfall);
call symput('city'||left(i),trim(city));
call symput('first'||left(i),_n_);
end;
else if last.city then
do;
call symput('stop'||left(i),rainfall);
call symput('last'||left(i),_n_);
end;
if eof then call symput('tot',i);
run;
/**********************************************************************/
%macro chartit(dsn=,chrtvar=,sumvar=,grpvar=);
%do i=1 %to &tot;
proc chart data=&dsn(firstobs=&&first&i obs=&&last&i);
block &chrtvar / sumvar=&sumvar group=&grpvar
axis=&&start&i &&stop&i;
title "Rainfall Amount for &&city&i by Quarter";
format &sumvar 4.1;
run;
%end;
%mend chartit;
/**********************************************************************/
%chartit(dsn=rainfall,chrtvar=city,sumvar=rainfall,
grpvar=qtr)
/**********************************************************************/