使用Proc SQL和Case语句时出错

时间:2016-11-07 15:34:01

标签: sas proc-sql

我正在尝试使用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") ....
有什么建议吗?

1 个答案:

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