0

これは私の入力です:

data a;
policy_no = 1;
X_NET_PREMIUM_AMT = 1;
X_NET_PREMIUM_V_AMT = 8;
output;
policy_no = 1;
X_NET_PREMIUM_AMT = 2;
X_NET_PREMIUM_V_AMT = 6;
output;
policy_no = 1;
X_NET_PREMIUM_AMT = 9;
X_NET_PREMIUM_V_AMT = 4;
output;
policy_no = 1;
X_NET_PREMIUM_AMT = 12;
X_NET_PREMIUM_V_AMT = 5;
output;
policy_no = 1;
X_NET_PREMIUM_AMT = 6;
X_NET_PREMIUM_V_AMT = 3;
output;
policy_no = 2;
X_NET_PREMIUM_AMT = 18;
X_NET_PREMIUM_V_AMT = 78;
output;
policy_no = 2;
X_NET_PREMIUM_AMT = 25;
X_NET_PREMIUM_V_AMT = 16;
output;
policy_no = 2;
X_NET_PREMIUM_AMT = 91;
X_NET_PREMIUM_V_AMT = 42;
output;
policy_no = 3;
X_NET_PREMIUM_AMT = 123;
X_NET_PREMIUM_V_AMT = 52;
output;
policy_no = 3;
X_NET_PREMIUM_AMT = 4;
X_NET_PREMIUM_V_AMT = 1;
output;
run;

私がする必要があるのは、すべてのpolicy_noに対してです:

X_NET_PREMIUM_AMT = X_NET_PREMIUM_AMT OF PREVIOUS ROW + X_NET_PREMIUM_V_AMT OF CURRENT ROW.

これまでのところ - 問題ありません。

私にとって難しいのは、次の計算のために X_NET_PREMIUM_AMT を更新する必要があることです。説明します。

行 #1 (policy_no = 1):

X_NET_PREMIUM_AMT = 0(no previouse row) + 8 = 8;

行 #2 (policy_no = 1):

X_NET_PREMIUM_AMT = 8 + 6 = 14;

行 #3 (policy_no = 1):

X_NET_PREMIUM_AMT = 14 + 4 = 18;

等々....

残念ながら、私はこれを行う方法がわかりません...

あなたの助けに感謝します

4

2 に答える 2

1

探しているのは、X_NET_PREMIUM_AMTperの累積合計ですpolicy_no。元の変数を上書きするのは得策ではないため、新しい variable に名前を付けますcumsum

data b;
set a;
by policy_no;
retain cumsum;
if first.policy_no then cumsum=X_NET_PREMIUM_V_AMT; else cumsum=X_NET_PREMIUM_V_AMT+cumsum;
run;

したがって、 が検出された場合policy_nocumsumと同じになり、X_NET_PREMIUM_V_AMTこの他の行ではpolicy_noとなりますX_NET_PREMIUM_V_AMT+cumsumpolicy_noここでは、このコードのデータを並べ替える必要があります。

于 2013-10-29T16:25:13.100 に答える
0
data out;
    set a;
    by policy_no;
OUT_X_NET_PREMIUM_AMT = sum(X_NET_PREMIUM_AMT, lag1(X_NET_PREMIUM_AMT));
OUT_X_NET_PREMIUM_V_AMT = sum(X_NET_PREMIUM_V_AMT, lag1(X_NET_PREMIUM_V_AMT));
    if last.policy_no then output;
run;

そのためには、lag1() 関数を使用します - 変数の前の値を返します。

たぶん、最後の 3 つの値を意味します。

OUT_X_NET_PREMIUM_AMT = sum(X_NET_PREMIUM_AMT, lag1(X_NET_PREMIUM_AMT), lag2(X_NET_PREMIUM_AMT));
OUT_X_NET_PREMIUM_V_AMT = sum(X_NET_PREMIUM_V_AMT, lag1(X_NET_PREMIUM_V_AMT), lag2(X_NET_PREMIUM_V_AMT));
于 2013-10-29T13:36:58.333 に答える