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
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
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.