2017-05-05 18 views
1

過去12ヶ月間の多数の統計データを計算するつまり、私は、約10万行に及ぶ出荷日という名前の列を持ち、その月を指定する値1〜12と出荷数という別の列を繰り返します。その日の出荷数は次のようになります。SASマクロの値に基づいて再インデックスされた月の値の列を作成する12ヶ月前

data shipments 
    input Shipment_Month Shipment Count; 
datalines; 
1 2 
2 3 
3 5 
4 6 
5 7 
6 9 
7 10 
8 11 
9 12 
10 11 
11 8 
12 7 
1 . 
2 . 
3 . 
4 . 
. . 
. . 
. . 
. . 
. . 

コードを実行するたびに先月の終わりと12ヶ月前の12ヶ月の月の初めを与える更新の2つのマクロ変数。私がしたいのは、Shipment_reindexという名前の列を作成し、Shipment_Month列から1から12のインデックスを付け直して、12ヶ月前の月の値を返します(& Back_12_Months)= 5 rei-indexedすなわち、5 = 1、6 = 2,7 = 3,8 = 4,9 = 5,10 = 6,11 = 7,12 = 8,1 = 9,2 = 10,3 = 11、 4 = 12となる。

Shipment_Month Shipment_Count Shipment_reindex 
    1    2     9 
    2    3     10 
    3    5     11 
    4    6     12    
    5    7     1 
    6    9     2 
    7    10     3 
    8    11     4 
    9    12     5 
    10    11     6 
    11    8     7 
    12    7     8 
    1    .     9 
    2    .     10 
    3    .     11 
    4    .     12 
    5    .     1 
    .    . 

私はそれを行うには、ハードな方法を考えることができます。

if Shipment_Month=5 then shipment_Reindex=1; 
else if Shipment=6 then Shipment_Reindex=2 
.... 

しかし、私は私の代わりにコードが絶えず変更することで実行時に自動的に列を更新するために私がしたいです値。私は配列を使いこなしていましたが、どこも速くなりません。

私を助けてください!

おかげで、 - キース

+0

申し訳ありませんが、ティム、私の悪い...私はこれに誤ってmysqlタグを付けました。私はSAS 9.4を使用しています。ありがとう、結構です!!! – Keith

答えて

0

問題は、単純な代数基準によって解決することができます。私は任意のクエリの場合に知らせてください

Shipment_Month | Shipment_Count | Shipment_reindex 
1    | 2    | 9 
2    | 3    | 10 
3    | 5    | 11 
4    | 6    | 12 
5    | 7    | 1 
6    | 9    | 2 
7    | 10    | 3 
8    | 11    | 4 
9    | 12    | 5 
10    | 11    | 6 
11    | 8    | 7 
12    | 7    | 8 
1    | .    | 9 
2    | .    | 10 
3    | .    | 11 
4    | .    | 12 
5    | .    | 1 
6    | .    | 2 
7    | .    | 3 

: あなたはこのステップcall symputx("Back_12_Months",5)

data shipments; 
input Shipment_Month Shipment_Count; 
datalines; 
1 2 
2 3 
3 5 
4 6 
5 7 
6 9 
7 10 
8 11 
9 12 
10 11 
11 8 
12 7 
1 . 
2 . 
3 . 
4 . 
5 . 
6 . 
7 . 
; 
run; 

data shipments1; 
set shipments; 
call symputx("Back_12_Months",5); 
if Shipment_Month >= &Back_12_Months. 
    then Shipment_reindex = Shipment_Month+1-&Back_12_Months. ; 
else Shipment_reindex = Shipment_Month+13-&Back_12_Months.; 
run; 

のように月の私の出力を開始する場所から値を変更することができます。

+0

あなたは美しい人、有馬です。ありがとうございました!!! – Keith

+0

ありがとう@キース。助けて嬉しいです:) –

+0

また、回答があなたを助けた場合 –

関連する問題