I am trying to find the closest date (date1-date680 date9.) to GFR_date (date9.) for each person (ID).
I tried the code below, which would work if GFR_date was a date constant (https://blogs.sas.com/content/sgf/2014/11/21/sas-arrays-be-not-afraid/) but in my case GFR_date is different for each person.
data results (keep = ID closest diff GFR_date);
format ID 3. date1-date680 closest date9.;
set egfr;
array date[*] date1-date680;
closest = date[1];
diff = abs(date[1] - GFR_date);
do i = 2 to dim(date);
if abs(date[i] - GFR_date) < diff then do;
closest = date[i];
diff = abs(date[i] - GFR_date);
end;
end;
run;
Any help would be much appreciated. Thanks!
Probably the data is wrong, and some of the date variables have missing values. This statement needs to change:
if abs(date[i] - GFR_date) < diff then do;
If one of the dates is missing, this generates a missing value which is certainly less than DIFF. So the final DIFF value would be missing.
Try this instead:
if . < abs(date[i] - GFR_date) < diff then do;
It should work just as well. What problem did you encounter?
Probably the data is wrong, and some of the date variables have missing values. This statement needs to change:
if abs(date[i] - GFR_date) < diff then do;
If one of the dates is missing, this generates a missing value which is certainly less than DIFF. So the final DIFF value would be missing.
Try this instead:
if . < abs(date[i] - GFR_date) < diff then do;
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9.
Early bird rate extended! Save $200 when you sign up by March 31.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.