2016-05-25 15 views
2

前回チェックしたとき、これはAccessでも処理できる完全に正当なSQLコードです。必ず、なぜ私はエラー SAS PROC内部結合によるSQL更新

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; 

SAS

から次のエラーを取得していないです:

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. 

私は本当にこれであなたの助けに感謝!

+0

重複するhttp://stackoverflow.com/questions/24629793/update-with-a-proc-sql –

答えて

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 
       ) ; 

データステップを使用するとコードが簡単になる場合があります。

+0

構文エラーが表示されます。 SASは、fu_codingとCHANGEDの間の期間に下線を引いています。それは、 "=" – blacksaibot

+0

@blacksaibotを期待していると言います。 。 。そのテーブルエイリアスは必要ありません。 –

0

SASは、SQLプロシージャ内の内部結合による更新をサポートしていません。可能であれば、@ Gordonの提案に従って書き直すか、pass throughを使用してください。