我的数据是这样的
无功
A(c)| B(/ c /)| C.C
F | G9
K | S | V |小号
F |一个
我希望在角色的最后一次出现之前获得所有内容" |"在Stata,如下:
NewVar
瓦尔
A(c)| B(/ c /)|
F |
K | S | V |
F |
egen NewVar=ends(Var), punct(|) last trim
可以在最后一次出现角色" |"后给我一切。但是我没有找到一种方法来在最后一次出现角色之前获取所有内容。谢谢!
答案 0 :(得分:1)
这是一种方法:
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 | |
+-------------------------------------------+
此处首次调用此类问题的端口是the help for string functions。自从Stata的早期版本开始,上述解决方案就已成为可能(前提是strpos()
早先称为index()
)。
另一种解决方案是利用最近添加的函数strrpos()
gen Wanted2 = substr(Var, 1, strrpos(Var, "|"))
对于大多数人来说,这似乎更直接和更适合。