1

エンタープライズ ガイドで SAS ファイルを開いて実行すると、サーバー上で実行されます。ソース ファイル自体は、運用サイトまたは開発サイトにあります。ただし、どちらの場合も同じサーバーで実行されます。結果を相対フォルダーに保存するようにスクリプトに指示できるようにしたいと考えています。しかし、私が次のようなものを書くと

libname lib_out xport "..\tmp\foobar.xpt";

SAS Enterprise Guide プロセスの作業フォルダーがソース ファイルの場所ではなく、サーバー上のフォルダーであるため、エラーが発生します。そして、フォルダ..\tmpはそこに存在しません。たとえそうであっても、サーバー プロセスにはそのフォルダへの書き込み権限がありません。

.sasファイルがロードされたフォルダーを特定し、それに応じて作業フォルダーを設定したいと思います。ある場合はそうでS:\Development\myproject\sas\foobar.sasあり、他の場合はそうですS:\Production\myproject\sas\foobar.sas

これはまったく可能ですか?または、これをどのように行いますか?

4

2 に答える 2

1

OK、これはあなたの質問に正確に答えるつもりはありませんが、私はこのマクロを簡単に利用できるので、共有したいと思いました. ここからは、少し文字列処理を行うだけです。

%macro progName;
%* Returns the name of current program;
    %let progPath = %sysfunc(GetOption(SysIn));
    %* if running in interactive mode, the above line will not work, and the next line should;
    %if  %length(&progPath) = 0 %then %let progPath = %sysget(SAS_ExecFilePath);

    %str(&progPath)
%mend progName;
于 2010-06-02T14:02:34.737 に答える
1

EG の構成方法によっては、syshostname グローバル マクロ変数のようなものを使用して、結果を保存する場所を決定できる場合があります。

%macro sasdir;
    %global sasdir;
    %if "&syshostname" eq "mydevelopmenthost" %then %do;
      %let sasdir = S:\Development;
    %end;
    %else %if "&syshostname" eq "myproductionhost" %then %do;
      %let sasdir = S:\Production;
    %end;
%mend;
%sasdir;

libname lib_out xport "&sasdir\myproject\sas\tmp\foobar.xpt";

そうでない場合は、次のようにして、他のグローバル変数または自動マクロ変数が役立つ可能性があるものを調べてみてください。

%put _all_; 

お役に立てれば

乾杯 ロブ

于 2010-06-03T20:32:22.083 に答える