VSAMファイル(KSDS)のアクセス方法

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

[質問]

SASからVSAMファイル(KSDS)にアクセスできますか。

[回答]

可能です。VSAMファイルを処理するには、まずSASシステムオプションで以下のいずれかを指定します。

  • VSAMREAD
  • VSAMUPDATE
  • VSAMLOAD

次に処理する外部ファイルがVSAMファイルであることを示すために、FILEステートメントまたはINFILEステートメントでVSAMオプションを指定します。
VSAM(KSDS) ファイルの検索と更新処理の例を紹介します。

●順次検索の場合

  options vsamread;
  data a;
    infile 'xxx.xxx.xxx' vsam;
    input @6 code $5. @11 name $20.;
  run;
  proc print data=a;
  run;

●キーによる直接検索の場合

  options vsamread;
  data keys;
    input keyval $5. @@;
    cards;
  00001 00002 00003
  ;
  data a;
    set keys;
    klen=5;           /* キーの長さをセット*/
    infile 'xxx.xxx.xxx' vsam key=keyval
           keylen=klen feedback=rc;
    input @6 code $5. @11 name $20.;
    if rc=16 then  put 'Not found' +2 keyval=;
  run;
  proc print data=a; run;

●データ追加の場合

  options vsamupdate;
  data keys;
    input keyval $5. @6 name $20.;
    cards;
  00001Taro Yamada
  00002Hanako Tanaka
  00003Ichiro Sato
  ;
  data _null_;
    set keys;
    infile 'xxx.xxx.xxx' vsam keypos=pos
           feedback=rc;
    input @pos code $5. @11 name $20.;
    file 'xxx.xxx.xxx' vsam;
    put @pos code $5. @11 name $20.;
    if rc=8 then do;
       file log;
       put 'Key Duplicate' +2 code=;
    end;
  run;
※新規ファイルにデータを追加する場合、INFILEステートメントは不要となります。

●データ更新の場合

  options vsamupdate;
  data _null_;
    keyval='00001';
    klen=5;
    infile 'xxx.xxx.xxx' vsam key=keyval
           keylen=klen keypos=pos
           feedback=rc;
    input @pos code $5. @11 name $20.;
    if rc=16 then do;
       file log;
       put 'Not found' +2 keyval=;
    end;
    else do;
      name='Jiro Sasaki';
      file 'xxx.xxx.xxx' vsam;
      put @pos keyval $5. @11 name $20.;
    end;
    stop;
  run;

[参考]

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