过滤日期的公式

问题描述 投票:0回答:2

我在使用SAS中的PROc SQL时选择日期的公式存在问题。我做错了什么?谢谢你们。此致,杰夫

我用这个编码器:

FROM
  VTXBUSS.s
WHERE
  t1.ifrs_stage_date_at_start IS ’ 31DEC2017% ’
ORDER BY
  t1.customer_id,

我收到语法错误。日期格式为:31DEC2017:00:00:00.000000

SAS给出了日志:

错误:值'''n不是有效的SAS名称。警告:宏的'明显调用'未解决。 45 WHERE1.ifrs_stage_at_start NOT = t1.ifrs_stage_PROV AND t1.ifrs_stage_date_at_start ='31DEC2017%',_ 76 ERROR 22-322:语法错误,期望以下之一:;,!,!!,&,(,*,* *,+, - ,'。',/,<,<=,<>,=,>,> =,AND,EQ,EQT,EXCEPT,GE,GET,GROUP,GT,GTT,HAVING,INTERSECT,LE ,LET,LT,LTT,NE,NET,NOT,OR,ORDER,OUTER,UNION,^,^ =,|,||,〜,〜=。

sas proc
2个回答
0
投票

试试这个:

FROM
  VTXBUSS.s
WHERE
  t1.ifrs_stage_date_at_start = '31DEC2017'd
ORDER BY
  t1.customer_id,

如果您正在寻找特定的“日期时间”,那么您应该使用,例如:

FROM
  VTXBUSS.s
WHERE
  t1.ifrs_stage_date_at_start = '31DEC2017:00:00:00.000000'dt
ORDER BY
  t1.customer_id,

这是因为,在处理PROC SQL中的日期时,您必须指定您要查找的数据类型;如果DATE则为“d”,如果是DATETIME则为“dt”


0
投票

如果要按DATETIME值表示过滤DATETIME值,可以将值转换为DATE值。

WHERE datepart(t1.ifrs_stage_date_at_start) = '31DEC2017’d

或转换为特定的DATETIME值

WHERE intnx('dtday',t1.ifrs_stage_date_at_start,0) = '31DEC2017:00:00’dt 

使用一系列DATETIME值

WHERE t1.ifrs_stage_date_at_start between '31DEC2017:00:00’dt and '01JAN2018:00:00’dt

或者可能转换为字符串

WHERE put(t1.ifrs_stage_date_at_start,datetime20.-L) like '31DEC2017:%'
© www.soinside.com 2019 - 2024. All rights reserved.