使用 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 表达式中的错误。