Couldn't do any testing, but this should be close:
data diag140106_350;
set caper140106_350xx_sort;
array d{*} dx1-dx5;
do i = 1 to dim(d);
diag = d{i};
if diag in (/* list of required diagnosis goes here */) then output;
end;
keep patssn encdate1 diag;
run;
proc sql;
create table diag3all as
select
a.patssn,
a.diag,
a.encDate1,
b.encDate1 as otherDate1,
count(distinct b.encDate1) + 1 as nbDiag
from
diag140106_350 as a inner join
diag140106_350 as b
on
a.patssn = b.patssn and
a.diag = b.diag and
a.encDate1 < b.encDate1 and
intck("month", a.encDate1, b.encDate1, "continuous") <= 6
group by a.patssn, a.diag, a.encDate1
having count(distinct b.encDate1) + 1 >= 3;
create table diag3 as
select *
from diag3all
group by patssn, diag
having nbDiag = max(nbDiag);
quit;
... View more