使用 Proc SQL 和 Case 语句时出错
Error when using Proc SQL and Case-statement
我正在尝试使用 Proc SQL 和案例语句来测试条件并添加索引。但是,我无法使 case
-where
语句起作用,即使语法似乎与我见过的示例相符。使用下面的代码我得到以下错误:
ERROR 22-322: Syntax error, expecting one of the following: a name, a quoted string, a numeric constant, a datetime constant,
a missing value, (, +, -, 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;
从帮助中可以看出,我的说法与示例相符。这可能很容易解决,我也有一个小疏忽,但我无法让它工作(例如,我尝试匹配单个字符串以查看对单独 table 的引用是否是问题所在,例如...Contains UPCASE("Teststring")
.....
有什么建议吗?
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;
注意:我用 FIND
函数替换了您对 CONTAINS
的调用,因为 this SAS reference 提到 CONTAINS
仅在 WHERE
子句中可用.
顺便说一下,您可能打算向表一和表二添加连接条件。目前,您正在它们之间进行开放式交叉连接。但希望我的查询能够解决您的 CASE
表达式中的错误。
我正在尝试使用 Proc SQL 和案例语句来测试条件并添加索引。但是,我无法使 case
-where
语句起作用,即使语法似乎与我见过的示例相符。使用下面的代码我得到以下错误:
ERROR 22-322: Syntax error, expecting one of the following: a name, a quoted string, a numeric constant, a datetime constant, a missing value, (, +, -, 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;
从帮助中可以看出,我的说法与示例相符。这可能很容易解决,我也有一个小疏忽,但我无法让它工作(例如,我尝试匹配单个字符串以查看对单独 table 的引用是否是问题所在,例如...Contains UPCASE("Teststring")
.....
有什么建议吗?
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;
注意:我用 FIND
函数替换了您对 CONTAINS
的调用,因为 this SAS reference 提到 CONTAINS
仅在 WHERE
子句中可用.
顺便说一下,您可能打算向表一和表二添加连接条件。目前,您正在它们之间进行开放式交叉连接。但希望我的查询能够解决您的 CASE
表达式中的错误。