バッチプログラムにパラメータを引き渡す

[OS]ALL
[リリース] 6.07以降
[キーワード] base, batch, parameter, sysparm=, system, option, macro, variable, sysparm, separator, datastep, call, symput

[質問]

プログラムをバッチ形式で実行する場合、起動時にパラメータを渡すことはできますか。

[回答]

SASシステムオプションのSYSPARM=を使用します。SYSPARM=オプションで渡された値はマクロ変数 &SYSPARM の値として格納され、マクロを通じて自由に使用することができます。

次の例は、パラメータとして1を与えるとPRINTプロシジャを実行し、それ以外の値を与えると、CONTENTSプロシジャを実行します。

[起動コマンド]

   sas mypgm.sas -sysparm 1

[プログラム]

%macro a;
    %if &sysparm=1 %then %do;
      proc print data=sasuser.class; run;
    %end;
    %else %do;
      proc contents data=sasuser.class; run;
    %end;
%mend a;
%a

また、複数のパラメータを与えるには、複数パラメータを1つにまとめて引き渡し、 次のようなDATAステップで別々のマクロ変数に格納して使用します (次の例では、パラメータの区切りにコロンを使用しています)。

[起動コマンド]

   sas mypgm2.sas -sysparm parameter1:parameter2

[プログラム]

data _null_;
   temp=symget("sysparm");
   index=index(temp,':');
   length=length(temp);
   parm1=substr(temp,1,index-1);
   parm2=substr(temp,index+1,length-index);
   call symput("sysparm1",parm1);
   call symput("sysparm2",parm2);
run;