使用TIME构建CASE语句时SAS代码报错,请求修复方案
修复SAS PROC SQL中的时间常量语法错误
嘿,这问题我太熟悉了!你遇到的ERROR 22-322和ERROR 76-322,根源是SAS时间常量的写法不对——SAS没办法直接识别9:00:00这种裸写的时间格式,得用它专属的时间常量语法。
错误原因解析
在SAS里,要表示一个时间值(比如9点整),必须把时间字符串用单引号包裹,再加上T后缀,形成'09:00:00'T这样的时间常量。你直接写9:00:00,SAS会误以为这是数学运算(9除以0再除以0,这显然不合逻辑),所以触发了语法错误。
修复后的代码
把所有裸写的时间改成SAS时间常量格式就行:
PROC SQL; CREATE TABLE SUCCESS_TIME_INTERVALS AS SELECT A.*, CASE WHEN A.TIME BETWEEN '09:00:00'T AND '11:00:00'T THEN '9AM_11AM' WHEN A.TIME BETWEEN '11:00:00'T AND '13:00:00'T THEN '11AM_1PM' ELSE 'OTHER' END AS TIME_INTERVALS FROM TABLE1 A ; QUIT;
额外注意事项
如果你的TIME变量是字符类型(不是SAS标准的数值型时间值,数值型时间存储的是从午夜开始的秒数),那得先把它转换成时间格式再做比较,比如:
WHEN INPUT(A.TIME, TIME8.) BETWEEN '09:00:00'T AND '11:00:00'T THEN '9AM_11AM'
内容的提问来源于stack exchange,提问作者Dawn685
相关产品推荐
相关产品推荐

