Kalendermonatsdifferenzen

Die geringe Funktionsumfang des SPSS Modeler für Datums-Berechnungen bedingt immer wieder die Verwendung wenig intuitiver Umwege.

 

Problem

 

Möchte man Daten von Ereignissen filtern, die in einer bestimmten Kalendermonat vor dem aktuellen Kalendermonat liegen, kommt man mit

 

date_months_difference(@TODAY,EREIGNISDATUM) 

 

nicht sehr weit, da diese reelle Zahl je nach Lage des aktuellen bzw. des Ereignisdatums im jeweiligen Kalendermonat um fast bis zu 2 Monate variieren kann.

 

Beispiele


Systemdatum = 01.03.14, Ereignisdatum = 31.01.14 => date_months_difference('2014-01-31','2014-03-01') = 0,953

 

Systemdatum = 31.03.14, Ereignisdatum = 01.01.14 => date_months_difference('2014-01-01','2014-03-31') = 2,924

 

Auch das indirekte Entfernen der jeweiligen Tagesinformationen in den Datums-Werten ist hier nicht zielführend. Der SPSS Modeler bietet mit date_in_months(DATUM) eine Funktion, die als reelle Zahl die (auch anteilige) Anzahl an Monaten in Bezug auf ein Basisdatum liefert. Der ganzzahlige Anteil dieses Funktionsergebnisses ist aber nicht für jedes Datum im selben Kalendermonat identisch. Es liefert beispielsweise

 

date_in_months('2014-01-01') = 1367.984

date_in_months('2014-03-04') = 1370.021

 

Der Grund dafür liegt im Monatsverständnis des Modelers. Für sein Rechenwerk sind alle Monate gleich lang. Damit das im Durchschnitt über alle Monate gut funktioniert, wurde der Wert auf 30,4375 Tage (ein Jahr hat entsprechend 365,25 Tage) festgelegt (siehe http://www-01.ibm.com/support/docview.wss?uid=swg21484941).

 

Lösungsmöglichkeit


Das Konvertieren des Datums in Zahlenwerte und aufwendiges Rechnen mit diesen. Für Das Ausrechnen der vollen Kalendermonate zwischen Selektionsdatum (Systemdatum) und dem letzten Kauf (Datum = "LETZTER_KAUF") benötigt man folgende Formel:

 

(datetime_year(@TODAY)*100 + datetime_month(@TODAY))

- (datetime_year(LETZTER_KAUF)*100 + datetime_month(LETZTER_KAUF))

- 88 * (  datetime_year(@TODAY) div 100

        - datetime_year(LETZTER_KAUF)

       )