Ich bin am verzweifeln: Ich müsste 350 Variablen manuell generieren und habe mich deshalb daran versucht, ein Makro in die SPSS Syntax einzubetten, damit das Ganze automatisch berechnet wird. Leider bekomme ich das nicht hin, vielleicht kann mir jemand hier helfen?
Ausgangslage:
Ich habe drei Variablen:
AggloNr ist eine Variable mit Werten für Kategorien von 1 bis 50.
St_Typ ist eine Variable mit Werten für Kategorien von 1 bis 3.
meters ist eine Variable mit Werten für zurückgelegte Distanzen in Metern.
Ich möchte jetzt für jede Kombination aus den ersten beiden Kategorien eine eigene Variable generieren. Da es 50 Kategorien bei Variable 1 gibt und 3 bei der zweiten, würde dies 350 neue Variablen generieren.
Das Problem:
Manuell würde ich das vermutlich wie folgt berechnen:
- Code: Alles auswählen
DATASET ACTIVATE segmente_agglo.
IF (Agglo00_No = 121 & st_typ = 1) a01_01=METERS.
IF (Agglo00_No = 230 & st_typ = 1) a02_01=METERS.
.
.
.
usw.
Da ich den Aufwand minimieren und mich etwas tiefer in die Materie einarbeiten möchte, habe ich nun versucht ein Makro schreiben das mir diese Arbeit abnimmt und automatisch diese 350 Variablen generiert.
Nach langer Testerei bin ich zu folgendem Ergebnis gekommen:
Makro-Code:
- Code: Alles auswählen
DEFINE PW_Agglo_ST_Typ (AggloNr = !TOKENS(1) / St_Typ = !TOKENS(1) / meters = !TOKENS(1))
!DO !I !IN (!AggloNr).
!DO !J !IN (!St_Typ).
!LET !varname=!CONCAT('a',!I,'_',!J).
!IF (!AggloNr=!I & !St_Typ=!J) !THEN !LET !varname=!meters.
!IFEND.
!DOEND.
!DOEND.
!ENDDEFINE.
Makro Call:
- Code: Alles auswählen
DATASET ACTIVATE segmente_agglo.
PW_Agglo_ST_Typ AggloNr = Agglooo_No St_Typ = st_typ meters = METERS.
Die zu Grunde liegende Überlegung war, dass es zwei Schlaufen braucht damit für jeden Strassentyp (St_Typ, inneres Loop) einmal der äussere Loop (AggloNr) durchlaufen wird. Insgesamte sollte ja so 50mal der innere Lopp dreimal ausgeführt werden.
Das Makro gibt so keinen Fehler aus, aber es geschieht auch absolut nichts. Deshalb bin ich völlig ratlos, ob ich einen Logik- / Denkfehler gemacht habe, oder aber ein technischer Fehler vorliegt.
Für Anregungen, Denkanstösse und Hilfe wäre ich überaus dankbar!
Vielen Dank und freundliche Grüsse
Jonas Bley