amatsuさんのSAS忘備録「特定のシステムオプションをSAS起動時に戻す」という記事を参考に「全てのシステムオプションをSAS起動時に戻す」マクロを検討しています。
それで、optsave、optload プロシジャやSashelp.Voptionテーブルの利用可能性を検討しています。
SAS忘備録の記事でstartupvalueオプションがあることを知り、またoptions ステートメントで設定変更するとSashelp.Voptionのデータも変更されることを見ていて、optsaveプロシジャで現在の設定を一挙に入手できるように、もしかしたらSAS起動時の設定も一挙に入手できるのではないかと考えています。
そうすれば入手したデータをoptloadプロシジャで指定するだけで、「全てのシステムオプションをSAS起動時に戻す」ことができると期待しています。
という訳で、optsaveプロシジャで現在の設定をデータセット化するように、SAS起動時の設定をデータセット化できる方法がありましたらお教えください。 よろしくお願いします。
こんにちは。
少し調べてみましたが、一括で起動時の変数を参照できるようなビュー等はなさそうでした。
そのため、GETOPTION関数を使うのがいいかなと思います。あとは、頻繁に初期設定を変えないなら
SASUSERライブラリのような永久ライブラリにOPTSAVEプロシジャで保存しておくのもいいかと思います。
簡単なサンプルを作ってみました。オプションのリストはOPTSAVEから引っ張ってきています。
DATEオプションなどはOPTSAVEプロシジャではDATEなら1、NODATEなら0のように格納されていますが
GETOPTION関数ではDATE、NODATEのまま返されますので、ここは整形が必要です。
proc optsave out=opt;
run;
proc sql;
create table opt2 as
select optname, case getoption(optname,'startupvalue')
when optname then "1" when 'NO' || optname then "0"
else getoption(optname,'startupvalue') end as optvalue
from opt;
quit;
proc optload data=opt2;
run;
こんにちは。
少し調べてみましたが、一括で起動時の変数を参照できるようなビュー等はなさそうでした。
そのため、GETOPTION関数を使うのがいいかなと思います。あとは、頻繁に初期設定を変えないなら
SASUSERライブラリのような永久ライブラリにOPTSAVEプロシジャで保存しておくのもいいかと思います。
簡単なサンプルを作ってみました。オプションのリストはOPTSAVEから引っ張ってきています。
DATEオプションなどはOPTSAVEプロシジャではDATEなら1、NODATEなら0のように格納されていますが
GETOPTION関数ではDATE、NODATEのまま返されますので、ここは整形が必要です。
proc optsave out=opt;
run;
proc sql;
create table opt2 as
select optname, case getoption(optname,'startupvalue')
when optname then "1" when 'NO' || optname then "0"
else getoption(optname,'startupvalue') end as optvalue
from opt;
quit;
proc optload data=opt2;
run;
SAS起動時のオプション設定を保存するのであれば、SAS起動時にSASプログラムを実行したいときに使用する、-autoexec起動オプションで起動時に実行したいSASプログラムファイルを指定し、その中でPROC OPTSAVEを使用して保存しておけば良いと思いますが、いかがでしょうか?
例)
SASの起動コマンドを以下のように(Windowsの場合):
"C:\Program Files\SASHome\SASFoundation\9.4\sas.exe" -CONFIG "C:\Program Files\SASHome\SASFoundation\9.4\nls\ja\sasv9.cfg" -autoexec "C:\autoexec.sas"
指定したautoexec.sasの中身:
proc optsave out=work.initopt;
run;
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!