I think it can be done in a single data step, like this:
data pass open exception;
do until(last.client or status='success');
set original;
by client;
if first.client then
date0=started;
end;
if status='failed' then
type='O';
else if finished-date0>1 then
type='E';
else
type='P';
date0=finished;
retain date0;
do until(last.client or status='success');
set original;
by client;
select(type);
when('O') output open;
when('P') output pass;
otherwise output exception;
end;
end;
drop date0 type;
run;
... View more