SAS Enterprise Guide日期值语法错误求助:日期比较问题
SAS日期比较语法错误的解决方法
你的错误根源是SAS不识别裸写的01JAN2019作为日期值,必须使用SAS支持的日期常量格式或函数生成日期值,以下是几种正确实现方式:
方法1:使用SAS日期常量(最常用)
将日期用单引号包裹,后缀加D标识为日期常量,SAS会自动解析为对应的日期数值:
CASE WHEN t1.MIN_of_DATE_PARAM < '01JAN2019'D AND t1.MAX_of_DATE_PARAM < '01JAN2019'D THEN 'OLD CLIENT' END
方法2:使用MDY函数生成日期值
通过指定月、日、年参数生成日期,避免日期字符串格式的兼容性问题:
CASE WHEN t1.MIN_of_DATE_PARAM < MDY(1, 1, 2019) AND t1.MAX_of_DATE_PARAM < MDY(1, 1, 2019) THEN 'OLD CLIENT' END
MDY(月, 日, 年)函数会返回对应日期的SAS数值型日期值。
方法3:使用INPUT函数转换字符生成日期
如果需要用特定格式的字符串生成日期,可结合INPUT函数和对应格式:
CASE WHEN t1.MIN_of_DATE_PARAM < INPUT('2019-01-01', YYMMDD10.) AND t1.MAX_of_DATE_PARAM < INPUT('2019-01-01', YYMMDD10.) THEN 'OLD CLIENT' END
这里YYMMDD10.对应YYYY-MM-DD格式的输入,可根据实际需求替换为DATE9.(对应DDMMMYYYY)等格式。
额外注意
如果你的MIN_of_DATE_PARAM和MAX_of_DATE_PARAM是字符型字段(而非数值型日期),需要先将字段转换为日期值再比较:
CASE WHEN INPUT(t1.MIN_of_DATE_PARAM, DATE9.) < '01JAN2019'D AND INPUT(t1.MAX_of_DATE_PARAM, DATE9.) < '01JAN2019'D THEN 'OLD CLIENT' END
DATE9.需匹配字符字段的实际格式,比如字段是20190101则用YYMMDD8.。
内容的提问来源于stack exchange,提问作者AG Dew
相关产品推荐
相关产品推荐

