Hi. This is my data
dt_birth dt_death
4/21/1957 4/21/1967
4/21/1965
4/3/1976
I have to create a 3rd column called age. It should be dt_death - dt_birth if dt_death is present or otherwise it should be today's date- dt_death.
I am using the following procedure but it is giving syntax errors
proc sql ;
create table new as
select *, case Age
when dt_death is not null then int(yrdif(dt_birth,dt_death,'ACT/365')
else int(yrdif(dt_birth,date(),'ACT/365')
end
from old;
I think there is a problem here.
when dt_death is not null then
can you suggest any alternative methods?
Use COALESCE instead, but I suspect your error is related to missing parentheses and incorrect SQL code.
int(yrdif(dt_birth,date(),'ACT/365') -> You have 3 open and only 2 closing parentheses.
END - no variable name here?
int(yrdif(dt_birth, coalesce(dt_death, date()), 'ACT/365') as Age
If you want a CASE statement it would be something like:
case
when not missing(dt_death) then int(yrdif(dt_birth, dt_death, 'ACT/365'))
else int(yrdif(dt_birth, date(), 'ACT/365'))
end as AGE
Use COALESCE instead, but I suspect your error is related to missing parentheses and incorrect SQL code.
int(yrdif(dt_birth,date(),'ACT/365') -> You have 3 open and only 2 closing parentheses.
END - no variable name here?
int(yrdif(dt_birth, coalesce(dt_death, date()), 'ACT/365') as Age
If you want a CASE statement it would be something like:
case
when not missing(dt_death) then int(yrdif(dt_birth, dt_death, 'ACT/365'))
else int(yrdif(dt_birth, date(), 'ACT/365'))
end as AGE
Available on demand!
Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.
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.