2017-04-20 3 views
0

Meine Daten wie dieseStata: Entfernen Sie alles nach dem letzten Auftreten eines bestimmten Zeichens

Var
A (c) | B (/ c /) | C.c
F | G9
K | S | V | S
F | A

Ich möchte alles vor dem letzten Auftreten des Zeichens "|" in Stata, wie folgt:

NewVar
Var
A (c) | B (/ c /) |
F |
K | S | V |
F |

egen NewVar=ends(Var), punct(|) last trim 

kann mir alles nach dem letzten Auftreten des Zeichens "|" geben. Aber ich habe keinen Weg gefunden, alles vor dem letzten Auftreten eines Charakters zu bekommen. Vielen Dank!

Antwort

1

Hier ist eine Möglichkeit, es zu tun:

clear 
input str21 Var 
"A (c) | B(/ c/) | C.c" 
"F | G9" 
"K | S | V | S" 
"F | A" 
end 

gen Wanted = reverse(substr(reverse(Var),strpos(reverse(Var), "|"), .)) 
l 

    +-------------------------------------------+ 
    |     Var    Wanted | 
    |-------------------------------------------| 
    1. | A (c) | B(/ c/) | C.c A (c) | B(/ c/) | | 
    2. |    F | G9     F | | 
    3. |   K | S | V | S   K | S | V | | 
    4. |     F | A     F | | 
    +-------------------------------------------+ 

Ein Hafen von ersten Anruf hier für solche Probleme ist the help for string functions. Die obige Lösung ist seit frühen Versionen von Stata möglich (mit der Maßgabe, dass strpos() früher als index() bekannt war).

Eine andere Lösung wäre die Verwendung der in jüngster Zeit zusätzliche Funktion strrpos()

gen Wanted2 = substr(Var, 1, strrpos(Var, "|")) 

, die für die meisten Geschmäcker wahrscheinlich scheinen direkteren und sympathisch machen.

Verwandte Themen