SAS:将$5.格式字符型日期转换为MMDDYY10.格式数值型日期
解决方法
问题核心:直接给字符型变量应用日期格式无效,因为SAS的日期格式仅适用于数值型的SAS日期变量(即存储从1960年1月1日起的天数的数值)。你的字符值44106本身就是SAS日期的数值形式,只需两步转换:
步骤1:将字符型天数转换为数值型SAS日期
使用input()函数把字符型变量转成数值,得到SAS日期值:
data want; set have; /* char_date是你的原字符型日期变量 */ date_value = input(char_date, 5.); run;
步骤2:应用目标日期格式
情况1:使用默认斜杠分隔的MMDDYY10.格式
直接给数值变量指定格式,会显示为02/10/2020:
data want; set have; date_value = input(char_date, 5.); format date_value mmddyy10.; run;
情况2:使用点分隔的MM.DD.YYYY格式(匹配你的示例02.10.2020)
SAS默认的MMDDYY10.是斜杠分隔,需要自定义格式实现点分隔:
/* 先定义自定义日期格式 */ proc format; picture my_mmddyy (default=10) low-high = '%0m.%0d.%Y' (datatype=date); run; /* 转换并应用自定义格式 */ data want; set have; date_value = input(char_date, 5.); format date_value my_mmddyy.; run;
关键说明
- 字符型变量无法直接应用日期格式,必须先转为数值型SAS日期值
input(char_date, 5.)的作用是把字符形式的天数(如'44106')转换为数值44106,这个数值对应的就是2020年2月10日(1960-01-01加上44106天)
内容的提问来源于stack exchange,提问作者ng510
相关产品推荐
相关产品推荐

