BookmarkSubscribeRSS Feed
rakeshvvv
Quartz | Level 8

I have dataset with three varaibles id startdate enddate. Dates are numerical sas formats.

I would like to pull out the records for id where the difference between the two succesive START dates is more then 28 days.

example:

ID    STARTDATE ENDDATE

001   19583      19604

001   19589      19609

001   19600      19610

001   19628      19638

001   19480      19520

1 REPLY 1
Kurt_Bremser
Super User

This looks like an appliaction for a dow loop:

data want (keep=id1 st1 enddate rename=(id1=id st1=startdate));

format id1 st1 enddate; /* just to keep the vars in order */

do until ((startdate - lastdate >= 28) or finish);

  lastdate = startdate;

  set have end=finish;

  by id;

  if first.id then lastdate = startdate;

end;

if startdate - lastdate >= 28

then do;

  do until (lastdate = st1 and id = id1); /* read to the first record */

    set have (rename=(id=id1 startdate=st1));

  end;

  output;

  do until (startdate = st1 and id = id1); /* read to the second record */

    set have (rename=(id=id1 startdate=st1));

  end;

  output;

end;

run;

hackathon24-white-horiz.png

2025 SAS Hackathon: There is still time!

Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!

Register Now

What is Bayesian Analysis?

Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 1 reply
  • 1059 views
  • 0 likes
  • 2 in conversation