You can try something like this:
data want;
set have;
by ID;
retain date2find;
if first.ID then do;
output; /* This statement will include the first obs from each */
/* set of IDs if desired. If not, delete this statement. */
date2find = DATE + 90;
end;
if DATE >= date2find then do;
output; /* Output the found record */
date2find = DATE + 90; /* Re-set to date to be found */
end;
drop date2find;
run;
This relies on your dataset being sorted as described (by ID and DATE)