Hallo liebe Leute,
ich verzweifle gerade daran, aus einer numerischen Variable mit 5 bis 6 Zeichen eine Datums-Variable zu erstellen. An sich ist das ja ganz einfach: Die numerische in eine String-Variable umwandeln und dann den Date and Time Wizard zum Transformieren benutzen (Option: Create a date/time variable from a string containing a date or time).
Allerdings werden nur die Variablen mit 6 Stellen erkannt (z.B. 100396 fuer den 10.3.1996), aber nicht die mit 5 Stellen (z.B. 10396 fuer den 1.3.1996) und bei letzteren bleiben die Felder nach der Transformation leer. Nun habe ich versucht aus der 10396 eine 010396 zu machen, finde aber (natuerlich) keine Moeglichkeit.
Kann mir jemand hier weiterhelfen?
Liebe Gruesse
DRINGEND! Datumserstellung bei d/mm/yy und dd/mm/yy
-
Moegel
- Beiträge: 7
- Registriert: 24.04.2012, 14:22
-
drfg2008
- Beiträge: 2391
- Registriert: 06.02.2011, 19:58
re
etwas umständlich, aber funktionsfähig:
Code: Alles auswählen
********erzeugt den Datensatz******************
DATA LIST
/var00001 (A6) .
BEGIN DATA
100396
10396
END DATA.
***********************************
STRING year (a2).
STRING month (a2).
STRING day (a2).
STRING day_ (a2).
STRING datum_neu (a8).
EXECUTE.
COMPUTE anzahl=CHAR.LENGTH(VAR00001).
EXECUTE.
DO IF anzahl = 6.
COMPUTE year=CHAR.SUBSTR(VAR00001,5,2).
COMPUTE month=CHAR.SUBSTR(VAR00001,3,2).
COMPUTE day=CHAR.SUBSTR(VAR00001,1,2).
ELSE IF anzahl = 5.
COMPUTE year=CHAR.SUBSTR(VAR00001,4,2).
COMPUTE month=CHAR.SUBSTR(VAR00001,2,2).
COMPUTE day=CHAR.SUBSTR(VAR00001,1,1).
else.
end if.
EXECUTE.
COMPUTE anzahl2=CHAR.LENGTH(day).
EXECUTE.
DO IF anzahl2=1.
COMPUTE day_=CONCAT("0",day).
ELSE IF anzahl2 = 2.
COMPUTE day_=day.
else.
end if.
EXECUTE.
COMPUTE datum_neu =CONCAT(day_,"/",month,"/",year).
EXECUTE.
DELETE VARIABLES
year
month
day
day_
anzahl
anzahl2.
* Date and Time Wizard: datum.
COMPUTE datum=number(datum_neu, EDATE8).
EXECUTE.
VARIABLE LABELS datum 'Datum DDMMYY'.
VARIABLE LEVEL datum (SCALE).
FORMATS datum (EDATE8).
VARIABLE WIDTH datum(8).
EXECUTE.
drfg2008
-
Moegel
- Beiträge: 7
- Registriert: 24.04.2012, 14:22
re
Hallo drfg2008, moin zusammen
vielen Dank, das funktioniert schon mal! Ich habe aber nun eine weitere Frage:
Es handelt sich nicht um zwei numerische Ausprägungen, die ich umwandeln möchte, sondern um eine ganz Menge. Nun möchte ich die nicht alle manuell zwischen BEGIN DATA und END DATA eingeben. Kann man hier mit LOWEST/ HIGHEST oder THRU arbeiten, ich meine, dass ich die Ausprägungen mit dem niedrigsten und dem höchsten Wert eingebe und das Programm die Prozedur für alle Ausprägungen der Variablen innerhalb dieses Bereiches ausführt? Habe das versucht, aber es funktioniert irgendwie nicht.
Dazu kommt noch ein anderes Problem: Die Datumsvariablen landen jetzt natürlich in einem zweiten Datensatz. Durch die Werte der Ausgangsvariable kann ich ja zurückverfolgen, welchem Fall im alten Datensatz ich welche Ausprägungen der neuen Datumsvariablen zuordne. So wie eine Haushalts-ID bei Personen- und Haushaltsdatensätzen eines Surveys, denke ich mal. Nur habe ich leider keinen Schimmer, wie ich das zusammenführe. Kannst Du/ihr mir da einen Tip geben?
vielen Dank, das funktioniert schon mal! Ich habe aber nun eine weitere Frage:
Es handelt sich nicht um zwei numerische Ausprägungen, die ich umwandeln möchte, sondern um eine ganz Menge. Nun möchte ich die nicht alle manuell zwischen BEGIN DATA und END DATA eingeben. Kann man hier mit LOWEST/ HIGHEST oder THRU arbeiten, ich meine, dass ich die Ausprägungen mit dem niedrigsten und dem höchsten Wert eingebe und das Programm die Prozedur für alle Ausprägungen der Variablen innerhalb dieses Bereiches ausführt? Habe das versucht, aber es funktioniert irgendwie nicht.
Dazu kommt noch ein anderes Problem: Die Datumsvariablen landen jetzt natürlich in einem zweiten Datensatz. Durch die Werte der Ausgangsvariable kann ich ja zurückverfolgen, welchem Fall im alten Datensatz ich welche Ausprägungen der neuen Datumsvariablen zuordne. So wie eine Haushalts-ID bei Personen- und Haushaltsdatensätzen eines Surveys, denke ich mal. Nur habe ich leider keinen Schimmer, wie ich das zusammenführe. Kannst Du/ihr mir da einen Tip geben?
-
drfg2008
- Beiträge: 2391
- Registriert: 06.02.2011, 19:58
re
Begin Data ... End data dient nur dazu, ein Probebeispiel mit zwei Daten (entsprechend deinem Beispiel) zu erstellen.
Für dich relevant ist nur der Programmteil darunter, wobei du die Namen deiner Variablen natürlich anpassen musst.
Dann erzeugt die Syntax in deinem Datensatz eine neue Variable: datum.
Ein wenig Syntaxkenntnisse brauchst du schon, um das umzusetzen. Ich kenne ja deinen Datensatz nicht.
Die Ausgangsvariable hier lautet: var00001.
Du könntest zum Beispiel deine Variable (sagen wir mal sie lautet: hallo123) in var00001 umbennen. Oder über compute
Dann den Rest kopieren und starten.
Für dich relevant ist nur der Programmteil darunter, wobei du die Namen deiner Variablen natürlich anpassen musst.
Dann erzeugt die Syntax in deinem Datensatz eine neue Variable: datum.
Ein wenig Syntaxkenntnisse brauchst du schon, um das umzusetzen. Ich kenne ja deinen Datensatz nicht.
Die Ausgangsvariable hier lautet: var00001.
Du könntest zum Beispiel deine Variable (sagen wir mal sie lautet: hallo123) in var00001 umbennen. Oder über compute
Code: Alles auswählen
comp var00001 = hallo123.
exe.drfg2008



