1

私は SAS を初めて使用し、リモート サーバーからデータを取得しようとしています。

以下は、リモートサーバーで実行しようとしているコードです。

rsubmit;
libname abc'server/sasdata'; *This is where the datasets are located;   
data all2009;
    set abc.file_2007:; 
    by index date time;
    where index in (var1) and time between '8:30:00't and '12:00:00't;
run;
endrsubmit;

現在、 「クエリ」が必要とする var1文字列を含む変数を渡そうとしています。はローカル マシンで評価され、値が含まれています。 indexvar1'abc'

ただし、var1はローカルで評価されるため、リモート サーバー上の変数を参照しようとすると、var1存在しないためエラーが発生します。

次のようにコードを実行すると (明示的な値を使用して'abc') 、正常に実行されます。

...
set abc.file_2007:; 
by index date time;
where index in ('abc') and time between '8:30:00't and '12:00:00't;
...

この「クエリ」を動的に実行する必要があります。と で囲まれたコードを実行しようとする前に、強制的var1に実際の値 (つまり ) に置き換える方法はありますか?'abc'rsubmitendrsubmit


更新: コード全体(リモートサーバー固有のものは省略しましたが、問題なく接続できます):

LIBNAME local 'C:\...\Pulled Data\New\';
FILENAME csvfile 'C:\...\Pulled Data\New\indexes.txt';

%macro getthedata(nrows,ystart,yend); *nrows is the number of rows in the text file;

    %GLOBAL var1 var2 var3 var4;

    %do i=1 %to &nrows;
        %do m=&ystart %to &yend;

            DATA local.trow; 
               INFILE csvfile FIRSTOBS=&i OBS=&i;
               INPUT var1 $ var2 $ var3 $ var4 $;
            RUN;

            PROC PRINT DATA = local.trow;
            TITLE "Title - &i. &var1. &m";
            var var1 var2 var3 var4;
            RUN;

            proc export data=local.trow
                outfile="C:\...\Pulled Data\New\Indices_&i._&m..csv"
                dbms=csv replace;
            run;

            signon username=_prompt_;
            %syslput VAR1 = &var1;
            rsubmit;
                    libname abc'server/sasdata';    
                    data all2009;
                         set abc.file_2007:; 
                         by index date time;
                         where index in (&VAR1) and time between '8:30:00't and '12:00:00't;
                    run;
            endrsubmit;

        %end;
    %end;
%mend getthedata;

Options MPRINT;

%getthedata(1,2007,2007)

このコードを使用すると、ステートメントは変数とその値PROC PRINTを示すテーブルを正しく出力します。varこのステートメントは変数と変数TITLEを適切に評価しますが、オフのままにします。imvar1

このステートメントは、各変数proc exportの期待値を含む正しい CSV ファイルを作成します。var

提案どおり、変数を GLOBAL として宣言しようとしましたvarが、効果がないようです。var1コードはまだ変数をリモート サーバーに正しく渡すことができないようです。

&VAR1繰り返しますが、変数の実際の文字列値に置き換えると、コードは完全に機能します。

私が得るエラーは次のとおりです。

ERROR: Syntax error while parsing WHERE clause.
ERROR 22-322: Syntax error, expecting one of the following: a quoted string,
              a numeric constant, a datetime constant, a missing value.

この場合のWHERE句は変数を受け入れることができないのでしょうか?

4

1 に答える 1

4

VAR1 値をローカル マシン/セッションのマクロ変数に入れると、%SYSLPUT コマンドを使用してそのマクロをリモート サーバーに渡すことができます。

SIGNON コマンドと RSUBMIT コマンドの間に配置します。

Signon;
%SYSLPUT VAR1=&var1;
RSubmit;

次に、&VAR1 がリモート セッションで使用可能になります。&VAR1 で渡す内容によっては、マクロの引用が必要になる場合があります。この方法に問題がある場合は、値を投稿してください。

于 2013-08-21T18:51:36.307 に答える