Variable erstellen anhand von Zeichenfolge-Teil

Alles rund um SPSS Syntax und Programmierung.

Variable erstellen anhand von Zeichenfolge-Teil

Beitragvon garryman90 » Mo 17. Mai 2021, 10:06

Hallo,

ich benötige für folgendes Problem Hilfe: Meine Datensätze haben IDs, deren erster Teil der Zeichenfolge ihre Gruppenzugehörigkeit definieren kann. Beispiel:

Variablenname: fb0501

AB-01-01
AB-01-02
AB-01-03
AB-01-04
AB-01-05
...
AB-02-01
AB-02-02
AB-02-03
AB-02-04
AB-02-05
...
XY-04-01
XY-04-02
XY-04-03
XY-04-04
XY-04-05

Ich möchte eine neue Variable bilden, die die ersten 4 Zeichen (5 mit Bindestrich) berücksichtigt, ohne die hinteren 2 (3). Ich bin auch schon ein wenig vorangekommen. Ich habe folgende Syntax erstellt:

STRING fb0501 (A10).
COMPUTE fb0501_neu=CHAR.SUBSTR(fb0501,2).
VARIABLE LABELS fb0501_neu 'TEST'.
EXECUTE.

Das klappt auch schon wunderbar, nur wie erzähle ich dem Kollegen denn, dass er nicht AB Position X die neue Variable erstellen soll, sondern nur BIS Position Y? Die "2" im COMPUTE-Befehl am Schluss muss irgendwie angepasst werden.

Vielen Dank!
garryman90
 
Beiträge: 3
Registriert: Sa 2. Mai 2020, 14:58
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Variable erstellen anhand von Zeichenfolge-Teil

Beitragvon ponderstibbons » Mo 17. Mai 2021, 10:32

Steht doch in der Funktionsbeschreibung, CHAR.SUBSTR(strexpr,pos[,length]).

Mit freundlichen Grüßen

PonderStibbons
ponderstibbons
 
Beiträge: 2523
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 2
Danke bekommen: 257 mal in 256 Posts

Re: Variable erstellen anhand von Zeichenfolge-Teil

Beitragvon garryman90 » Mo 17. Mai 2021, 12:24

Danke, stimmt und hat geklappt. Mir ist jetzt ein weiteres Problem aufgekommen: In einer Datei haben nicht alle Datensätze gleichmäßig viele Zeichen zwischen den Bindestrichen der IDs, um die Gruppen zu bilden (z.B. AB-01-01, CD-009-01, BFG-03-034, etc). Ich kann das nur lösen, wenn ich SPSS sage, dass die letzten Zeichen bis zum letzten Bindestrich weggenommen werden sollen.

Das kann ich nicht über die Stringlänge der Substringvariable lösen, da er mir dann hinten bei einigen Datensätzen einfach Leerzeichen wegkürzt, wenn die Zeichenfolge weniger als 10 Zeichen hat. Gibt es eine Möglichkeit SPSS zu sagen, dass er die Zeichenfolge bis zum zweiten "Bindestrich minus 1 Zeichen" erstellen soll?

Danke nochmal.
garryman90
 
Beiträge: 3
Registriert: Sa 2. Mai 2020, 14:58
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Variable erstellen anhand von Zeichenfolge-Teil

Beitragvon ponderstibbons » Mo 17. Mai 2021, 12:49

CHAR.RINDEX(haystack,needle) ermittlt die Position des letzten Vorkommens von "needle" in haystack.

IF((CHAR.RINDEX(ausgangsvariable,"-") = 6) neuvar = SUBSTR(altvar,1,5) .
EXECUTE .
IF((CHAR.RINDEX(ausgangsvariable,"-") = 7) neuvar = SUBSTR(altvar,1,6) .
EXECUTE .

Oder, falls die Syntax das akzeptiert, einfach
COMPUTE neuvar=SUBSTR(altvar,1,(CHAR.RINDEX(ausgangsvariable,"-")-1) ).
EXECUTE .



Mit freundlichen Grüßen

PonderStibbons
ponderstibbons
 
Beiträge: 2523
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 2
Danke bekommen: 257 mal in 256 Posts

Re: Variable erstellen anhand von Zeichenfolge-Teil

Beitragvon garryman90 » Mo 17. Mai 2021, 14:41

Ganz stark gelöst, ich musste noch bisschen tüfteln weil er wegen ungültiger Kombination von Datentypen rumgemeckert hat, aber nachdem ich die neuvar nochmal als String deklariert hatte, lief es.

Mit der Abkürzung

COMPUTE neuvar2=CHAR.SUBSTR(Rindexneu,2,CHAR.RINDEX(ausgvar,"-")-1).
EXECUTE .

erhielt ich die Fehlermeldung "Text: )". Ich musste aber noch eine Klammer hinzufügen, sonst hat er die Syntax nicht akzeptiert. Desweiteren hat er mit SUBSTR gemeckert, musste in CHAR.SUBSTR geändert werden. Für alle nachkommenden Leute, hier meine endgültige Lösung:

COMPUTE Rindexneu=CHAR.RINDEX(Ausgangsvariable,'-').
EXECUTE.

String neuvar (a10).

IF (Rindexneu = 5) neuvar = CHAR.SUBSTR.(Ausgangsvariable,1,4).
EXECUTE.
IF (Rindexneu = 6) neuvar = CHAR.SUBSTR.(Ausgangsvariable,1,5).
EXECUTE.
IF (Rindexneu = 7) neuvar = CHAR.SUBSTR.(Ausgangsvariable,1,6).
EXECUTE.
IF (Rindexneu = 8) neuvar = CHAR.SUBSTR.(Ausgangsvariable,1,7).
EXECUTE.

Also, nochmal Danke, Problem erfolgreich gelöst!

MfG
Garry
garryman90
 
Beiträge: 3
Registriert: Sa 2. Mai 2020, 14:58
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post


Zurück zu SPSS Syntax

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 11 Gäste

cron