如何在SAS中将字符型日期22249转换为数值型30NOV2020?
解决SAS字符型日期值转数值型日期的问题
首先纠正报错根源:$date9.是字符格式,仅适用于字符变量,而数值型日期变量需使用不带$的date9.格式,这就是你报错的原因。
针对你的需求(字符型变量'22249'转数值型日期,对应显示为30NOV2020),提供两种正确处理方式:
方法1:直接转换字符型SAS日期值为数值型日期
SAS日期本质是从1960-01-01起的累计天数,你的字符22249就是该天数的字符形式,用input()函数转成数值后,再用date9.格式格式化即可:
data want; char_date = '22249'; /* 你的字符型日期变量 */ num_date = input(char_date, 5.); /* 将字符天数转为数值型SAS日期值 */ format num_date date9.; /* 用date9.格式显示数值日期 */ run;
运行后num_date为数值型变量,显示结果为30NOV2020。
方法2:先转字符日期再转数值(适用于需要中间字符日期的场景)
若需先得到字符型的'30NOV2020'再转数值型日期,可按以下逻辑编写:
data want; char_date = '22249'; char_date_str = put(input(char_date, 5.), date9.); /* 先转数值再生成字符日期 */ num_date = input(char_date_str, date9.); /* 将字符日期转为数值型日期 */ format num_date date9.; run;
常见误区提醒
- 格式名带
$的是字符格式,仅用于字符变量;数值日期变量使用不带$的日期格式(如date9.、mmddyy10.等)。 input()函数用于字符转数值,put()函数用于数值转字符,二者不要混淆。
内容的提问来源于stack exchange,提问作者NewUsr
相关产品推荐
相关产品推荐

