在 Proc SQL/SAS 中减去日期

Subtracting dates in Proc SQL/SAS

我在 SAS Enterprise Guide 中有一个 Proc SQL 代码块 运行。我需要找到两个日期之间的天数

proc sql;
select col_A,col_B,col_C, (put (date(),yymmdd10.) - col_C) as age_bucket
from DB2.Table_A;
quit;

col_C 是 'YYYY-MM-DD' 格式的日期(例如 2022-05-02) 我从今天的日期中减去 col_C,并希望得到它们之间的总天数 age_bucket。我收到以下错误。

ERROR: Expression using subtraction (-) requires numeric types.

我该怎么做? Table_A 来自 DB2 数据库。

我认为 DB2 支持 DAYS_BETWEEN() 函数,它会为您提供两个日期参数之间的天数。 https://www.db2tutorial.com/db2-date-functions/

使用PUT()函数将当前日期转换为字符串,将无法对结果进行运算。

如果 COL_C 有 DATE 值,则该值的显示方式无关紧要(格式只会影响值的显示方式)。 DATE 值就是自 1960 年以来的天数。您只需将两个数字相减即可计算出天数差。

 (date() - col_C) as age_bucket

如果 COL_C 有 DATETIME 值(自 1960 年以来的秒数),则首先将其转换为 DATE 值。

 (date() - datepart(col_C)) as age_bucket

如果 COL_C 是 YYYY-MM-DD 样式的字符串,则使用带有 YYMMDD 信息的 INPUT() 函数将字符串转换为日期值。

 (date() - input(col_C,yymmdd10.)) as age_bucket

使用 YRDIF 函数获取年龄。减去日期将得到您的年龄天数。

两个日期都应该是 SAS 日期,日期格式为数字。

proc sql;
select col_A, 
       col_B, 
       col_C,  
       floor(YRDIF(input(col_C, yymmdd10.), today(),"AGE"))  as age_bucket
from DB2.Table_A;
quit;