SAS Proc SQL dateadd函数

时间:2014-09-25 10:22:33

标签: sql sas dateadd

我试图在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,^,^ =,               |,||,〜,〜=。

2 个答案:

答案 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.