私は、20ペアの株価とその価格差、そしてそれぞれのペアについて、125日以上のトリガー値を持つデータセットを持っています。今度は、データセットを得るためにいくつかの計算を行い、それぞれのペアに対して合計リターンを求めていますが、私の値がどうにか失われてしまいます。これまでは、私のすべてのペアの名前を変数として出力データセットを取得しましたが、常に値がありませんでした。 まず、価格偏差、トリガー、およびリターン偏差変数の名前を3つのマクロ変数に入れます。次に、合計60個の変数の値を持つデータセットを作成します。 MYデータは「すべては」私は、異なるデータsets.Theyからのproc SQLを使用したマクロVARSはTRIGGER1、トリガ2などまたはpricedev1 pricedev2などまたはreturndev1として変数名を含める作成し、このマクロループに沿った損失額
date trigger1 trigger2 ...... trigger20 pricedev1 pricedev2....... returndev1 returndev2 ......... returndev20
21/11/2002 0.04 0.23 -0.12 . 0.0012 . .
. 0.04 o.23 0.34
. . . .
. . .
28/04/2004 0.04 0.23 ... 0.11 ..... -0.23
のように見える設定、retundev2など。そして、それは私がやったことだ:
data all;
if _n_=1 then set trigger;
set ba.trade1_pdev;
run;
data all;
merge all ba.trade1_rdev;
run;
Proc transpose data=all out=data1 (rename=(_name_=var));
by date;
run;
は、それから私は、マクロを作成しました:
%macro totret (dsname);
%do d=1 %to 20;
%let pair=%trim(%scan(&pairname.,&d.," "));
%let ret=%trim(%scan(&ret.,&d.," "));
%let trigger=%trim(%scan(&trigger.,&d.," "));
data pair;
set data1;
length all $20;
if var="&pair." then all="pdev";
else if var="&trigger." then all="trigger";
else if var="&ret." then all="rdev";
else delete;
drop var;
run;
proc sort data=pair;
by date;
quit;
proc transpose data=pair out=pair;
by date;
id all;
quit;
data pair;
set pair;
ivar=0;
if pdev>=trigger then ivar=1;
if pdev<=-1*trigger then ivar=-1;
run;
data pair;
set pair;
totret=ivar*rdev;
keep date totret;
run;
data pair;
set pair;
rename totret=&pair.;
run;
proc sort data=pair;
by date;
quit;
proc transpose data=pair out=pair (rename=(_name_=var));
by date;
quit;
%if &d.=1 %then %do;
data &dsname.;
set pair;
run;
%end;
%if &d.>1 %then %do;
data &dsname.;
set &dsname. pair;
run;
%end;
%end;
%mend totret;
%totret (tot_ret);
は、その後、私は再びそれをバック移調が、結果は20個の変数と日付変数とデータセットが、20のすべてですvarsには値がありません。
私が持っていたい私の結果のデータセット内のproc sort data=tot_ret;
by date;
quit;
Proc transpose data=tot_ret out=test;
by date;
id var;
quit;
:
date totret1 totret2 ........... totret20
21/11/2002 . . .
.
. . . .
. . .
28/04/2004 . . .
しかし、単に正しい値を持つ;)
%スキャンしているマクロ変数の値が表示されていません。 – Tom
しかし、このステップでは、その時点で転記されているので、私はマクロ内の株式名を必要とする値を望んでいません。私はただ1つの株ペアのコードを最初に書いて、それは働いた。しかし、私はそれをマクロループに変えてからではありません。 –
マクロの外部でマクロ変数を定義することはできますが、あなたの質問にそれらのサンプル値を含める必要があります。同様に、サンプル入力データと望ましい結果を投稿するのに役立ちます。 – Tom