VSAMファイル(KSDS)の更新方法

[OS]MVS
[リリース] 5.18, 6.07, 6.08, 6.09E
[キーワード] base, datastep, vsam, ksds, infile, file, put, feedback, key=

[質問]

VSAMファイル(KSDS)にレコードを追加、変更、削除するには、DATAステップをどのようにコーディングすればよいでしょうか。

[回答]

レコードの追加処理について説明します。更新しようとするレコード情報は事前にSASデータセットとして作成してください。
追加処理はFILEステートメントとPUTステートメントで指定します。特にINFILEステートメントのFEEDBACKオプションに注意してください。
この例では、CODEの値が000030のレコードをVSAMファイルに追加するとエラー(重複レコード)になり、RCには8が入ります。

  data update;
    input @1 code $char6. @10 name $char15.
          @25 sex $1. @27 birth nengo7. @35 busho $char3.;
    cards;
  ....*....1....*....2....*....3....*....4....*....5..
  000030   SAKURADA YOUKO F S251115 D50
  000040   TAHARA YOSHI   M S261115 D50
  000050   YAMAZAKI HIROMIF S271115 D50
  ;
  run;
  data _null_;
    set update;
    infile in vsam key=code feedback=rc;
    file in vsam;
    put @1 code $char6. @10 name $char15.
        @25 sex $1. @27 birth nengo7. @35 busho $char3.;
    if rc=8 then do;
      _error_=0;
      rc=0;
      file log;
      put 'ERROR: KEY=' CODE ' のレコードは既に存在しています。';
      return;
    end;
  run;

(更新後のVSAMファイルの内容)

  ....*....1....*....2....*....3....*....4....*....5..
  000010   YAMADA ICHIRO  M S380814 A00
  000020   SAKAI KEIKO    F S440304 A10
  000030   YAMAMOTO SAN   M S410511 B00
  000040   TAHARA YOSHI   M S261115 D50
  000050   YAMAZAKI HIROMIF S271115 D50

変更、削除はINFILEステートメントのFEEDBACKオプションをもとに対応してください。

  4  : VSAMファイルの終了レコードになったかあるいは実際に存在するキーより大きい
       値を指定した。
  8  : 該当のレコードは既に存在する。
  12 : レコードキーは範囲外である。
  16 : 該当のレコードは存在しない。

[参考]

  • 「SAS Guide to VSAM Processing, Version 6, First Edition」(注文番号 56042)