I'm still not sure I understand, but what about the following to create the three flags you want? You can see the attached image where I checked the flags. If this isn't correct, it might help if you provide an example of the desired results. proc sql;
CREATE TABLE want AS
SELECT DISTINCT a.patient,
/* Flag 1: having treatment date 6 month prior to the index date */
min(a.treatment_date) < intnx('month', b.index_date, -6) AS flag1 'Has Treatment Earlier Than Six Mos Before Index',
/* Flag 2: having treatment date within pre 6 month and post 6 month of index date */
max(a.treatment_date BETWEEN intnx('month', b.index_date, -6) AND intnx('month', b.index_date, 6)) AS flag2 'Has Treatment Between Index +/- Six Mos',
/* Flag 3: not having treatment date 6 month after the index date */
max(a.treatment_date) > intnx('month', b.index_date, 6) AS flag3 'Has Treatment Later Than Six Mos After Index'
FROM patients AS a
LEFT JOIN indexes AS b
ON a.patient = b.patient
GROUP BY a.patient;
quit;
proc print label;
run;
... View more