2016-05-02 9 views
0

私はまだsasに慣れていますので、まだステートメントを学習しています。私はIDと総支出のデータセットを持っています。私は、retainステートメントを使って各顧客の累積支出を取得したい。私のコードは次のとおりだった。SASでのステートメントの保持についての簡単な助け

data ex03.try1; set ex03.sorted; 
    by ID; 
if first.ID then do; 
    retain total 0; 
    total = total+amount; end; 
    else do; total=total+amount; end; 
run; 

はしかし、私のコードは本当に合計の初期値はそれぞれの新しいIDは0に設定しないでください。私がどこで間違っていたのか理解するのを助けてください。

評価しました。

ありがとうございます。

+0

proc SQLのステップではなく、retainステートメントでこれを行う理由はありますか?変数による集計は、proc sqlでは非常に簡単です。 – superfluous

答えて

2

RETAINステートメントは、データステップのコンパイル中に評価されます。あなたが置く場所はそれほど重要ではありませんが、同じ効果があります。特にそれを条件文の中に置くことは何もしません。 RETAINステートメントは、データステップの次の反復が開始されるときに値を欠落値に設定しないことをSASに伝えます。 retainステートメントのオプションの初期値は、データステップの最初の反復の前に値を設定します。

新しいID値の値を変更するには、実際にデータステップの実行中に何かを行う実際の代入文を使用する必要があります。

SUM文を使用してコードを短くすることができます。 SUMステートメントの使用は、変数が保持され、ゼロに初期化されることを意味します。

data want; 
    set have; 
    by id; 
    if first.id then total=0; 
    total+amount; 
run; 

SUMステートメントは、AMOUNT変数の欠損値も処理することに注意してください。

retain total 0; 
total=sum(total,amount); 
0

私はそれが私の透過性のコードは動作しませんでした、なぜ誰も私に説明することができ、まだ

by ID; 
    retain total 0; 
    if first.ID then do; 
    total=0; 
    total=total+amount; 
    else do; 
    total=total+amount; 
run; 

しかし、のような場合は、else文の合計0外を保持入れて働いて頂いております。私はそれが新しいIDであると思っていました、そして、合計を0にすると、値を追加し続けます。私はそれについて間違っているはずだと思います。

ありがとう、

関連する問題