我正在尝试使用Proc SQL和case语句来测试条件并添加索引。但是,即使语法似乎与我看到的示例相匹配,我也无法使case
- where
语句生效。使用下面的代码我收到以下错误:
ERROR 22-322:语法错误,期望以下之一:名称,带引号的字符串,数字常量,日期时间常量, 缺失值,(,+, - ,BTRIM,CALCULATED,CASE,EXISTS,INPUT,NOT,PUT,SELECT,SUBSTRING,TRANSLATE,USER,WHEN, ^,〜。
Proc SQL;
Create table table_ix AS
Select t1.*,
Case
Where UPCASE(t2.test) Contains UPCASE(TRIM(t2.key)) Then 1
Else 0
end as index
From Table1 AS t1, Table2 AS t2;
QUIT;
从帮助中可以看到,我的陈述与示例匹配。这可能很容易解决,而且我可能会忽略一些,但是我无法让它工作(例如,我尝试匹配单个字符串以查看对单独表的引用是否是问题,例如...... Contains UPCASE("Teststring")
....
有什么建议吗?
答案 0 :(得分:3)
Proc-SQL遵循AFAIK的CASE
表达式的ANSI标准语法是CASE WHEN
,而不是CASE WHERE
。试试这个问题:
CREATE TABLE table_id AS
SELECT t1.*,
CASE WHEN FIND(t2.test, TRIM(t2.key), 'i') GE 1 THEN 1 ELSE 0 END AS index
FROM Table1 AS t1, Table2 AS t2;
注意:我已使用CONTAINS
函数将您的来电替换为FIND
,因为this SAS reference提到CONTAINS
仅在WHERE
子句中可用。< / p>
顺便说一下,您可能打算在表1和表2中添加连接条件。目前,您正在他们之间进行开放式交叉连接。但希望我的查询能够解决CASE
表达式中的错误。