Hi there, I am interested in modifying my dataset in a way that I believe needs a RETAIN function. But it is not yielding what I want. I have a series of observations that represent a doctor visit. One of the variables is a patient ID number (patient_ID). If the same patient ID number occurs under multiple observations, then the same person has had multiple visits to the doctor. There is also a variable that identifies the date the visit occured(date). There is a 3rd variable that indicates if the visit was a 5:30 or after visit(evening),a (1,0) variable where 1 indicates a visit at or after 5:30. I've sorted the observations by ascending patient ID number and then ascending visit date. I am interested only in the visit that occurs after 5:30, and any visits for that patient thereafter. So if the first two visits occur at 3:00 and 4:00, and the 3rd 4th and 5th at 5:45, 2:00, 12:00 respectably, I am only interested in the 3rd 4th and 5th visits.I want to "mark" these visits by creating a new variable that =1 for these observations (=0 for the non-relevant observations). I'm thinking a RETAIN function is the way to go, but doesn't seem to be working: data new; set old; by patient_id date; retain indicator; if first.patient_id and evening=1 then do; indicator = 1 ; end; else if evening = 1 then do; indicator2=1; end; run; I would think this code would carry down, or RETAIN, the 1 to the next data line. Instead, it seems to reset to 0. The only observations in where indicator=1 are those observations where the evening=1, even though all those subsequent visits for that patient should be marked as 1.... Hope it is clear, let me know if it ain't! TM Hi there, I am interested in modifying my dataset in a way that I believe needs a RETAIN function. But it is not yielding what I want. I have a series of observations that represent a doctor visit. One of the variables is a patient ID number (patient_ID). If the same patient ID number occurs under multiple observations, then the same person has had multiple visits to the doctor. There is also a variable that identifies the date the visit occured(date). There is a 3rd variable that indicates if the visit was a 5:30 or after visit(evening),a (1,0) variable where 1 indicates a visit at or after 5:30. I've sorted the observations by ascending patient ID number and then ascending visit date. I am interested only in the visit that occurs after 5:30, and any visits for that patient thereafter. So if the first two visits occur at 3:00 and 4:00, and the 3rd 4th and 5th at 5:45, 2:00, 12:00 respectably, I am only interested in the 3rd 4th and 5th visits. I want to "mark" these visits by creating a new variable that =1 for these observations (=0 for the non-relevant observations). I'm thinking a RETAIN function is the way to go, but doesn't seem to be working: data new; set old; by patient_id date; retain indicator; if first.patient_id and evening=1 then do; indicator = 1 ; end; else if evening = 1 then do; indicator2=1; end; run; I would think this code would carry down, or RETAIN, the 1 to the next data line. Instead, it seems to reset to 0. The only observations in where indicator=1 are those observations where the evening=1, even though all those subsequent visits for that patient should be marked as 1.... Hope it is clear, let me know if it ain't! TM
... View more