MODIFYステートメントを使用したSASデータセットの更新

[OS]ALL
[リリース] 6.07, 6.08, 6.09, 6.10, 6.12, 8.2
[キーワード] base, datastep, modify, option, key=, _iorc_, output

[質問]

DATAステップのMODIFYステートメントを使用して、SASデータセットを更新しようとしましたが、KEY=データセットオプション(インデックス変数)に指定した変数の値で、マスターのデータセットに無いものがトランザクションのデータセットにあると、以下のようなエラーが発生します。どうすればよいでしょうか。

ERROR: No matching observation was found in master data set.

[回答]

MODIFYステートメントでインデックスを使用して更新する場合は、基本的にトランザクションのキー変数の値はマスターに存在しているものでなければなりません。
ただし、自動変数 _IORC_ およびOUTPUTステートメントを使用することによって、そのようなオブザベーションをマスターデータセットに追加することができます。
以下にそのサンプルプログラムを示します。

data master(index=(a));
    input a b $;
    cards;
  1 m
  2 m
  3 m
  4 m
  ;
  run;
  data transact;
    input a c $;
    cards;
  1 t
  2 t
  3 t
  5 t
  ;
  run;
  data master;
    set transact;
    modify master key=a;
    select (_iorc_);
      when (%sysrc(_sok)) do;    /* キーがマッチする場合は更新 */
        b=c; replace;
      end;
      when (%sysrc(_dsenom)) do; /* キーがアンマッチの場合は追加 */
        _error_= 0; _iorc_= 0; b=c; output;
      end;
      otherwise do;              /* その他の場合はメッセージを出力 */
        put 'ERROR: IORC is' _iorc_; stop;
      end;
    end;
  run;
  proc print data=master; run;

[参考]

  • 「SASランゲージ: リファレンス, Version 6, First Edition」(注文番号 10067)