前のページ|次のページ

%SYSCALLステートメント

SAS CALLルーチンを呼び出します。

種類: マクロステートメント
制限事項: マクロ定義またはオープンコードで使用可能
参照項目: %SYSFUNC関数と%QSYSFUNC関数

構文

%SYSCALL call-routine< (call-routine-argument(s))>;

必須引数

call-routine

SAS CALLルーチン、SAS/TOOLKITソフトウェアを使用して作成されたユーザー定義のCALLルーチン、またはFCMPプロシジャ(Base SASプロシジャガイドを参照)を使用して作成されたCALLルーチンを指定します。すべてのSAS CALLルーチンは、%SYSCALLステートメントを使って呼び出すことができます。ただし、LABEL、VNAME、SYMPUT、EXECUTEルーチンは例外です。

call-routine-argument(s)

1つ以上のマクロ変数名(先頭のアンパサンドは不要)を指定します。複数指定する場合、マクロ変数名の間をカンマで区切ります。CALLルーチン引数の一部または全部を生成するテキスト式も指定できます。

詳細

%SYSCALLステートメントでCALLルーチンを呼び出すと、各マクロ変数引数の値が取り出され、それらの値は置換されないままの状態でCALLルーチンに渡されます。CALLルーチンの完了時に、各引数の値が、それぞれ対応するマクロ変数に書き戻されます。%SYSCALLステートメントがエラー状態を検出すると、マクロ変数値を更新することなくCALLルーチンの実行が終了します。続いてエラーメッセージがログに出力された後、マクロ処理が続行されます。
注: %SYSCALLステートメントの引数は、SASマクロ言語の規則に従って評価されます。これには、関数名および関数の引数リストの両者が含まれます。特に、引数位置が空である場合、NULL引数ではなく、長さがゼロの引数が生成されます。
注意:
マクロ変数名の先頭にはアンパサンドを付けないでください。
%SYSCALLマクロステートメントにより呼び出されたCALLルーチンの引数は、実行される前に置換されます。マクロ変数の先頭にアンパサンドを付けた場合、マクロ変数の名前ではなく、そのマクロ変数の値がCALLルーチンに渡されます。
注意:
マクロ変数には文字データのみが含まれます。
関数の引数が数値データか文字データのどちらでもよい場合、%SYSCALL ステートメントは指定されたデータを数値データに変換しようとします。このため、指定されたデータが文字データであった場合には、末尾の空白が削除されます。%SYSCALLステートメントは、文字データである可能性がある引数は変更しません。末尾の空白を保存するには、関数の引数として渡されるマクロ変数に値を割り当てる際に、%QUOTE関数を使用します。%QUOTE関数を使って末尾の空白を保存する必要があるかどうかを判定する場合、対象とする関数のドキュメントを参照し、その引数が数値のみ、文字のみ、数値と文字の両方のうちどれを受け入れるかを確認してください。数値と文字の両方を受け入れると記述されている引数の場合、%QUOTE関数を使用して同引数に指定された値をクォートします。
%let j=1;
%let x=fax;
%let y=fedex;
%let z=phone;
%put j=&j x=&x y=&y z=&z
j=1 x=fax y=fedex z=phone
%syscall allperm(j,x,y,z);
%put j=&j x=&x y=&y z=&z
j=1 x=250 y=65246 z=phone

例: RANUNI CALLルーチンを%SYSCALLと共に使用する

%SYSCALLステートメントの使用例を次に示します。マクロステートメント%SYSCALL RANUNI(A,B)は、SAS CALLルーチンであるRANUNIを呼び出します。
注: RANUNIの構文はRANUNI(seed,x)です。
%let a = 123456;
%let b = 0;
%syscall ranuni(a,b);
%put &a, &b;
%PUTステートメントは、マクロ変数AおよびBの値を次のようにSASログに書き込みます。
1587033266 0.739019954
前のページ|次のページ|ページの先頭へ