我试图在proc SQL中使用SAS中的一些SQL代码。 SQL Server中的原始代码具有良好的功能。
case
when entry_stamp between '2011-10-29 21:00:00.000' and '2011-11-06 02:00:00.000'
then dateadd(hour, 5, cast(convert (char(16), entry_stamp, 121) as datetime))
... ... else dateadd(小时,6,强制转换(转换(char(16),entry_stamp,121)为datetime))end,
我在121的括号中出现语法错误。谷歌的一些搜索表明proc SQL中不支持dateadd?
感谢。
错误22-322:语法错误,期望以下之一:!,!!,&,,* ,+, - ,/,<,< =,< >,=,>,> =,?,AND,BETWEEN, CONTAINS,ELSE,END,EQ,EQT,GE,GET,GT,GTT,IN,IS,LE,LET,LIKE,LT,LTT,NE,NET,NOT,NOTIN,OR,WHEN,^,^ =, |,||,〜,〜=。
答案 0 :(得分:2)
SAS中的PROC SQL符合ANSI标准,这就是您遇到DATEADD问题的原因。
如果您没有通过查询(例如,您正在处理SAS数据集),则可以使用INTNX功能。
当您尝试增加小时数时,您需要以下内容:
format hours datetime20.;
hours=intnx('hour', '01FEB2010:00:00:00'dt, 1, 'same');
结果将是:
小时= 01FEB2010:01:00:00(下一小时)
答案 1 :(得分:0)
data _null_;
/* The following statement creates expected results. */
date1=intnx('dtday','01aug11:00:10:48'dt,1);
/* The following two statements create unexpected results. */
date2=intnx('dtday','01aug11'd,1);
date3=intnx('dtday','01aug11:00:10:48'd,1);
put 'Correct Datetime Value ' date1= datetime19. /
'Incorrect Datetime Value ' date2= datetime19. /
'Incorrect Datetime Value ' date3= datetime19.;
run;
SAS writes the following output to the log:
Correct Datetime Value date1=02AUG2011:00:00:00
Incorrect Datetime Value date2=02JAN1960:00:00:00
Incorrect Datetime Value date3=02JAN1960:00:00:00
To ensure correct results with interval functions, use date intervals with date values
and datetime intervals with datetime values.
SAS does not return an error message if you use a date value with a datetime interval,
but the results are incorrect.