如何通过SAS PROC SQL添加今日日期列?解决字符列赋值日期函数报错问题并实现账户存续天数计算
解决SAS中日期类型不匹配错误并计算账户存续天数
首先咱们先拆解你遇到的问题:你把today_date定义成了字符型(char),但today()函数返回的是SAS的数值型日期(本质是从1960年1月1日起算的天数),字符列只能接受字符表达式赋值,这就触发了类型不匹配的报错。
一、修正今日日期列的添加与赋值
如果确实需要在数据集中保留字符型的今日日期列,你需要用put()函数把数值型日期转换成字符型,匹配你设定的$8.格式。比如用yymmddn8.格式(输出形如20240520),代码修改如下:
proc sql; alter table data1 add today_date char label= "Today's Date" format = $8.; update data1 set today_date= put(today(), yymmddn8.); quit;
你也可以换成其他适配$8.长度的日期格式,比如mmddyy8.(输出形如05/20/24),只要格式长度和字符列定义一致即可。
二、直接计算账户存续天数(你的核心需求)
其实你完全不需要单独添加今日日期列,就能直接计算账户存续天数。因为SAS的日期本质是数值类型,直接用今日日期减去账户开立日期(假设开立日期列是open_date,且为SAS标准日期格式),差值就是存续天数。
方法1:用PROC SQL添加存续天数列
proc sql; alter table data1 add tenure_days num label="Tenure in Days"; update data1 set tenure_days= today() - open_date; quit;
如果你的open_date是字符型日期,需要先用input()函数转换成数值型日期,再计算:
proc sql; alter table data1 add tenure_days num label="Tenure in Days"; update data1 set tenure_days= today() - input(open_date, yymmdd10.); quit;
注意这里的yymmdd10.要和open_date的字符格式对应,比如如果日期是05/20/2020格式,就换成mmddyy10.。
方法2:用DATA步处理(大数据集更高效)
如果你的数据集规模较大,DATA步的处理效率通常比PROC SQL的UPDATE更高:
data data1; set data1; tenure_days = today() - open_date; /* 若open_date是字符型,先转换: tenure_days = today() - input(open_date, yymmdd10.); */ label tenure_days = "Tenure in Days"; run;
这样就能直接得到你需要的账户存续天数啦。
内容的提问来源于stack exchange,提问作者Dina Dina
相关产品推荐
相关产品推荐

