Hello all, I am working with clinical patient data for 375 infants. Each infant has multiple rows representing different medical visits in which certain measurements were taken (i.e. height and weight), each person has a different number of rows (total data set rows is about 17,000). Every patient has a unique ID, however these are not consecutive values, they are medical record numbers. I have sorted the data first by this patient id, then by the date of patient visit. I need to extract the values from measurement fields when a patient's age is equal to 36 weeks, but because of the nature of this data many patients do not have a measurement taken at the precise time point I want, so I then need to extract the measurement from the visit when their age was closest to the desired age. I am attempting to use a DO Loop to test the age variable for closeness to 36 weeks and then extract the values, but it is not working. My goal in the below code is to compare age_in_weeks for each patient to 36 weeks, if the age is precisely equal to that value then I want the weight at that visit to be the value for a new variable weight_36_wks. If the age is NOT 36 weeks, I want to compare the age to +/- 1 week. If that age is still not captured I want the age_in_week_counter to accumulate by 1 and then do the comparison again. When I run the code the accumulation piece does not seem to be working, does it matter that my index variables are not consecutive values? The counter adds one and then never adds again. data test;
set metrics;
age_in_wk_counter = 1;
DO i = patient_id;
DO j = age_in_wks;
IF j = 36 then weight_36_wks = wt_grams;
ELSE IF j + age_in_wk_counter = 36 then weight_36_wks = wt_grams;
ELSE IF j - age_in_wk_counter = 36 then weight_36_wks = wt_grams;
ELSE weight_36_wks = .
age_in_wk_counter +1;
output;
end;
end;
run;
... View more