2017-05-05 1 views
1

Ich habe einen Code, den ich jeden Monat für Arbeit aktualisiere, der eine Anzahl von Statistiken über die letzten 12 Monate von Versanddaten für eine Anzahl verschiedener Sendungen berechnet Gruppen also Flugzeug, Zug, LKW, Schiff etc.SAS Erstellt eine Spalte mit re-indizierten Monatswerten basierend auf dem Makrowert 12 Monate zurück

Kurz gesagt, ich habe eine Spalte mit dem Namen Versanddatum, die sich über 100 tausend Zeilen erstreckt und die Werte 1-12 wiederholt, die den Monat angeben und eine andere Spalte mit der Bezeichnung Anzahl der Lieferungen Anzahl der Sendungen an diesem Datum, die in etwa so aussieht:

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 . 
. . 
. . 
. . 
. . 
. . 

Jedes Mal, wenn ich den Code ausführen, gibt es zwei Makro-Variablen, die aktualisieren, die mir das Ende des letzten Monats und den Beginn des Monats vor 12 Monaten geben (umfasst 12 Monate). Was ich tun möchte, ist nur eine Spalte namens Shipment_reindex, die von neu indizierten Werte 1-12 aus der Shipment_Month Spalte mit dem Wert des Makros gefüllt wird, die mir 12 Monate zurück gibt, dh Monat (& Back_12_Months) = 5 Rei-Indiziert zu 1 und so weiter, dh 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 
    .    . 

ich der harten Art und Weise denken kann, es zu tun:

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

aber ich möchte es die Spalte automatisch zu aktualisieren, wenn ich den Code statt mich laufen ständig die geändert werden müssen Werte. Ich habe mich mit Arrays herumgeschlagen, aber ich komme nicht schnell voran.

Bitte helfen Sie mir!

Danke, - Keith

+0

Sorry, Tim, mein Schlechter ... Ich habe versehentlich das mysql-Tag an diesem angehängt. Ich benutze SAS 9.4. Trotzdem danke!!! – Keith

Antwort

0

Das Problem kann durch einfache Algebra Kriterien gelöst werden. Sie können den Wert ändern, in dem Sie den Monat als in diesem Schritt 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; 

Meine Ausgabe beginnen soll:

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 

Lassen Sie mich wissen, im Falle von Abfragen.

+0

Du bist eine wunderschöne Person, Arima. Vielen Dank!!! – Keith

+0

Danke @Keith. Glücklich zu helfen :) –

+0

Auch akzeptieren und UV die Antwort, wenn die Antwort Ihnen geholfen hat –

Verwandte Themen