Quartz | Level 8

## Array to find closest data

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!

1 ACCEPTED SOLUTION

Accepted Solutions
PROC Star

## Re: Array to find closest data

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.

``if . < abs(date[i] - GFR_date) < diff then do;``
2 REPLIES 2
Opal | Level 21

## Re: Array to find closest data

It should work just as well. What problem did you encounter?

PG
PROC Star

## Re: Array to find closest data

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.

``if . < abs(date[i] - GFR_date) < diff then do;``