Werte einer Variablen höher setzen// Werte löschen
-
stephi1011
- Beiträge: 22
- Registriert: 16.05.2011, 10:26
Werte einer Variablen höher setzen// Werte löschen
Hallo zusammen,
ich habe 2 Fragen:
1) Ich möchte die Werte einer Variablen alle um 6 nach unten setzen. Dafür möchte ich eine neue Variable generieren. ich weiß, dass ich durch den lag-Befehl Variablen höher setzen kann, aber ich weiß nicht den "Gegenbefehl". Kann mir jemand helfen?
2) Ich habe für jede ID 7 Erhebungen. In einer Variablen gibt es zum Teil mehrere Kreuze. Ich möchte eine neue Variable generieren, in der immer nur noch von jeder Id das Kreuz bleibt, das pro ID als erstes gesetzt wurde und die anderen sollen gelöscht werden.
Bsp:
Fall Nummer Variable x
1 1
1 2 X
1 3
1 4
1 5 X
1 6
1 7
Ich möchte die Variable "X" erneut als z.B. "X2" erstellen und dann soll nur das erste kreuz, dass in diesem Fall bei 2 ist stehen bleiben. Je nach Fall sind die Kreuze anders verteilt.
Ich wäre sehr dankbar.
Liebe Grüße,
Stephi
ich habe 2 Fragen:
1) Ich möchte die Werte einer Variablen alle um 6 nach unten setzen. Dafür möchte ich eine neue Variable generieren. ich weiß, dass ich durch den lag-Befehl Variablen höher setzen kann, aber ich weiß nicht den "Gegenbefehl". Kann mir jemand helfen?
2) Ich habe für jede ID 7 Erhebungen. In einer Variablen gibt es zum Teil mehrere Kreuze. Ich möchte eine neue Variable generieren, in der immer nur noch von jeder Id das Kreuz bleibt, das pro ID als erstes gesetzt wurde und die anderen sollen gelöscht werden.
Bsp:
Fall Nummer Variable x
1 1
1 2 X
1 3
1 4
1 5 X
1 6
1 7
Ich möchte die Variable "X" erneut als z.B. "X2" erstellen und dann soll nur das erste kreuz, dass in diesem Fall bei 2 ist stehen bleiben. Je nach Fall sind die Kreuze anders verteilt.
Ich wäre sehr dankbar.
Liebe Grüße,
Stephi
-
drfg2008
- Beiträge: 2391
- Registriert: 06.02.2011, 19:58
re
1) indem du den lag über die andere Variable rechnest
2) Hier fällt mir nur eine kompliziertere Lösung ein: Variable, die das X enthält als string abspeichern, dieser String Variablen über Substring das X auslesen, diese dann als Filterkriterium nehmen und über Sortieren die erste nehmen, alle anderen löschen.
Gruß
2) Hier fällt mir nur eine kompliziertere Lösung ein: Variable, die das X enthält als string abspeichern, dieser String Variablen über Substring das X auslesen, diese dann als Filterkriterium nehmen und über Sortieren die erste nehmen, alle anderen löschen.
Gruß
drfg2008
-
drfg2008
- Beiträge: 2391
- Registriert: 06.02.2011, 19:58
re
wie sieht denn der Datensatz aus? So etwa ...
Diese Syntax ausführen. Steht das x in einer separaten Variablen?
Gruß
Code: Alles auswählen
DATA LIST FREE
/ Fall (f8.2) Nummer (f8.2) Variable_X (A10).
BEGIN DATA
1 1 .
1 2 X
1 3 .
1 4 .
1 5 X
1 6 .
1 7 .
2 1 .
2 2 X
2 3 .
2 4 .
2 5 X
2 6 .
2 7 .
3 1 .
3 2 X
3 3 .
3 4 .
3 5 X
3 6 X
3 7 .
END DATA.
Diese Syntax ausführen. Steht das x in einer separaten Variablen?
Gruß
drfg2008
-
drfg2008
- Beiträge: 2391
- Registriert: 06.02.2011, 19:58
re
Ja genauso sieht mein datensatz ungefähr aus
Genau oder ungefähr ?
Hier die Lösung:
Code: Alles auswählen
DATA LIST FREE
/ Fall (f8.2) Nummer (f8.2) Variable_X (A10).
BEGIN DATA
1 1 .
1 2 X
1 3 .
1 4 .
1 5 X
1 6 .
1 7 .
2 1 .
2 2 X
2 3 .
2 4 .
2 5 X
2 6 .
2 7 .
3 1 .
3 2 X
3 3 .
3 4 .
3 5 X
3 6 X
3 7 .
END DATA.
IF (Variable_X = "X") v001=$CASENUM.
EXECUTE.
SELECT IF (v001 > 0).
EXECUTE.
* Doppelte Fälle ermitteln.
SORT CASES BY Fall(A).
MATCH FILES
/FILE=*
/BY Fall
/FIRST=PrimaryFirst
/LAST=PrimaryLast.
DO IF (PrimaryFirst).
COMPUTE MatchSequence=1-PrimaryLast.
ELSE.
COMPUTE MatchSequence=MatchSequence+1.
END IF.
LEAVE MatchSequence.
FORMAT MatchSequence (f7).
COMPUTE InDupGrp=MatchSequence>0.
SORT CASES InDupGrp(D).
MATCH FILES
/FILE=*
/DROP=PrimaryLast InDupGrp MatchSequence.
VARIABLE LABELS PrimaryFirst 'Indicator of each first matching case as Primary'.
VALUE LABELS PrimaryFirst 0 'Duplicate Case' 1 'Primary Case'.
VARIABLE LEVEL PrimaryFirst (ORDINAL).
FREQUENCIES VARIABLES=PrimaryFirst.
EXECUTE.
FILTER OFF.
USE ALL.
SELECT IF (PrimaryFirst = 1).
EXECUTE.
Gruß
drfg2008
-
stephi1011
- Beiträge: 22
- Registriert: 16.05.2011, 10:26
Erstmal Vielen Dank für deine Mühe.
ich muss jedoch nochmal nachhaken-mein Datensatz umfasst insgesamt 20.000 Fälle -daher die Angabe "ungefähr" und die Jreute verteilen sich natürlich bei jeder Id unterschiedlich.
ich hab versucht die Syntax laufen zu lassen und bei
"IF (Variable_X = "X") v001=$CASENUM.
EXECUTE.
SELECT IF (v001 > 0)."
meine Variablennamen eingesetzt. Den oberen teil habe ich - wahrscheinlich fälschlicherweise- weggelasen. Da ich ja viel mehr Fälle habe...oder versteh ich es falsch?
Würd mich über eine erneute Hilfe freuen.
LG
ich muss jedoch nochmal nachhaken-mein Datensatz umfasst insgesamt 20.000 Fälle -daher die Angabe "ungefähr" und die Jreute verteilen sich natürlich bei jeder Id unterschiedlich.
ich hab versucht die Syntax laufen zu lassen und bei
"IF (Variable_X = "X") v001=$CASENUM.
EXECUTE.
SELECT IF (v001 > 0)."
meine Variablennamen eingesetzt. Den oberen teil habe ich - wahrscheinlich fälschlicherweise- weggelasen. Da ich ja viel mehr Fälle habe...oder versteh ich es falsch?
Würd mich über eine erneute Hilfe freuen.
LG
-
drfg2008
- Beiträge: 2391
- Registriert: 06.02.2011, 19:58
re
der erste Teil des Programms dient nur zur Generierung des Datensatzes und muss natürlich weggelassen werden. Allerdings müssen sämtliche relevanten Variablennamen geändert werden:
Fall
Nummer
Variable_X
(mit Suche-Ersetze geht das ganz gut)
Eigentlich ist das Programm ganz einfach und auch über Windows Menüführung zu lösen, nämlich über „doppelte Fälle ermitteln“.
1. Schritt
IF (Variable_X = "X") v001=$CASENUM.
EXECUTE.
… generiert nur eine Fallvariable, dort, wo kein missing gesetzt ist.
2. Schritt
SELECT IF (v001 > 0).
EXECUTE.
… löscht alle auf missing gesetzte Fälle
3. Schritt
… jetzt werden alle doppelten Fälle ermittelt. Der erste angetroffene Fall wird als erster markiert (Programm stammt aus der Menüführung bei SPSS)
* Doppelte Fälle ermitteln.
SORT CASES BY Fall(A).
MATCH FILES
/FILE=*
/BY Fall
/FIRST=PrimaryFirst
/LAST=PrimaryLast.
DO IF (PrimaryFirst).
COMPUTE MatchSequence=1-PrimaryLast.
ELSE.
COMPUTE MatchSequence=MatchSequence+1.
END IF.
LEAVE MatchSequence.
FORMAT MatchSequence (f7).
COMPUTE InDupGrp=MatchSequence>0.
SORT CASES InDupGrp(D).
MATCH FILES
/FILE=*
/DROP=PrimaryLast InDupGrp MatchSequence.
VARIABLE LABELS PrimaryFirst 'Indicator of each first matching case as Primary'.
VALUE LABELS PrimaryFirst 0 'Duplicate Case' 1 'Primary Case'.
VARIABLE LEVEL PrimaryFirst (ORDINAL).
FREQUENCIES VARIABLES=PrimaryFirst.
EXECUTE.
4. Schritt
nur die als primär gekennzeichneten Fälle verbleiben im Datensatz
FILTER OFF.
USE ALL.
SELECT IF (PrimaryFirst = 1).
EXECUTE.
Gruß
Fall
Nummer
Variable_X
(mit Suche-Ersetze geht das ganz gut)
Eigentlich ist das Programm ganz einfach und auch über Windows Menüführung zu lösen, nämlich über „doppelte Fälle ermitteln“.
1. Schritt
IF (Variable_X = "X") v001=$CASENUM.
EXECUTE.
… generiert nur eine Fallvariable, dort, wo kein missing gesetzt ist.
2. Schritt
SELECT IF (v001 > 0).
EXECUTE.
… löscht alle auf missing gesetzte Fälle
3. Schritt
… jetzt werden alle doppelten Fälle ermittelt. Der erste angetroffene Fall wird als erster markiert (Programm stammt aus der Menüführung bei SPSS)
* Doppelte Fälle ermitteln.
SORT CASES BY Fall(A).
MATCH FILES
/FILE=*
/BY Fall
/FIRST=PrimaryFirst
/LAST=PrimaryLast.
DO IF (PrimaryFirst).
COMPUTE MatchSequence=1-PrimaryLast.
ELSE.
COMPUTE MatchSequence=MatchSequence+1.
END IF.
LEAVE MatchSequence.
FORMAT MatchSequence (f7).
COMPUTE InDupGrp=MatchSequence>0.
SORT CASES InDupGrp(D).
MATCH FILES
/FILE=*
/DROP=PrimaryLast InDupGrp MatchSequence.
VARIABLE LABELS PrimaryFirst 'Indicator of each first matching case as Primary'.
VALUE LABELS PrimaryFirst 0 'Duplicate Case' 1 'Primary Case'.
VARIABLE LEVEL PrimaryFirst (ORDINAL).
FREQUENCIES VARIABLES=PrimaryFirst.
EXECUTE.
4. Schritt
nur die als primär gekennzeichneten Fälle verbleiben im Datensatz
FILTER OFF.
USE ALL.
SELECT IF (PrimaryFirst = 1).
EXECUTE.
Gruß
drfg2008



