SAS代码执行异常:DateFrom1列值为空且触发无效数值数据警告
问题排查与解决
问题原因
报错的核心是DateFrom是字符型变量,而DATEPART()函数仅能处理SAS的日期时间型(datetime)数值变量,无法直接解析字符串格式的日期时间值。当SAS尝试对字符变量执行DATEPART()时,会自动尝试将字符转为数值,失败后就会抛出"无效数值数据"的警告,最终生成空值(.)。
解决方法
需要先通过INPUT()函数将字符型的日期时间字符串转换为SAS日期时间数值,再用DATEPART()提取日期部分。修改后的代码如下:
Data A_DateFrom; set Agent_Hist; /* 先将字符型日期时间转为SAS datetime数值,匹配带毫秒的字符串格式 */ DateTime_From = input(DateFrom, E8601DT23.3); /* 提取日期部分 */ DateFrom1 = Datepart(DateTime_From); Format DateFrom1 date9.; /* 可选:合并为一行写法 */ /* DateFrom1 = Datepart(input(DateFrom, E8601DT23.3)); */ run;
E8601DT23.3是SAS中对应YYYY-MM-DD HH:MM:SS.sss格式的输入格式,完全匹配你的日期时间字符串结构;- 如果你的日期时间字符串没有毫秒(比如
2018-01-11 18:30:00),可以改用DATETIME19.格式替代E8601DT23.3。
内容的提问来源于stack exchange,提问作者Pallavi Singh
相关产品推荐
相关产品推荐

