stata:删除指定字符最后一次出现后的所有内容

时间:2017-04-20 03:02:05

标签: stata

我的数据是这样的

无功
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   

可以在最后一次出现角色" |"后给我一切。但是我没有找到一种方法来在最后一次出现角色之前获取所有内容。谢谢!

1 个答案:

答案 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, "|"))

对于大多数人来说,这似乎更直接和更适合。