Ich möchte schauen wann ein Zustand im Längsschnitt bei Personen eines Haushaltes gleichzeitig auftritt...dazu nutze ich zunächst die Loop-Funktion, um diesen Zustand im Längsschnitt abzufassen und möchte dann mit der LAG-Funktion diesen Zustand bei den Personen eines Haushaltes abgleichen. Jedoch sagt SPSS mir, dass "das erste Argument der Funktion LAG eine Variable sein" muss...was sich wohl auf (k(x) = 15) bezieht. Kann ich den LAG-Befehl denn überhaupt auf einen Vektor anwenden? Kann darüber leider nichts finden und komme an dieser Stelle nicht weiter...
meine Syntax lautet:
vector k = SES_1 to SES_624.
compute Zustand = 0.
loop x = 1 to 624.
do if (Haushalt = LAG(Haushalt)) AND (k(x) = 15)
AND (k(x) = LAG(k(x))).
RECODE Zustand (0= 1).
do if (Zustand =1).
BREAK.
End if.
End if.
End loop.
EXECUTE.
Hat jemand einen Tipp?
Lag-Befehl auf eine Vektor-Variable anwendbar?
-
- Beiträge: 4
- Registriert: 27.02.2012, 14:13
-
- Beiträge: 4
- Registriert: 27.02.2012, 14:13
re re
Also:
mit dem Befehl vector SES_(624) erstellt man 624 Mal die Variable SES.
Ich habe diese Variable bereits 624 Mal (die SES ist in meinem Beispiel die soziale Erwerbssituation für 624 Monate).
Im 1. Schritt habe ich k als Platzhalter definiert, den der Loop für jeden Fall 624 Mal durchlaufen soll. In k(x) spreche ich dann den jeweiligen Schritt an.
Ich habe in meinem Datensatz Personen, die einem Haushalt angehören und diese einzelnen Personen aus einem Haushalt sollen daraufhin untersucht werden wann sie gleichzeitig im Zeitverlauf die Ausprägung 15 aufweisen.
Da der Loop das nur für jeden Fall zeilenweise seperat macht, wollte ich die LAG-Funktion einbeziehen, um auf den Fall dadrüber Bezug zu nehmen. Da jetzt aber Fehlermeldungen von SPSS kommen, frage ich mich ob man LAG-Befehle mit Vektoren/allgemeinen Ausdrücken in Verbindung bringen kann!?
Danke für eure Hilfe!
mit dem Befehl vector SES_(624) erstellt man 624 Mal die Variable SES.
Ich habe diese Variable bereits 624 Mal (die SES ist in meinem Beispiel die soziale Erwerbssituation für 624 Monate).
Im 1. Schritt habe ich k als Platzhalter definiert, den der Loop für jeden Fall 624 Mal durchlaufen soll. In k(x) spreche ich dann den jeweiligen Schritt an.
Ich habe in meinem Datensatz Personen, die einem Haushalt angehören und diese einzelnen Personen aus einem Haushalt sollen daraufhin untersucht werden wann sie gleichzeitig im Zeitverlauf die Ausprägung 15 aufweisen.
Da der Loop das nur für jeden Fall zeilenweise seperat macht, wollte ich die LAG-Funktion einbeziehen, um auf den Fall dadrüber Bezug zu nehmen. Da jetzt aber Fehlermeldungen von SPSS kommen, frage ich mich ob man LAG-Befehle mit Vektoren/allgemeinen Ausdrücken in Verbindung bringen kann!?
Danke für eure Hilfe!
-
- Beiträge: 2391
- Registriert: 06.02.2011, 19:58
re
wie gesagt, das ist nicht kompatibel mit SPSS Syntax.
Gute Referenz:
http://www.spsstools.net/
oder:
http://spssx-discussion.1045642.n5.nabble.com/
Gute Referenz:
http://www.spsstools.net/
oder:
http://spssx-discussion.1045642.n5.nabble.com/
drfg2008
-
- Beiträge: 4
- Registriert: 27.02.2012, 14:13
Da die Antworten bisher weniger hilfreich waren, habe ich inzwischen selbst eine Lösung gefunden:
Den LAG-Befehl benötige ich für meine Frage im Loop zunächst nicht...ich weiß leider auch nicht ob die Antworten von drfg2008 darauf bezogen waren?
Ich habe ich es nun wie folgt gelöst:
1. Zunächst lege ich 4 neue Variablen an:
comp startE1=0.
comp endE1=0.
comp anerE1=0.
comp dauE1=0.
VARIABLE LABELS startE1 'Monat: Beginn des ersten ausgewählten SES-Ereignisses'/ endE1 'Monat: Ende des ersten ausgewählten SES-Ereignisses'/ anerE1 'Anschlussereignis zur ausgewählten Episode'/dauE1'Dauer des ersten ausgewählten SES-Ereignisses'.
EXECUTE.
2. Dann bestimme ich das erste Ereignis (Start, Ende, Dauer des Zustands in der SES, den ich erfassen möchte und welches Ereignis daran anschließt)
*Start des Ereignisses
vector r = SES_1 to SES_624.
loop x= 1 to 624.
if (r(x) = 15) startE1=x.
end loop if (r(x) =15).
EXECUTE.
*Alter bestimmen
do if startE1 gt 0.
compute Jahr = trunc(((startE1-(GBMO-1))+(14*12))/12).
end if.
EXECUTE.
fre Jahr.
do if startE1 gt 0.
compute Monat=((((startE1-(GBMO-1))+(14*12))/12) - trunc(((startE1-(GBMO-1))+(14*12))/12))*12.
end if.
EXECUTE.
fre Monat.
*Ende des Ereignisses
do if startE1 gt 0.
vector l = SES_1 to SES_624.
loop x = startE1 to 624.
if (l(x) =15) endE1=x.
end loop if (l(x) ~= 15).
end if.
EXECUTE.
*Dauer des Ereignisses
do if startE1 gt 0.
vector r = SES_1 to SES_624.
loop x = startE1 to 624.
if (r(x) =15) dauE1 = dauE1+1.
end loop if (r(x) ne 15).
end if.
EXECUTE.
*Anschluss an das Ereignis in der SES
do if startE1 gt 0.
vector s = SES_1 to SES_624.
loop x= startE1 to 624.
if (s(x) ne 15) anerE1= s(x).
end loop if (s(x) ne 15).
end if.
EXECUTE.
3. Mithilfe des LAG-Befehls Start für Personen eines Haushaltes abgleichen.
Und es funktioniert
Den LAG-Befehl benötige ich für meine Frage im Loop zunächst nicht...ich weiß leider auch nicht ob die Antworten von drfg2008 darauf bezogen waren?
Ich habe ich es nun wie folgt gelöst:
1. Zunächst lege ich 4 neue Variablen an:
comp startE1=0.
comp endE1=0.
comp anerE1=0.
comp dauE1=0.
VARIABLE LABELS startE1 'Monat: Beginn des ersten ausgewählten SES-Ereignisses'/ endE1 'Monat: Ende des ersten ausgewählten SES-Ereignisses'/ anerE1 'Anschlussereignis zur ausgewählten Episode'/dauE1'Dauer des ersten ausgewählten SES-Ereignisses'.
EXECUTE.
2. Dann bestimme ich das erste Ereignis (Start, Ende, Dauer des Zustands in der SES, den ich erfassen möchte und welches Ereignis daran anschließt)
*Start des Ereignisses
vector r = SES_1 to SES_624.
loop x= 1 to 624.
if (r(x) = 15) startE1=x.
end loop if (r(x) =15).
EXECUTE.
*Alter bestimmen
do if startE1 gt 0.
compute Jahr = trunc(((startE1-(GBMO-1))+(14*12))/12).
end if.
EXECUTE.
fre Jahr.
do if startE1 gt 0.
compute Monat=((((startE1-(GBMO-1))+(14*12))/12) - trunc(((startE1-(GBMO-1))+(14*12))/12))*12.
end if.
EXECUTE.
fre Monat.
*Ende des Ereignisses
do if startE1 gt 0.
vector l = SES_1 to SES_624.
loop x = startE1 to 624.
if (l(x) =15) endE1=x.
end loop if (l(x) ~= 15).
end if.
EXECUTE.
*Dauer des Ereignisses
do if startE1 gt 0.
vector r = SES_1 to SES_624.
loop x = startE1 to 624.
if (r(x) =15) dauE1 = dauE1+1.
end loop if (r(x) ne 15).
end if.
EXECUTE.
*Anschluss an das Ereignis in der SES
do if startE1 gt 0.
vector s = SES_1 to SES_624.
loop x= startE1 to 624.
if (s(x) ne 15) anerE1= s(x).
end loop if (s(x) ne 15).
end if.
EXECUTE.
3. Mithilfe des LAG-Befehls Start für Personen eines Haushaltes abgleichen.
Und es funktioniert

-
- Beiträge: 2391
- Registriert: 06.02.2011, 19:58
re
>Error # 4258 in column 12. Text: SES_1Und es funktioniert Smile
>An existing variable named on the VECTOR command is invalid. The variable
>either does not exist or is a system ($) variable. To define a vector
>composed of new variables, use the form VECTOR(5) replacing the "5" with the
>number of variables to define.
>Execution of this command stops.
>Error # 4260 in column 21. Text: SES_624
>An existing variable named on the VECTOR command is invalid. The variable
>either does not exist or is a system ($) variable.
>Error # 4023 in column 5. Text: r
>An expression contains a string of characters followed by a left parenthesis,
>indicating that the string of characters is a function or vector name, but the
>characters do not match any existing function or vector. Check the spelling.
>Execution of this command stops.
>Error # 4023 in column 14. Text: r
>An expression contains a string of characters followed by a left parenthesis,
>indicating that the string of characters is a function or vector name, but the
>characters do not match any existing function or vector. Check the spelling.
>Execution of this command stops.
>Warning # 142. Command name: EXECUTE
>LOOP has no effect on this command.
>Error # 4095. Command name: EXECUTE
>The transformations program contains an unclosed LOOP, DO IF, or complex file
>structure. Use the level-of-control shown to the left of the SPSS Statistics
>commands to determine the range of LOOPs and DO IFs.
>Execution of this command stops.
drfg2008