楼主: davidac
4359 6

[字符问题求助] 如何使用通配符进行替换? [推广有奖]

  • 0关注
  • 0粉丝

初中生

71%

还不是VIP/贵宾

-

威望
0
论坛币
7 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
69 点
帖子
5
精华
0
在线时间
28 小时
注册时间
2016-12-4
最后登录
2021-8-12

楼主
davidac 发表于 2017-2-21 10:06:43 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
player
James Harden\hardeja01
James Harden\hardeja01
Russell Westbrook\westbru01
Russell Westbrook\westbru01
Larry Bird\birdla01
Michael Jordan\jordami01
Larry Bird\birdla01
Vince Carter\cartevi01
Tracy McGrady\mcgratr01

有一列 player 变量的数据,是 NBA 球员的名字,但每个名字后面都有 \xxx 的格式,我想通过一个指令批量删除 \xxx 。请问可以使用什么指令实现呢?

另,如果可以用 subinstr(s1,s2,s3,n) 实现的话,那 s2(要被替换的字符)该怎么写成 \* 的通配格式,我之前写的

replace player = subinstr(player, '\*', '',.),就报错了,提示 invalid name
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:如何使用 通配符 subinstr Russell Michael 通配符 字符串

回帖推荐

黃河泉 发表于4楼  查看完整内容

Nick Cox offered the following answer:

沙发
黃河泉 在职认证  发表于 2017-2-21 11:15:47
执行
  1. split player, p(\) gen(x)
复制代码
其中 x1 就是你要的!
  1. . list

  2.      +-------------------------------------------------------------+
  3.      |                      player                  x1          x2 |
  4.      |-------------------------------------------------------------|
  5.   1. |      James Harden\hardeja01        James Harden   hardeja01 |
  6.   2. |      James Harden\hardeja01        James Harden   hardeja01 |
  7.   3. | Russell Westbrook\westbru01   Russell Westbrook   westbru01 |
  8.      +-------------------------------------------------------------+
复制代码

藤椅
davidac 发表于 2017-2-21 13:24:46
黃河泉 发表于 2017-2-21 11:15
执行其中 x1 就是你要的!
其实我现在也是在用这个方法,不过想知道能不能通过 通配符 的形式进行字符替换

板凳
黃河泉 在职认证  发表于 2017-2-21 17:03:21
davidac 发表于 2017-2-21 13:24
其实我现在也是在用这个方法,不过想知道能不能通过 通配符 的形式进行字符替换
Nick Cox offered the following answer:
  1. gen name = substr(player, 1, strpos(player, "\") - 1)
复制代码

报纸
伟轩 发表于 2017-2-22 11:45:02
复制代码

地板
伟轩 发表于 2017-11-17 09:25:09
通配符可以的,只是这里要用上  正则表达式。具体可以查看stata中string function的部分

7
赵安豆 发表于 2024-7-31 11:38:45
在 Stata 中处理这种问题时,可以使用 `subinstr()` 函数,但是由于 `\` 是一个特殊字符,在字符串操作中需要被转义。你可以通过在其前面加上另一个 `\` 来实现这一点。

然而,如果你想替换掉所有以 `\` 开头的后缀,直接使用通配符可能不是最佳选择,因为 Stata 的 `subinstr()` 不像某些其他编程语言那样直接支持通配符。但是你可以指定你想要去除的特定字符串(在这种情况下是形如`\xxx`的形式),其中 `xxx` 可以是任意字符。

一个更有效的方法是在知道后缀始终为 `\xxx` 格式的情况下,直接使用正则表达式的替代方法来匹配并删除这些后缀。但 Stata 的标准函数并不支持正则表达式,所以这里我们只通过精确的字符串操作实现这一目标:

```stata
replace player = subinstr(player, "\\*", "", .)
```

这将不会工作,因为 `\*` 不是一个有效的通配符,并且在 Stata 中你必须用 `\\` 来转义 `\` 字符。

对于形如 `\xxx` 的字符串(其中 `xxx` 是任意三个字符),你可以先找到所有包含 `\` 的项的长度,然后从后向前删除这三个字符。但是最简单的方法可能是直接使用一个知道具体格式的替换:

```stata
replace player = substr(player, 1, strpos(player, "\\")-1)
```

这将返回 `player` 变量中字符串的第一个字符到包含 `\` 字符之前的所有字符。

或者,如果名字和后缀总是有相同的分隔符(在这个例子中是 `\`),且你确定每个条目都有这样的格式,你可以使用以下代码:

```stata
replace player = trim(strtok(player, "\\"))
```

这里 `strtok()` 函数用来以 `\` 为分隔符分割字符串,并返回分割后的第一部分。`trim()` 是为了去除任何潜在的前导或尾随空格。

以上任一方法应该都能满足你的需求,只要确保在应用之前数据集中没有异常值与格式不符合的条目。

此文本由CAIE学术大模型生成,添加下方二维码,优先体验功能试用



您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-2-4 04:10