世代データセット管理を利用した、更新前データセットの保存方法

[OS]ALL
[リリース] 8.1, 8.2
[キーワード] DATASET, GENMAX, GENNUM

[質問]

SASデータセットを世代管理する方法を教えてください。

[回答]

SAS System 8eの新機能として、データステップでデータセットの世代管理を行なう機能が追加されました。これにより、更新前のデータセットを保存できるようになりました。

SAS System 8では、DATAステップでGENMAX=データセットオプションを指定することにより、最大1001個までの世代データセットを保存できます(保存できる世代数は、ディスク容量に依存します)。

下記のサンプルプログラム1では、GENMAX=データセットオプションの指定により、ベースバージョン(最新のデータセット)を1つと、ヒストリカルバージョン(世代データセット)を2つ、併せて3つのデータセットを保存するように設定しています。

サンプルプログラム1:

            /* 世代作成1回目 */
  DATA test(GENMAX=3);
    a=1;
  RUN;

             /* 世代作成2回目*/
  DATA test(GENMAX=3); 
   a=2; 
 RUN; 

            /* 世代作成3回目*/
  DATA test(GENMAX=3);
    a=3;
  RUN;
また、GENNUM=データセットオプションを使用することにより、過去のデータセットの世代数を直接指定して参照・利用することも可能です。

サンプルプログラム2:

             /* 2世代前の参照 */
  DATA _null_ ;
    SET test(GENNUM=-2);
    PUT a= ;
  RUN;

GENNUM=データセットオプションには、最新のデータセットを参照する場合は「0」、1世代前の場合は「-1」、2世代前の場合は「-2」・・・・のように数値を指定します。
サンプルプログラム2では、GENNUM=データセットオプションに値「-2」を指定することにより、サンプルプログラム1で保存した、2世代前のデータセットを参照しています。
つまり、このサンプルプログラム2で参照されるデータセットは、変数aに「1」の値が入ったデータセットとなります。