2017-06-14 9 views
0

変数の値を別の変数の値に設定しようとしていて、元の変数の名前を変更してから、次のコードを使用してマージします。(MK_RETURN_DATARETURNOUTSETのサブセットです。ちょうどMK_RETURN_DATARETURNOUTSETをマージして、MK_RETURN_DATAの変数の名前を変更しました。SAS変数を別の変数と同じに設定して名前を変更してからマージする

data RETURNOUTSET; 
    CUM_RETURN = return_sec; 
    run; 

    PROC SQL; 
    CREATE TABLE MK_RETURN AS 
     SELECT a.* 
     FROM 
     RETURNOUTSET a 
     WHERE a.SYMBOL = 'SPY'; 
    QUIT; 

    DATA MK_RETURN_DATA; 
    SET MK_RETURN; 
    RENAME RETURN_SEC=MK_RETURN_RATE; 
    DROP SYMBOL; 
    RUN; 

    proc sort data=MK_RETURN_DATA; by Date Time; run; 
    proc sort data=RETURNOUTSET; by Date Time; run; 

    data WITH_MARKET; 
    merge RETURNOUTSET(IN=C) MK_RETURN_DATA(IN=D); 
    by Date Time; 
    if C; 
    run; 

しかし、私はWITH_MARKETに記号「A」とのデータの最初のブロックでは非常に奇妙な結果を取得しています。 CUM_RETURNの値は実際にはMK_RETURN_RATEの値に等しいですが、私はそれがreturn_secであることを望んでいました。

どうしましたか?

答えて

1

データセットオプションでこれを行うことができます。 まず、データがソートされていることを確認します。

proc sort data=RETURNOUTSET; by Date Time; run; 

そしてバック自体とそのデータセットをマージして、適切なKEEPを使用して、元のデータにマージする正しいレコードを選択し、WHEREデータセットオプションの名前を変更します。

data WITH_MARKET; 
merge RETURNOUTSET(IN=C) 
     RETURNOUTSET(IN=D 
        keep=symbol return_sec date time 
        rename=(symbol=x_symbol return_sec=MK_RETURN_RATE) 
        where=(x_symbol='SPY') 
       ) 
; 
by Date Time; 
if C; 
drop x_symbol ; 
run; 

あなたは、元のデータでDATEのTIME値のすべてのシンボル=「SPY」の記録を持っていない場合は、マージが動作しない場合があります。または、同じDATE TIME値に対して複数のSYMBOL = 'SPY'レコードがある場合、このマージにも問題がある可能性があります。

+0

代わりにwhere =(x_symbol = 'SPY')はどこでなければならないのですか? –

+0

はい。覚えておくべき重要なことは、データセットオプションがアルファベット順のプロセスであることです。したがって、WHEREの前にRENAMEの前にKEEPを保存してください。 – Tom

1

これまでの作業は、この1つのデータセットと同じです。あなたはCUM_RETURNにRETURN_SECを入れ、SYMBOL = 'SPY'にフィルターをかけ、RETURN_SECの名前をMK_RETURN_RATEに変更しました。

DATA MK_RETURN_DATA; 
    SET returnoutset(where=(symbol='SPY')); 
    cum_return = return_sec; 
    RENAME RETURN_SEC=MK_RETURN_RATE; 
    DROP SYMBOL; 
    RUN; 

そう... CUM_RETURNはMK_RETURN_RATEは、私の知る限り、旧RETURN_SECに等しい等しいです。実際に何をしようとしていたのですか?

+0

ベンチマークとしてRETURNOUTSET(ティッカーシンボルが "SPY"に等しい)のサブセットを使用し、このベンチマークをRETURNOUTSETに時間でマージする必要があります。 –

+0

これはいいですが、これらの変数を使って何をしようとしていますか? – Joe

+0

RETURNOUTSETにはreturn_secという変数があります。私はこの変数の名前をMK_RETURN_RATEに変更したい(ベンダーマークである 'SPY'を持つもののみ)、ベンチマークをRETURNOUTSETにマージする。ベンチマークでRETURNOUTSETを回帰したいと思います。 –

関連する問題