現在のオプションの内容をデータセットに格納する proc optsave 、データセットに格納されたオプションの内容を反映させる proc optload - SAS

proc optsave と proc optload のご紹介です。proc optsave は現在設定されているオプションの内容をデータセットに格納させることができます。proc optload はオプションの内容が格納されているデータセットを用いて、オプションを変更させることができます。proc optsave で一時保存しておいて、proc optload で元に戻す、みたいな感じに使えますね。

オプションの内容はデータセットに格納されるので、WORK以外にデータセットを保存しておいて、オプションの内容を各プログラムで完全統一させたいときとかも使えるかもしれません。

では、どんなふうに書けばいいのか、オプションの内容をログに表示する proc options を用いて、テストコードを書いてみます。

テストコード

options nonotes ;

/* 指定したオプションの内容をログに表示 */
proc options option=obs ;
run ;

/* 現在のオプションの内容をデータセットに格納 */
proc optsave out=OPT ;
run ;

options obs=100 ;

proc options option=obs ;
run ;

/* オプションの設定内容を戻す */
proc optload data=OPT(obs=max) ;
run ;

proc options option=obs ;
run ;

実行時の obsオプションの設定は、デフォルト値のmaxです。はじめに、proc optsave でデータセット OPT にオプションの内容を格納します。つぎにoptions obs= で値を 100 に設定します。最後に proc optload で、オプションを変更する前の設定に戻します。

実行ログ

 59         options nonotes ;
 60         
 61         /* 指定したオプションの内容をログに表示 */
 62         proc options option=obs ;
 63         run ;
     SAS (R) PROPRIETARY SOFTWARE RELEASE 9.4  TS1M2
 
  OBS=9223372036854775807
                    処理する最終オブザベーションの特定に使用されるオブザベーションを指定するか、
                    処理する最終レコードを指定します。
 64         
 65         /* 現在のオプションの内容をデータセットに格納 */
 66         proc optsave out=OPT ;
 67         run ;
 68         
 69         options obs=100 ;
 70         
 71         proc options option=obs ;
 72         run ;
     SAS (R) PROPRIETARY SOFTWARE RELEASE 9.4  TS1M2
 
  OBS=100           処理する最終オブザベーションの特定に使用されるオブザベーションを指定するか、
                    処理する最終レコードを指定します。
 73         
 74         /* オプションの設定内容を戻す */
 75         proc optload data=OPT(obs=max) ;
 76         run ;
 77         
 78         proc options option=obs ;
 79         run ;
     SAS (R) PROPRIETARY SOFTWARE RELEASE 9.4  TS1M2
 
  OBS=9223372036854775807
                    処理する最終オブザベーションの特定に使用されるオブザベーションを指定するか、
                    処理する最終レコードを指定します。

注意が必要なのが、obs オプションを変更していた場合です。オプションの内容を格納したデータセットの内容を見ると分かりますが、オブザベーションの数は、SAS雲丹の環境では 283 オブザベーションです。つまり、obs オプションに設定した値が、オプションの総数よりも少ない場合、proc optload したとき、正常にオプション内容が戻らない場合があります。

この問題を解決するために、テストコードでは、(obs=max) のオプションを付加しています。この問題は、proc optload のときだけでなく、proc optsave のときにも起きます。obsオプションを変更している場合は、ご注意ください。

ちなみに、テストコードに用いた proc options ですが、option= を付けない場合、全オプションの内容がログに出力されます。色んなオプションがあることを知ったり勉強するのに使えます。

proc options ;
run ;
 59         proc options ;
 60         run ;
 
     SAS (R) PROPRIETARY SOFTWARE RELEASE 9.4  TS1M2
 
 
 ポータブルオプション :
 
  ANIMATION=STOP    アニメーションを開始/停止するかどうかを指定します。
  ANIMDURATION=MIN  アニメーションフレームを表示する秒数を指定します。
  ANIMLOOP=YES      アニメーションイメージの反復数を指定します。
  ANIMOVERLAY       すべてのフレームを表示するためにアニメーションフレームを重ね合わせます。
  APPEND=           既存のオプション値の最後に値を挿入する option=value ペアを指定します。
  APPLETLOC=        Java アプレットの場所 (通常は URL) を指定します。
  ARMAGENT=         特定の ARM API 実装を含む ARM エージェント (LOG4SAS 
                    などの実行モジュールやキーワード) を指定します。
  ARMLOC=ARMLOG.LOG ARM ログの場所を指定します。
  ARMSUBSYS=(ARM_PROC)
                    有効化/無効化する ARM サブシステムを指定します。
  AUTOCORRECT       スペルミスされたプロシジャ名、キーワード、グローバルステートメント名を自動修
                    正します。
  AUTOEXEC=/opt/sasinside/SASConfig/Lev1/SASApp/WorkspaceServer/autoexec.sas
                    SAS AUTOEXEC ファイルの場所を指定します。

  /* 以下、長いので省略 */


環境によるみたいですが、optload時に、ls, ps の値が変わってしまうことがあるようなので、ご注意ください。

コメント

コメントを投稿

このブログの人気の投稿

日付フォーマットでない文字項目をSAS日付に変換するときにログ出力されるメッセージを抑制したい - SAS

データセット(.sas7bdatファイル)の文字コードを取得したい - SAS

Linuxコマンド: date で◯か月前 / ◯か月後を取得するときの注意