2016-03-30 2 views
0

私は1行(1XN)の出力を得たいNXNデータセットを持っています。各列のパーセンテージを計算する必要があります。私が列に沿って移動するとき、NumeratorとDenominatorは1行下から減少し続けます。私が持っているSASループの行番号を変更します

データ:私が欲しいもの

Category Month 0 1 2 3 4 5 6 7 8 9 
Categ_1 Month_1 15 15 15 14 14 13 13 13 13 13 
Categ_1 Month_2 8 8 8 7 6 5 5 5 5 5 
Categ_1 Month_3 15 15 14 14 14 12 11 11 11 10 
Categ_1 Month_4 17 17 17 15 14 14 13 12 11 11 
Categ_1 Month_5 25 25 25 23 21 19 18 16 16 16 
Categ_1 Month_6 21 21 18 17 14 13 12 11 11 8 
Categ_1 Month_7 29 28 25 23 20 18 15 14 13 13 
Categ_1 Month_8 32 31 30 28 25 23 21 20 18 17 
Categ_1 Month_9 38 37 35 32 27 24 23 20 17 16 
Categ_1 Month_10 30 30 28 27 24 21 20 18 17 17 

Categ_1 100% 99% 94% 87% 82% 79% 76% 76% 78% 87% 
コラム1(すなわち100%)について=(0番目の月の合計)/(0番目の月の合計)

ですここでは列2(つまり99%)=(1月の最後の行 - 最後の行の合計)/(0番目の月の最後の行の合計)など...

私は単純なオフセット式。誰でもSASでコード化することができれば幸いです。私は列全体をループするのが難しいと思っています。

ありがとうございました!

+0

今固定し、編集しているときにエラーを構築し、あなたが1行の下/最後の行で何を意味するか説明してください。 (1ヶ月目の合計、2ヶ月目の合計)? – Jetzler

+0

の2列目(99%)= 2列目の最初の9行の合計/ 1列目の最初の9行の合計 –

+0

行列の上対角線の合計が必要です(SASデータセットとして表されます) ? SAS/IMLのライセンスはありますか? – Joe

答えて

0

正しい出力が得られます。このトリックは、すべての変数をループし、すべてのステップ(データの反復)で1つを残します。

DATA in_data ; 
    INPUT Category $ Month $ var_0 - var_9 ; 
    DATALINES; 
Categ_1 Month_1 15 15 15 14 14 13 13 13 13 13 
Categ_1 Month_2 8 8 8 7 6 5 5 5 5 5 
Categ_1 Month_3 15 15 14 14 14 12 11 11 11 10 
Categ_1 Month_4 17 17 17 15 14 14 13 12 11 11 
Categ_1 Month_5 25 25 25 23 21 19 18 16 16 16 
Categ_1 Month_6 21 21 18 17 14 13 12 11 11 8 
Categ_1 Month_7 29 28 25 23 20 18 15 14 13 13 
Categ_1 Month_8 32 31 30 28 25 23 21 20 18 17 
Categ_1 Month_9 38 37 35 32 27 24 23 20 17 16 
Categ_1 Month_10 30 30 28 27 24 21 20 18 17 17 

; 

data out_data; 
do until (last.Category); 
    set in_data; 
    format out_0 - out_9 percent.; 
    array in [*] var_0 - var_9; 
    array out [*] out_0 - out_9; 
    by Category; 
    if first.Category then count = 0; 
    count + 1; 
    do i = 1 to dim(in) + 1 - count; 
     out[i] = sum(out[i],in[i]); 
     if dim(in) + 1 - i = count then out[i] = out[i] /out[1]; 
    end; 
end; 
    drop var_: month i count; 
run; 

編集:

+0

これはすばらしい、素晴らしい作品です。 –

+0

エラーは何ですか?追加の変数に対してのみ、複数のカテゴリのコードを微調整する必要はありません。あなたのデータを 'Category'と' Month'でソートしましたか? – Jetzler

+0

最初のカテゴリのみを計算しており、残りは次のようになります。 –

関連する問題