私は 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
文字列を含む変数を渡そうとしています。はローカル マシンで評価され、値が含まれています。 index
var1
'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'
rsubmit
endrsubmit
更新: コード全体(リモートサーバー固有のものは省略しましたが、問題なく接続できます):
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 ¥d;
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
を適切に評価しますが、オフのままにします。i
m
var1
このステートメントは、各変数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
句は変数を受け入れることができないのでしょうか?