Anzahl verschiedener Werte in String-Variable zählen

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
phanthom
Beiträge: 7
Registriert: 01.06.2013, 13:16

Anzahl verschiedener Werte in String-Variable zählen

Beitrag von phanthom »

Hallo zusammen,

momentan stehe ich vor folgendem Problem:
Ich habe eine String-Variable (ich nenne sie hier einfach STRING), die sehr viele verschiedene Werte annehmen kann (> 1000).

Zudem habe ich eine zweite Variable PERSON im Datensatz, in der für jede Person im Datensatz eine eindeutige Nummer abgespeichert ist. Dabei kann es mehrere Fälle mit der gleichen Personennummer in PERSON geben.

Für jede Personennummer in PERSON möchte ich nun zählen, wie viele verschiedene Werte die Variable STRING annimmt.

Beispiel:
Fall 1: PERSON=1, STRING=aaa
Fall 2: PERSON=1, STRING=bbb
Fall 3: PERSON=1, STRING=aaa
Fall 4: PERSON=2, STRING=...
...

Wie beschrieben, würde ich nun gerne in einer neuen Variablen abspeichern, wie hoch die Anzahl der verschiedenen STRING-Werte je PERSON ist. In obigem Beispiel wäre das z.B. für PERSON=1 der Wert 2, da es zwei verschiedene Werte bei STRING gibt (aaa und bbb).

Ich dachte zur Lösung dieses Problems an eine Aggregationsfunktion, die für die Aggregationsvariable PERSON die Anzahl der verschiedenen Werte in STRING zählt. Allerdings gibt es eine solche Funktion unter "Daten > Aggregieren" leider nicht. Kann man so etwas vielleicht per Syntax programmieren?

Hat jemand sonst eine Idee, wie man dieses Problem lösen kann?

Vielen Dank für eure Hilfe!
Generalist
Beiträge: 1733
Registriert: 11.03.2010, 22:28

Beitrag von Generalist »

IF(person ne lag(person) OR string ne lag(string)) einzigartig = 1 .
EXECUTE.

AGGREGATE
/OUTFILE=* MODE=ADDVARIABLES
/BREAK=person
/einzigartig_sum=SUM(einzigartig).
drfg2008
Beiträge: 2391
Registriert: 06.02.2011, 19:58

re

Beitrag von drfg2008 »

Als Beispiel

person string_
1 a
1 b
1 c
1 a
2 s
2 d
2 f
3 g
3 h
3 j
3 k
3 k
3 k
4 l
4 l
4 l
4 l

(die Syntax -s.o.- würde dieses Beispiel nicht korrekt auszählen)

Code: Alles auswählen


SELECT IF person GE 1.
EXECUTE.
SORT CASES BY person(A) string(A).
IF ($CASENUM EQ 1) einzigartig = 1.
IF person NE lag(person) einzigartig = 1.
IF (person EQ lag(person) AND string NE lag(string)) einzigartig = 1.
EXECUTE.

DATASET DECLARE outfile.
AGGREGATE
  /OUTFILE='outfile'
  /BREAK=person
  /einzigartig_sum=SUM(einzigartig).

drfg2008
phanthom
Beiträge: 7
Registriert: 01.06.2013, 13:16

Beitrag von phanthom »

Hallo zusammen,

vielen Dank für eure Antworten. Sie haben mir sehr weitergeholfen. Folgende Syntax habe ich nun verwendet:

Code: Alles auswählen

SORT CASES BY PERSON(A) STRING(A). 
IF ($CASENUM EQ 1) einzigartig = 1. 
IF PERSON NE lag(PERSON) einzigartig = 1. 
IF (PERSON EQ lag(PERSON) AND STRING NE lag(STRING)) einzigartig = 1. 
EXECUTE. 

AGGREGATE 
/OUTFILE=* MODE=ADDVARIABLES 
/BREAK=PERSON
/einzigartig_sum=SUM(einzigartig).
Ich habe die Variablen also in die gleiche Datei schreiben lassen, statt in eine neue Datei. Mir war nur nicht klar, wieso du, drfg2008, noch folgenden Befehl eingebaut hast:

SELECT IF person GE 1.
EXECUTE.

Ich habe es ohne diesen gemacht und es hat anscheinend auch funktioniert. Was ich nicht erwähnt hatte: Auch die Variable PERSON ist eine String-Variable, d.h. sie nimmt Werte der Form A/001, A/002... B/001, ... an.

Vielleicht könnt ihr mir noch kurz sagen, ob der Befehl zur Auswahl der PERSON mit Werten größer gleich 1 notwendig ist.

Vielen Dank und viele Grüße!
drfg2008
Beiträge: 2391
Registriert: 06.02.2011, 19:58

re

Beitrag von drfg2008 »

... wegen der Missings, falls vorhanden, sonst nicht notwendig
drfg2008
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