我在SAS Enterprise Guide中使用以下查询来查找不同日期的不同offer_ids客户的计数:
PROC SQL;
CREATE TABLE test1 as
select offer_id,
(Count(DISTINCT (case when date between '2016-11-13' and '2016-12-27' then customer_id else 0 end))) as CUSTID
from test
group by offer_id
;QUIT;
错误:使用IN的表达式具有不同数据类型的组件 注意:这里,Offer_id是字符变量,而Custome_id是数字变量。
答案 0 :(得分:2)
错误很可能是通过将数字变量DATE
与字符串'2016-11-13'
进行比较而导致的。如果要在SAS中指定日期文字,则必须以DATE9格式指定日期,并在关闭引号后附加字母D
。
date BETWEEN '13NOV2016'd AND '27DEC2016'd
请注意,发布的代码中没有任何外部数据库的引用。但即使您的源表是tdlib.tdtable
而不是work.test
,在编写SAS代码时仍需要使用SAS语法。让Teradata引擎找出如何为您转换它。
答案 1 :(得分:0)
您不清楚这是在SAS还是Teradata上运行(通过传递)
我猜测SAS,在这种情况下,您在日期之后遗漏d
(例如'2016-11-13'd
)。如果没有这个,日期将被视为文本而不是格式化的数字
由于SAS将between
语句视为in
语句,因此错误语句略有误导。