You may be able to speed up the SQL solution by indexing your data, e.g.
proc sql;
create index patient on example1(patient):
quit;
or perhaps:
proc sql;
create index test_idx on example1(patient,testdate):
quit;
With the latter index it may (depending on the savvy of the SQL interpreter), further improvements may also be possible by changing the EXISTS conditions to something like
where patient=full.patient
and testdate between full.drugclaimdate+1 and full.drugclaimdate+30
But if the performance is an issue, one of the other solutions may be better.
... View more