SAS筛选日期范围数据报错Invalid date constant解决求助
问题解决办法
报错核心原因
- SAS默认无法识别
"YYYY-MM-DD"d格式的日期常量,直接书写该格式会触发无效日期常量报错 - 源表中
doi字段可能为字符类型,无法直接和日期类型常量做比较
前置检查
先运行以下代码查看doi字段类型:
proc contents data=sasdata.have; run;
查看输出结果中doi对应的Type值:1为数值型日期变量,2为字符型变量。
对应解决方案
情况1:doi为数值型日期变量
方案1:修改日期常量为SAS默认识别格式
SAS默认支持ddmmmyyyy格式的日期常量,代码修改如下:
data want; set sasdata.have; if '01JAN2020'd <= doi <= '29MAR2020'd; * 如需保持doi显示为YYYY-MM-DD格式,可取消注释下一行; * format doi yymmdd10.; run;
方案2:手动转换日期字符串为日期值
不需要调整日期写法,适配度更高,不受系统选项影响:
data want; set sasdata.have; if input("2020-01-01", yymmdd10.) <= doi <= input("2020-03-29", yymmdd10.); run;
情况2:doi为字符型变量
先将doi转换为数值型日期再做比较:
data want; set sasdata.have; if input(doi, yymmdd10.) between input("2020-01-01", yymmdd10.) and input("2020-03-29", yymmdd10.); run;
内容的提问来源于stack exchange,提问作者keherder
相关产品推荐
相关产品推荐

