36 %local d_temp1 d_temp2;
37 data; run; %let d_temp1=&syslast;
38 data; run; %let d_temp2=&syslast;
39 %local i count bycount;
42 proc sort data=&data out=&d_temp1;
45 %
if &syserr %then %
do;
46 %put ERROR: Macro Generate: data= or by= specified incorrectly;
51 proc means noprint data=&d_temp1(keep=&by);
57 set &d_temp2 nobs=count;
58 call symput (
"count", compress(put(count,8.)));
68 array t(1) $ 200 _temporary_;
71 %
do %
while(%scan(&by,&i) ne %str());
73 t(1) = trim(t(1)) !!
',';
75 t(1) = trim(t(1)) !!
" %scan(&by,&i)=" !! trim(left(vvalue(%scan(&by,&i))));
78 %let bycount=%eval(&i-1);
79 t(1) = trim(t(1)) !!
' (' !! compress(put(_freq_,8.)) !!
' observations)';
80 call symput (
'label' !! compress(put(_n_,8.)), trim(t(1)));
84 data %
do i=1 %to &count; &out&i (label=
"&&label&i") %end; ;
87 array t(1) _temporary_;
88 if first.%scan(&by,&bycount) then t(1)+1;
91 when(&i) output &out&i;
96 proc datasets lib=work nolist;
97 delete %scan(&d_temp1,2,.) %scan(&d_temp2,2,.);