如何在SAS Enterprise Guide 8.2中用CASE WHEN创建DATE9.类型日期列?
问题解决:SAS中CASE WHEN创建日期列报错修正
错误原因
你代码里的两个问题触发了报错:
- CASE分支返回的
'01AUG2020'是字符型字符串,但你给新列col3指定了date9.日期格式,SAS不允许给字符型变量应用日期格式,因此抛出ERROR: Character expression requires a character format.。 - 两个WHEN条件完全重复(均为
col2 between '01SEP2019'd and '15SEP2019'd),第二个分支永远不会被执行,逻辑无效。
修正步骤
- 给CASE分支里的日期值加上
'd'后缀,转为SAS日期常量(SAS日期本质是数值,代表从1960年1月1日起的天数)。 - 修正重复的WHEN条件,确保逻辑合理。
- 保留
format = date9.来指定日期的显示格式。
修正后的代码
proc sql; select col1 , case when (col2 between '01SEP2019'd and '15SEP2019'd) then '01AUG2020'd when (col2 between '16SEP2019'd and '30SEP2019'd) then '01OCT2020'd end as col3 format = date9. from my_table; quit;
说明
修改后,CASE语句返回的是SAS日期数值,搭配date9.格式会自动显示为DDMMMYYYY样式的日期,且新列col3的数据类型为日期型(数值型的一种),符合需求。
内容的提问来源于stack exchange,提问作者dingaro
相关产品推荐
相关产品推荐

