Datum - Bereiche festelegen und umkodieren

Fragen und Diskussionen rund um die Arbeit mit SPSS. Für allgemeine Statistik-Themen, die nicht mit SPSS zusammenhängen, bitte das Statistik-Forum nutzen.
Antworten
abrax
Beiträge: 14
Registriert: 11.08.2008, 12:52

Datum - Bereiche festelegen und umkodieren

Beitrag von abrax »

Hallo,

ich habe ein (hoffentlich) simples Problem bei angestrebten Berechnungen mit einer Datumsvariablen.

Und zwar habe ich das Datum in meiner SPSS-Date als DD.MM.YYYY vorliegen und würden nun gerne bestimmten Bereichen (z.B. vom 16.04.2010 bis 30.06.2010) ein Kategorie (Jahreszeit, z.B. Frühling) zuweisen.

Wäre super, wenn mir da jemand auf die Schnelle, am besten mit dem entsprechenden Syntax, weiterhelfen könnte.

Vielen Dank im Voraus!
drfg2008
Beiträge: 2391
Registriert: 06.02.2011, 19:58

re

Beitrag von drfg2008 »

ich weiß jetzt nicht wie gut deine Syntax Kenntnisse sind. Eine ganz unelegante, aber simple Lösung besteht darin auszunutzen, dass das Datum als Sekunden im Gregor. Kalender 1582 abgespeichert ist. Jedem Datum ist genau eine Zahl zugeordnet. Und die findet SPSS für dich heraus:

Code: Alles auswählen

*Daten:

*15-Apr-2010
*16-Apr-2010
*30-Jun-2010
*01-Aug-2011

* das sind die Sekunden:

*13490668800
*13490755200
*13497235200
*13531536000


*aus dem Datum die Zeit in Sekunden berechnen Gregorianischer Kalender 1582.


COMPUTE date_decimal=datum.
EXECUTE.

*das ginge so:

RECODE date_decimal 
 (Lowest thru 13490755199=1) 
 (Lowest thru 13497235199=2) 
 (Lowest thru 13531535999=3)
 (ELSE=4) 
 INTO jahreszeit_1.
EXECUTE.

* aber auch so:

RECODE datum 
 (Lowest thru 13490755199=1) 
 (Lowest thru 13497235199=2) 
 (Lowest thru 13531535999=3)
 (ELSE=4) 
 INTO jahreszeit_2.
EXECUTE.
Es gibt elegantere, die sind aber auch komplizierter:

http://www.spsstools.net/SampleSyntax.htm#DatesAndTimes

insbesondere für dein Problem

http://www.spsstools.net/Syntax/DatesTi ... fDates.txt

Code: Alles auswählen

DATA LIST FREE /id (F8.0) date1 (ADATE10).
BEGIN DATA
1 01/01/2001 2 03/15/2000 3 12/21/1999
4 11/11/2004 5 06/05/2002 6 07/15/2003
END DATA.

* Filter cases from 2001 on.
COMPUTE filt = XDATE.YEAR(date1) >= 2001.
FILTER BY filt.
SUMMARIZE
  /TABLES=date1
  /FORMAT=VALIDLIST NOCASENUM TOTAL
  /TITLE='Dates > 2001'
  /MISSING=VARIABLE
  /CELLS=NONE .


*Filter cases between Jan 2000 and June 30,2003.
USE ALL.
COMPUTE filt = RANGE(date1,DATE.MDY(1,1,2000),DATE.MDY(6,30,2003)).
FILTER BY filt.
EXECUTE.
SUMMARIZE
  /TABLES=date1
  /FORMAT=VALIDLIST NOCASENUM TOTAL
  /TITLE='Dates between Jan 1, 2000 and June 30,2003'
  /MISSING=VARIABLE
  /CELLS=NONE .

wenn du so vorgehts und mehrere Bereiche definieren willst, dann wäre das über ein Makro sinnvoll.

Wie gesagt, hängt von deinen Programmierkenntnissen ab.

Gruß
drfg2008
abrax
Beiträge: 14
Registriert: 11.08.2008, 12:52

Beitrag von abrax »

Vielen Dank für die guten Tipps.

Bei mir funktioniert es mit "Range" am besten. Da ich aber nur den Tag und den Monat (unabhängig vom Jahr) ansprechen will, bin ich da noch ein bisschen am basteln. Leider habe ich bisher in SPSS kein Datumsformat gefunden, das nur DD.MM. beinhaltet...
drfg2008
Beiträge: 2391
Registriert: 06.02.2011, 19:58

re

Beitrag von drfg2008 »

drfg2008
abrax
Beiträge: 14
Registriert: 11.08.2008, 12:52

Beitrag von abrax »

Also ich komme mit Xdate nicht weiter.

Ich finde folgende Xdate-Funktionen:
Xdate.Date
Xdate.Hour
Xdate.Jday
Xdate.Mday
Xdate.Minute
Xdate.Month
Xdate.Quarter
Xdate.Second
Xdate.Tday
Xdate.Time
Xdate.Week
Xdate.Wkday
Xdate.Year

Welche dieser Xdate-Funktionen gibt mir denn nur den Datumsteil (DD.MM - OHNE Jahr!) aus?
Das sind in den meisten Fällen ganzzahlige Werte, wie z.B. "Jahrtag", mit denen ich aber nichts anfangen kann, wenn ich jahresübergreifend einen bestimmten Datumsbereich definieren will (wegen Schaltjahr).

Vielleicht kann mir da jemand weiterhelfen. Das muss doch eigentlich funktionieren...

Vielen Dank im Voraus!
Generalist
Beiträge: 1733
Registriert: 11.03.2010, 22:28

Beitrag von Generalist »

Mal so auf die Schnelle und ohne Eleganz:

COMPUTE Jahr = XDATE.YEAR(datumsvariable) .
COMPUTE Monat = XDATE.MONTH(datumsvariable) .
COMPUTE Tag = XDATE.MDAY(datumsvariable) .

***Kennzeichne Fälle, deren Datumsvariable zwischen dem 21.3. und 20.6. liegt.
***Für Kennzeichnung der (Nicht-)Schaltjahre wird dabei die Funktion MODulus vewendet.

IF( (MOD(jahr,4) ne 0) AND
( (Monat = 4) OR (Monat=3 AND Tag > 20) OR (Monat=6 AND Tag < 21) ) ) fruehling = 1 .

Für Schaltjahre dann eben entsprechend abwandeln.
Anzeige:Statistik und SPSS: Die besten Bücher
Als Buch oder E-Book - Jetzt bestellen
spss datenanalyse
SPSS - Moderne Datenanalyse - Jetzt bestellen!
statistik datenanalyse
Statistik - Der Weg zur Datenanalyse - Jetzt bestellen!
Antworten