Hi,
I have a dataset looking like below.
MRN Date_of_proc
1029 11/9/15
1029 12/9/15
1029 1/9/17
1029 2/9/18
1050 12/5/17
1080 1/7/16
1080 2/5/18
I want to delete the observations for which Date_of_proc is within one year.and i want it look like this
MRN Date_of_proc
1050 12/5/17
1080 1/7/16
1080 2/5/18
Please help. Thank you in advance.
data have;
input MRN Date_of_proc :mmddyy10.;
format Date_of_proc mmddyy10.;
cards;
1029 11/9/15
1029 12/9/15
1029 1/9/17
1029 2/9/18
1050 12/5/17
1080 1/7/16
1080 2/5/18
;
proc sort data=have;
by mrn Date_of_proc;
run;
data want;
_f=.;
do until(last.mrn);
set have;
by mrn;
_temp_=dif(date_of_proc);
if first.mrn then call missing(_temp_);
if .<_temp_<365 then _f=1;
end;
do until(last.mrn);
set have;
by mrn;
if not _f then output;
end;
drop _:;
run;
Can you clarify within one year of what?
Hi,
Like for one MRN, if any of two Date _of_proc is less than a year apart i want to delete that MRN.
MRN 1029 has Date _of_proc which was less than a year apart so i want to delete 1029.
1080 has Date _of_proc more than a year apart so i want to keep this MRN.
Thanks
@Kyra wrote:
Hi,
Like for one MRN, if any of two Date _of_proc is less than a year apart i want to delete that MRN.
MRN 1029 has Date _of_proc which was less than a year apart so i want to delete 1029.
1080 has Date _of_proc more than a year apart so i want to keep this MRN.
Thanks
Next question: are your date values actual SAS date values with a SAS date format applied or are they character? If they are character the first step is to create an actual SAS date value so you can compare values.
Second: I think your definition of "more than a year apart" needs some expansion as when I look at the following I do not actually see a difference for exclusion/inclusion when compared with MRN=1080
1029 12/9/15
1029 1/9/17
two of the dates for 1029 are 11/9/15 and 12/9/15 which is within one year so i want to delete this MRN.
when i run the proc contents below is what comes up for my date variable
SAS Output
Date_of_proc | Num | 8 | DATE9. | DATE9. | Date_of_proc |
@Kyra wrote:
two of the dates for 1029 are 11/9/15 and 12/9/15 which is within one year so i want to delete this MRN.
when i run the proc contents below is what comes up for my date variable
SAS Output
Date_of_proc Num 8 DATE9. DATE9. Date_of_proc
So at least we have date value to work with.
So is your rule actually: if ANY two dates within the value of MRN are less than a year apart then delete the entire MRN.
Now is a "year" always 365 days or are you considering leap days in the interval determination?
if ANY two dates within the value of MRN are less than a year apart then delete the entire MRN- Yes this is correct.
A year is always 365 for me.
data have;
input MRN Date_of_proc :mmddyy10.;
format Date_of_proc mmddyy10.;
cards;
1029 11/9/15
1029 12/9/15
1029 1/9/17
1029 2/9/18
1050 12/5/17
1080 1/7/16
1080 2/5/18
;
proc sort data=have;
by mrn Date_of_proc;
run;
data want;
_f=.;
do until(last.mrn);
set have;
by mrn;
_temp_=dif(date_of_proc);
if first.mrn then call missing(_temp_);
if .<_temp_<365 then _f=1;
end;
do until(last.mrn);
set have;
by mrn;
if not _f then output;
end;
drop _:;
run;
Thank you very much . It worked.
@novinosrin: Good. I think you can save three lines with
if .<dif(date_of_proc)<365 & ~first.mrn then _f=1;
@Kyra Improving upon @FreelanceReinh sir's neat suggestion 🙂
data want;
do until(last.mrn);
set have;
by mrn;
if not first.mrn and .<dif(Date_of_proc)<365 then _f=1;
end;
do until(last.mrn);
set have;
by mrn;
if not _f then output;
end;
drop _:;
run;
Thank you very much for these codes. But the previous codes were also correct, Right?
Yes indeed it is correct. But we learn from guru 's like @FreelanceReinh , @ballardw to further speed up learning and optimise processes.
I am privileged to get such selfless mentors
And hey, Don't worry or dwell too much. Perfectionists are a blessing, if and when you become a regular here, you would get those too. 🙂 I get them in many threads
PS
Idea is to get those champs interested in getting to see what we have done. That in itself is a privilege.
Thank you very much. I have just started to work on SAS so wanted to make sure i used correct codes. This forum is an asset to beginners like me.
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!
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.
Ready to level-up your skills? Choose your own adventure.