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!
Anzahl verschiedener Werte in String-Variable zählen
-
- Beiträge: 7
- Registriert: 01.06.2013, 13:16
-
- Beiträge: 2391
- Registriert: 06.02.2011, 19:58
re
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)
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
-
- Beiträge: 7
- Registriert: 01.06.2013, 13:16
Hallo zusammen,
vielen Dank für eure Antworten. Sie haben mir sehr weitergeholfen. Folgende Syntax habe ich nun verwendet:
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!
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).
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!