前のページ|次のページ

SAS/CONNECTインターフェイス

SAS/CONNECTインターフェイスの概要

マクロとSAS/CONNECTを組み合わせて何度も使用すると、表示される結果が予期したものとは異なる場合があります。マクロ機能内でRSUBMITを使用する場合、コンパイル時に起こることと実行時に起こることの違いを十分理解しておく必要があります。このような対話の振る舞いを理解することは、マクロとSAS/CONNECTを組み合わせて使用する場合に役立ちます。詳細については、Using the Macro Facility with SAS/CONNECT (SAS/CONNECT User's Guide)を参照してください。

%SYSRPUTをSAS/CONNECTと共に使用する

%SYSRPUTマクロステートメントは、SAS/CONNECTを使用してリモートホストにサブミットされ、リモートホストに格納されたマクロ変数の値を取り出します。%SYSRPUTステートメントは、その取得した値をローカルホスト上にあるマクロ変数に割り当てます。%SYSRPUTステートメントは、マクロ変数に値を割り当てるという意味では、%LETマクロステートメントに似ています。ただし、%SYSRPUTステートメントは、同ステートメントが処理されるリモートホスト上の変数に対してではなく、ローカルホスト上の変数に値を割り当てます。%SYSRPUTステートメントは、マクロ変数をローカルホストの現在のスコープ内に配置します。
注: リモートホストおよびローカルホスト上のマクロ変数名の先頭には、アンパサンドを付けません。
%SYSRPUTステートメントは、自動マクロ変数SYSINFOの値を取得し、その値をローカルホストに渡す場合に使用すると便利です。SYSINFOには、一部のSASプロシジャが出力したリターンコードの情報が格納されます。SAS/CONNECTのUPLOADプロシジャとDOWNLOADプロシジャは、どちらもマクロ変数SYSINFOを更新できます。これらのプロシジャがエラーで終了した場合、この変数には0以外の値が設定されます。リモートホスト上で%SYSRPUTステートメントを使用すると、SYSINFOマクロ変数の値をローカルSASセッションに送り返すことができます。このようなジョブをリモートホストに対してサブミットすることにより、リモートホストまたはローカルホスト上で別のステップを開始する前に、PROC UPLOADステップまたはPROC DOWNLOADステップが正常終了したかどうかをチェックできます。
%SYSRPUTを使用するには、SASコマンドを使用してDMRオプションをサブミットすることによって、リモートのSASウィンドウ環境のセッションを呼び出している必要があります。%%SYSRPUTの使用については、Using %SYSLPUT and %SYSRPUT Statements (SAS/CONNECT User's Guide)を参照してください。
リモートホスト上またはサーバー上で、新しいマクロ変数を作成したり、既存のマクロ変数の値を変更したりするには、%SYSLPUTマクロステートメントを使用します。

%SYSRPUTを使用したリモートホストのリターンコード値のチェック例

この例では、ファイルをダウンロードし、ステップが成功したことを示す情報を返す方法について説明します。リモート処理が完了すると、このジョブはRETCODEに格納されたリターンコードの値をチェックします。リモート処理が成功した場合、ローカルホスト上の処理を続行します。次の例では、PROC DOWNLOADステップの後に%SYSRPUTステートメントが実行されます。SYSINFOが返す値によって、PROC DOWNLOADステップの実行が成功したことが示されます。
/* This code executes on the remote host. */
rsubmit;
   proc download data=remote.mydata out=local.mydata;
   run;
         /* RETCODE is on the local host. */
         /* SYSINFO is on the remote host. */
   %sysrput retcode=&sysinfo;
endrsubmit;

   /* This code executes on the local host. */
%macro checkit;
   %if &retcode = 0 %then
      %do;
         further processing on local host
      %end;
%mend checkit;

%checkit
リモートホスト上で実行されたステップが成功したかどうか確認するには、%SYSRPUTマクロステートメントを使用して、自動マクロ変数SYSERRの値をチェックします。
%SYSRPUTステートメントの詳細および構文については、%SYSRPUTステートメントを参照してください。

SAS/CONNECTでの%SYSLPUTの使用

%SYSLPUTステートメントは、クライアントセッションでサブミットされるマクロステートメントです。これによって、クライアントセッションにおいて使用可能な値を、サーバーセッションからアクセスできるマクロ変数に割り当てます。複数のサーバーセッションにサインオンしている場合、%SYSLPUTは、最後に使用されたサーバーセッションにマクロ割り当てステートメントをサブミットします。サインオンしているサーバーセッションが1つしかない場合、%SYSLPUTは、マクロ割り当てステートメントをそのサーバーセッションにサブミットします。どのセッションにもサインオンしていない場合、エラーが返されます。%SYSLPUTステートメントは、%LETステートメントと同様にマクロ変数に値を割り当てます。%LETとは異なり、%SYSLPUTステートメントは、そのステートメントが実行されたクライアントセッションではなく、サーバーセッションの変数に値を割り当てます。%SYSLPUTステートメントは、サーバーセッションのグローバルシンボルテーブルにマクロ変数を格納します。
%SYSLPUTの使用については、Using %SYSLPUT and %SYSRPUT Statements (SAS/CONNECT User's Guide)を参照してください。

%SYSLPUTの使用例

%SYSLPUTを使用することで、サーバーセッションで実行されるマクロが使用する変数に、動的に値を割り当てることができます。ここでは、マクロステートメント%SYSLPUTは、クライアント側のマクロ変数RUNIDの値を使用して、サーバーセッションのマクロ変数REMIDの作成に使用されています。変数REMIDは、サーバーセッションで実行されるマクロ%DOLIBによって使用されます。このプロセスによって、サーバーセッションで使用されているオペレーティングシステム固有のライブラリ割り当てが検出されます。
%macro assignlib (runid);

   signon rem &runid
   %syslput remid=&runid
   rsubmit rem &runid
      %macro dolib;
         %if (&runid eq 1) %then %do;
            libname mylib 'h:';
            %end;
         %else %if (&runid eq 2) %then %do;
            libname mylib '/afs/some/unix/path';
            %end;
      %mend;
      %dolib;
   endrsubmit;

%mend;
前のページ|次のページ|ページの先頭へ