我輩はブロガーではない。ネタもまだない

SASとかDelphiあたりの人様の役に立たないネタを提供します

GENERICシステムオプション

GENERIC システムオプションをご存知ですか。
SAS Communityの回答で教えてもらったのですが、undocumentedな感じで詳細がわからないので試してみました。


通常のシステムオプションはproc optionsで中身を確認することができます。
試しに、mprintの値を表示してみます。(コードは上2行です)

f:id:japelin:20211222141104p:plain


ところが、genericに対しては、エラーが出力されます。
f:id:japelin:20211222141229p:plain

でも、以下はちゃんと動くんですよ。

proc options generic;
proc options nogeneric;


さて、肝心のgenericオプションの効果ですが、「環境依存の情報をログに出力しない」という効果のようです。

以下は起動時に指定した場合ですが、左右のログを見比べると一目瞭然。バージョンやSite、環境を表す情報がごっそり削られています。Host Testingという文字から、若干デバッグ用、という気もしないでもないです。
f:id:japelin:20211222143202p:plain

また、以下のコードをサブミットしてみます。

libname a 'c:\temp\x';
libname b "%sysfunc(sysget(userprofile))\Pictures";
filename x 'c:\temp\temp.txt';
filename y "%sysfunc(sysget(userprofile))\\Pictures\tmp.txt";
filename z temp;
data _null_;
  set sashelp.class;
  where age<15;
  file x;
  file y;
  file z;
run;
data 'c:\temp\x\abc';
  set sashelp.class;
run;

赤枠が情報が置き換わったもの、緑枠は削除されたものです
f:id:japelin:20211222151232p:plain

物理名が尽く置き換わっています。
環境依存だけじゃなく、物理名も一般化しているような感じですね。
また、setステートメントで表示される読み込み情報も削除されているのが面白いです。
whereステートメントも削られていますね。

SASのバージョンやプロダクトバージョンあたりはあってもいいかな、という気もしますが、これはgitでの管理に最適なのでは…???
(ログが短くなることで差分をうまく検出できなくなる可能性は否めませんが、ソースがしっかり出力されていれば問題ないかと)