5

ローカル マシンの .sas ファイルにマクロを作成しました。マクロのテストに使用しているローカル データセットも用意しました。このデータセットは、リモート データセットと同じ記述子を持ちますが、観測が少ないだけです。今、リモート データセットに対してローカル マクロを実行しようとしています。これが基本的に私が持っているものです:

これは期待どおりに機能します。

%include "C:\my_sas_macro.sas";

%my_sas_macro(my_data=work.localdata)

しかし、これはエラーを生成します (エラーが続きます):

%include "C:\my_sas_macro.sas";

rsubmit;
%my_sas_macro(my_data=remotelib.remotedata)
endrsubmit;

エラーのあるログ:

125  %include "C:\my_sas_macro.sas";
136
137  rsubmit;
NOTE: Remote submit to REMOTEID.__7551 commencing.
WARNING: Apparent invocation of macro MY_SAS_MACRO not resolved.
83   %my_sas_macro(my_data=remotelib.remotedata)
     -
     180
ERROR 180-322: Statement is not valid or it is used out of proper order.
84   endrsubmit;

NOTE: Remote submit to REMOTEID.__7551 complete.

どうにかして %macro/%mend ブロックをサーバーに転送する必要があると確信していますが、その方法がわかりません。を見た%SYSLPUTことがありますが、それはマクロ変数用であり、完全なマクロ用ではありません。

とにかく、コードと%includeそこに SSH を介してサーバー上でマクロを実行できる方法はありますか?

ありがとう!

[編集] 実装されたソリューション

したがって、@ CarolinaJay65 の回答に基づいて、これまでのところかなりうまく機能している次のマクロを思いつきました。

%macro include_on_server(file=);
%let server_file = ~/temp.sas;
%SYSLPUT macro_file=&file;
%SYSLPUT server_file = &server_file;

rsubmit;

proc upload
    infile= "&macro_file."
    outfile= "&server_file."
; run;

%include "&server_file.";
endrsubmit;

%mend include_on_server;

これにより、電話をかけるだけ%include_on_server(file="C:\my_file.sas")で、リモート セッションに含まれるようになりました。

4

3 に答える 3

6

Proc Uploadの使用について

 rsubmit;
 Proc Upload
  infile='C:\my_sas_macro.sas'
  outfile='//server/my_sas_macro.sas' ;
 run;

 %include '//server/my_sas_macro.sas';
 %my_sas_macro(my_data=remotelib.remotedata)

または、マクロ全体をマクロ変数に割り当ててから %syslput を使用することもできます

于 2012-09-24T01:02:07.677 に答える
1

いくつかのオプションがありますが、そのうちの1つはCarolinaJayの提案です。もう1つは、ローカルで処理を実行してもかまわない場合は、LIBNAMEを使用してサーバーライブラリを参照できます。

libname server = slibref =; したがって、libname myserver server = unix slibref = work;

サーバーの名前が接続スクリプトで「unix」であり、その作業ディレクトリが必要な場合。

PROC CATALOG、またはPROC COPYも、上記のようにサーバーlibrefと組み合わせて使用​​して、マクロまたは単にソースコードとしてコードをコピーできます。マクロはカタログ(SASMACR)に格納され、カタログは1つのlibrefから別のlibrefに(この場合は1つのマシンから別のマシンに)コピーできます。ソースを保存してマクロをカタログに作成し、それを移動して、マクロをコンパイルする必要をなくすこともできます。ただし、これにはカタログに互換性が必要です。これは、サーバーで実行しているOSの種類とローカルマシンによって異なります。

最後に、このペーパーの提案に従うことができます。http: //www.nesug.org/proceedings/nesug05/io/io2.pdf これは、カタログソリューションとPROC UPLOADを組み合わせて、互換性のないマシンでも連携できるようにします。

于 2012-09-24T03:05:29.513 に答える
1

rsubmit/endrsubmit をインクルード内のマクロ定義の前後に配置します。ローカル ファイルを含めると、マクロがリモートでコンパイルされます。

編集:

すなわち

c:\remote_macro.sas には以下が含まれます:

rsubmit ;
  %MACRO MYMACRO ;
    /* do stuff */
  %MEND ;

  %MACRO ANOTHERMACRO(PARAM) ;
    /* Do other things */
    %PUT &PARAM ;
  %MEND ;
endrsubmit ;

次に、SAS で次を実行します。

%inc "c:\remote_macro.sas" ;

rsubmit ;
  %MYMACRO ;
  %ANOTHERMACRO(Hello World) ;
endrsubmit ;
于 2012-09-24T09:29:18.317 に答える