如何将格式混乱的字符型日期转换为SAS日期格式?
解决SAS混乱字符日期转换为标准日期的方法
针对你提供的格式混乱的字符型日期数据,可通过字符清理+日期转换两步完成标准化,以下是可行的SAS实现方案:
/* 修正原始数据集定义:将date设为字符型存储原始日期 */ data DB; length date $30; input date $; cards; 2014-11- 24 00:00:00 2018-04-17 00:00:00 2019/01/02 00:00:00.0 2014 -10-13 00:00:00 2019/10/25 00:00:00.0 ;run; /* 转换为标准SAS日期数据集 */ data DB1; set DB; /* 第一步:清理混乱的字符日期 */ cleaned_date = prxchange('s/[^0-9\/-]//g', -1, date); /* 移除时间后缀、多余符号 */ cleaned_date = prxchange('s/\s+//g', -1, cleaned_date); /* 移除所有空格 */ cleaned_date = translate(cleaned_date, '-', '/'); /* 统一分隔符为'-' */ /* 第二步:转换为SAS日期值并设置显示格式 */ sas_date = input(cleaned_date, yymmdd10.); format sas_date date9.; drop date cleaned_date; run; /* 查看转换结果 */ proc print data=DB1; run;
代码说明
- 原始数据集修正:原代码默认将
date读为数值型,这里改为字符型定义,确保完整保留原始日期的格式信息。 - 字符清理步骤:
- 用正则表达式移除时间后缀(如
00:00:00、.0)及非日期相关符号; - 清除所有多余空格(包括日期中间的空格,如
2014 -10-13中的空格); - 将
/替换为-,让日期格式统一为YYYY-MM-DD。
- 用正则表达式移除时间后缀(如
- 日期转换:通过
input()函数将清理后的字符日期转为SAS日期值,再用date9.格式设置为DDMONYYYY的显示样式。
简化方案(利用SAS自动识别格式)
如果你的SAS版本支持,可直接用anydtdte.格式快速处理,它能自动识别多种日期格式:
data DB1; set DB; sas_date = input(compress(date, , 'kd'), anydtdte30.); /* 保留数字和分隔符,移除其他字符 */ format sas_date date9.; drop date; run;
内容的提问来源于stack exchange,提问作者NewUsr_stat
相关产品推荐
相关产品推荐

