试试看:
data old;
do i=1 to 100 by 1;
a=(ranuni(123)>0.5);
b=(ranuni(123)>0.5);
output;
end;
drop i;
run;
data new;
set a;
retain c 0;
if c=1 and b=1 then c=0;
else if a=1 then c=1;
run;
data crackman;
input a b;
obs=_n_;
datalines;
0 0
0 1
1 0
0 0
1 0
0 1
0 0
1 0
1 0
0 1
;
run;
proc sort data=crackman;
by a b;
run;
data _null_;
set crackman;
by a;
if first.a=1 and a=1 then call symput("a",obs);
run;
data b;
set crackman(where=(obs>=&a.));
if b=1;
run;
%macro crackman;
data _null_;
set b;
call symput("b"||left(_n_),obs);
run;
proc sql noprint;
select count(*) as obsnum into: obsnum from b;
quit;
data crackman;
set crackman;
%do i=1 %to &obsnum.;
if obs<&a. OR obs=&&b&i. then c=0;
%end;
if c=. then c=1;
run;
proc sort data=crackman;
by obs;
run;
%mend crackman;
%crackman;