|
data crackman;
input code r;
datalines;
1 0.1
1 0.2
1 0.3
1 0.4
1 0.5
1 0.7
2 1.8
2 0.9
2 0.8
2 0.6
2 1.6
2 1.3
3 4.5
3 4.6
4 9.8
4 8.0
;
proc sort data=crackman;
by code;
run;
data a;
set crackman;
by code;
if first.code;
run;
data _null_;
set a;
call symput("cd"||left(_n_),code);
run;
proc sql noprint;
select count(*) as count into:count from a;
quit;
%macro opt(n);
data %do i=1 %to &count.;
crackman&i.
%end;;
set crackman;
by code;
if first.code then n=1 ;
else n+1;
%do j=1 %to &count.;
if code="&&cd&j." and n<=&n. then output crackman&j.;
%end;
run;
%mend opt;
%opt(3);
|