Sas 使用Proc SQL和Case语句时出错

Sas 使用Proc SQL和Case语句时出错,sas,proc-sql,Sas,Proc Sql,我尝试使用procsql和case语句来测试条件并添加索引。但是,我无法使case-where语句起作用,即使语法似乎与我看到的示例相匹配。使用下面的代码,我得到以下错误: 错误22-322:语法错误,应为以下内容之一:名称、带引号的字符串、数字常量、日期时间常量, 缺少的值,(,+,-,BTRIM,computed,CASE,EXISTS,INPUT,NOT,PUT,SELECT,SUBSTRING,TRANSLATE,USER,WHEN, ^,~ 从“帮助”中可以看到,我的语句与示例相匹配。

我尝试使用procsql和case语句来测试条件并添加索引。但是,我无法使
case
-
where
语句起作用,即使语法似乎与我看到的示例相匹配。使用下面的代码,我得到以下错误:

错误22-322:语法错误,应为以下内容之一:名称、带引号的字符串、数字常量、日期时间常量, 缺少的值,(,+,-,BTRIM,computed,CASE,EXISTS,INPUT,NOT,PUT,SELECT,SUBSTRING,TRANSLATE,USER,WHEN, ^,~

从“帮助”中可以看到,我的语句与示例相匹配。这可能很容易解决,我也有一点疏忽,但我无法让它正常工作(例如,我尝试匹配单个字符串,以查看对单独表的引用是否存在问题,例如……
包含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;
注意:我将对
CONTAINS
的调用替换为
FIND
函数,因为提到
CONTAINS
仅在
WHERE
子句中可用


顺便说一句,您可能打算向表1和表2添加连接条件。目前,您正在表1和表2之间进行开放式交叉连接。但希望我的查询能够解决您的
CASE
表达式中的错误。

Gah!我怎么能如此盲目,看不到示例在
时使用
(如您所说)而不是
where
。我之前在代码中使用了
where
,用于连接表时的类似匹配,这就是为什么在复制代码后我一直使用
where
。谢谢!我使用
Contains
的原因是传递一系列字符串(在t2中找到)来搜索in(t1.test),选择或索引记录(这也是我不加入的原因)。
Find
起作用,但在t2中单独搜索每个匹配项,结果表变为length(t1)*length(t2),并需要一些后期处理来删除重复项。不过感谢您的解决方案。我在您发布答案后直接投票,现在已接受
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;