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
It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.
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.