前のページ|次のページ

CALL SYSTEMルーチン

実行の動作環境コマンドをサブミットします。

カテゴリ: 特殊
制限事項: z/OS環境では、TSOコマンドを正常に実行できるのは、TSO SASセッションのみです。TSO以外のセッションでは、このコマンドは無効になり、リターンコードは0に設定されます。
操作: %SYSCALLマクロステートメントで呼び出されると、CALL SYSTEMの引数から引用符が削除されます。詳細については、CALLルーチンと%SYSCALLマクロステートメントを使用するを参照してください。
UNIX固有: commandは、有効なUNIXコマンドである必要があります。
Windows固有: commandは、有効なWindowsコマンドである必要があります。
z/OS固有: commandは、TSOコマンド、エミュレートされたUSSコマンドまたはMVSプログラムである必要があります。

構文

CALL SYSTEM(command);

必須引数

command

次のものを指定します。引用符で囲まれたシステムコマンド(文字列)、値がシステムコマンドである式、または値が実行されるシステムコマンドである文字変数の名前のいずれかを指定します。

Windows固有: Windows環境では、commandで、引用符で囲むWindowsアプリケーションの名前も指定できます。
z/OS固有: z/OS環境では、commandには、TSOコマンド、CLISTおよびREXX execも使用できます。
制限事項 コマンドの長さは、末尾の空白を含めて1024文字以内にする必要があります。

詳細

一般情報

CALL SYSTEMルーチンの動作は、Xコマンド、XステートメントおよびSYSTEM関数に似ています。条件付きで実行でき、式を引数として受け入れ、実行時に実行されるため、特定の状況で便利です。

UNIX固有の情報

UNIX環境では、コマンドの出力結果は、SASを起動したウィンドウに表示されます。
XSYNCシステムオプションの値は、CALL SYSTEMルーチンの動作に影響を及ぼします。
注: CALL SYSTEMルーチンは、DATAステップ内で実行できます。ただし、Xステートメントと、%SYSEXECマクロプログラムステートメントのどちらも、DATAステップの実行中の使用には意図されていません。

Windows固有の情報

Windows環境で、SASを対話的に実行している場合、コマンドはコマンドプロンプトウィンドウで実行します。SASセッションに戻るには、デフォルトでexitを入力する必要があります。
XSYNCおよびXWAITシステムオプションの値は、CALL SYSTEMルーチンの動作に影響を及ぼします。
注: SASをNOXCMDで起動した場合は、CALL SYSTEM関数は利用できません。

z/OS固有の情報

CALL SYSTEMルーチンは、Xステートメントと同じコマンドインターフェイスを提供し、同じ構文を備えています。CALL SYSTEMルーチンは、DATAステップ中でも実行できますが、XステートメントはDATAステップ中には実行できません。
CALL TSOは、CALL SYSTEMルーチンのエイリアスです。

例1: UNIX環境でCALL SYSTEMルーチンを使用してメッセージを送信

次の例では、resp変数がyの場合に、CALL SYSTEMルーチンによって、メッセージがanswer.week内の各レコードにメールで送られます。
data _null_;
   set answer.week;
   if resp='y' then
      do;
         call system('mail mgr < $HOME/msg');
      end;
   run;

例2: Windows環境でオペレーティングシステムコマンドを条件付きで実行

オペレーティングシステムコマンドを条件付きで実行する場合は、次のCALL SYSTEMルーチンを使用します。
options noxwait;
data _null_;
   input flag $ name $8.;
   if upcase(flag)='Y' then
      do;
         command='md c:\'||name;
         call system(command);
      end;
   datalines;
Y mydir
Y junk2
N mydir2
Y xyz
;
この例では、変数FLAGの値を使用して、条件付きでディレクトリを作成します。DATAステップを実行すると、次の3つのディレクトリが作成されます。C:\MYDIR、C:\JUNK2およびC:\XYZ。そのオブザーベーションのFLAGの値はYではないため、ディレクトリC:\MYDIR2は作成されません。
Xコマンドは、グローバルSASステートメントです。したがって、Xコマンドは、条件付きで実行できないことを認識しておくことが大切です。たとえば、次のコードをサブミットすると、Xステートメントが実行されます。
data _null_;
   answer='n';
   if upcase(answer)='y' then
      do;
         x 'md c:\extra';
      end;
run;
この場合、ANSWERの値が'n'または'y'のどちらに等しいかに関係なく、ディレクトリC:\EXTRAが作成されます。

例3: Windows環境でCALL SYSTEMルーチンを使用してディレクトリリストを取得

CALL SYSTEMルーチンを使用してディレクトリリストを取得できます。
data _null_;
   call system('dir /w');
run;
この例では、DIRコマンドの/Wオプションによって、縦書きのリスト出力形式ではなく、ワイド形式でディレクトリを出力するように指示する命令がWindowsに与えられます。

例4: z/OS環境でCALL SYSTEMルーチンを使用してCLISTSを実行する

次のDATAステップでは、USERID.TRANS.PROGという名前の外部ファイルに保存されているACTIONという名前の変数の値に応じて、3つのCLISTのうちいずれかが実行されます。
data _null_;
infile 'userid.trans.prog';
/* action is assumed to have a value of */
/* 1, 2, or 3 */
/* create and initialize a 3-element array */
input action;
array programs{3} $ 11 c1-c3
("exec clist1" "exec clist2" "exec clist3");
call system(programs{action});
run;
この例では、3つのCLISTを実行するためのTSOコマンドからなる文字式でアレイ要素が初期化されます。CALL SYSTEMステートメントでは、任意の式を使用して、これらの文字式の1つをCALL SYSTEMルーチンに渡します。たとえば、ACTIONが2に等しい場合、EXEC CLIST2コマンドが含まれるPROGRAMS{2}がCALL SYSTEMルーチンに渡されます。

関連項目:

関数:
前のページ|次のページ|ページの先頭へ