使用内部联接的SAS PROC SQL更新

时间:2016-05-25 16:18:54

标签: sql sas proc-sql

上次我检查过,这是完全合法的SQL代码,甚至Access都可以处理。不知道为什么我从SAS

收到以下错误
UPDATE fu_coding 
INNER JOIN old_form16 
    ON fu_coding.CSPCCID = old_form16.CSPCCID 
SET fu_coding.CHANGED = 1
WHERE fu_coding.NEW_DIAG <> old_form16.NEW_DIAG;

错误是:

18311      INNER JOIN old_form16
           -----
       22
       76
ERROR 22-322: Syntax error, expecting one of the following: a name, (, '.', AS, SET.
ERROR 76-322: Syntax error, statement will be ignored.

我真的很感谢你对此的帮助!

2 个答案:

答案 0 :(得分:3)

我认为proc sql不支持使用内部联接进行更新。你可以这样做:

UPDATE fu_coding 
    SET CHANGED = (SELECT 1
                   FROM old_form16
                   WHERE fu_coding.CSPCCID = old_form16.CSPCCID AND
                         fu_coding.NEW_DIAG <> old_form16.NEW_DIAG
                  )
    WHERE EXISTS (SELECT 1
                   FROM old_form16
                   WHERE fu_coding.CSPCCID = old_form16.CSPCCID AND
                         fu_coding.NEW_DIAG <> old_form16.NEW_DIAG
                  ) ;

使用数据步骤可能更简单。

答案 1 :(得分:0)

SAS不支持在SQL过程中使用内部联接进行更新。要么重写(根据@ Gordon的建议),要么尽可能使用pass through