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!
Datum - Bereiche festelegen und umkodieren
-
- Beiträge: 14
- Registriert: 11.08.2008, 12:52
-
- Beiträge: 2391
- Registriert: 06.02.2011, 19:58
re
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:
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
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ß
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.
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 .
Wie gesagt, hängt von deinen Programmierkenntnissen ab.
Gruß
drfg2008
-
- Beiträge: 14
- Registriert: 11.08.2008, 12:52
-
- Beiträge: 2391
- Registriert: 06.02.2011, 19:58
re
doch: Xdate
http://www.ats.ucla.edu/stat/spss/modules/dates.htm
http://www.spsstools.net/SampleSyntax.htm#DatesAndTimes
Gruß
http://www.ats.ucla.edu/stat/spss/modules/dates.htm
http://www.spsstools.net/SampleSyntax.htm#DatesAndTimes
Gruß
drfg2008
-
- Beiträge: 14
- Registriert: 11.08.2008, 12:52
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!
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!
-
- Beiträge: 1733
- Registriert: 11.03.2010, 22:28
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.
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.