You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Stata中提取所有匹配正则的字符串生成新变量的技术咨询

Stata实现:匹配指定子串并拼接至原字符串末尾

刚好碰到过类似的需求,给你整理了一个清晰的实现方法,一步步来:

首先先把你的原始数据代码放出来,方便复现:

clear
input str18 string
"abc bcd cde"
"def efg fgh"
"ghi hij ijk"
end

你之前用regexm()只能判断是否存在匹配,但现在需要把原字符串和所有匹配到的abc、cde、def子串拼接起来,生成wanted变量。这里用循环结合strpos()的方法最直观,也方便后续修改匹配的子串列表:

* 初始化wanted变量为原字符串
gen wanted = string

* 定义需要匹配的目标子串列表,可按需添加或修改
local target_substrings "abc cde def"

* 循环遍历每个子串,匹配到就追加到wanted末尾
foreach sub in `target_substrings' {
    * strpos()判断原字符串是否包含当前子串,存在则拼接
    replace wanted = wanted + " " + "`sub'" if strpos(string, "`sub'")
}

* 查看结果
list

运行这段代码后,就能得到你想要的输出结果:

stringwanted
abc bcd cdeabc bcd cde abc cde
def efg fghdef efg fgh def
ghi hij ijkghi hij ijk

小说明:

  • 用local定义子串列表的好处是,后续如果要增加或修改匹配的子串,只需要修改这一行即可,不用改动循环逻辑。
  • strpos()函数会返回子串在原字符串中的起始位置,如果返回0就表示不存在,这里用它做判断比regexm()更简单直接,当然你也可以换成regexm(string, "sub'")`来做判断,效果是一样的。

内容的提问来源于stack exchange,提问作者b_surial

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:41:23