Stata 在字符串中分隔数字和单词

Stata 在字符串中分隔数字和单词,stata,Stata,我在Stata中有一个字符串变量,其中包含以下条目: 110xyz 43 abc 110xyz 44 abc 111 xyz 56 abc 关键是,有时第一组数字(1到5位数)在下一个单词开始之前没有后跟空格(长度可以是1到50个字母)。有没有一种巧妙的方法来插入空格来分隔数字和单词?(110 xyz将是上述示例中所需的结果)我尝试了regexr(),但没有任何帮助。regexr()出了什么问题?它似乎正是要使用的工具,所以可能是正则表达式让您遇到了麻烦 我的Stata语法可能有点不正确,但

我在Stata中有一个字符串变量,其中包含以下条目:

110xyz 43 abc 
110xyz 44 abc
111 xyz 56 abc

关键是,有时第一组数字(1到5位数)在下一个单词开始之前没有后跟空格(长度可以是1到50个字母)。有没有一种巧妙的方法来插入空格来分隔数字和单词?(
110 xyz
将是上述示例中所需的结果)我尝试了
regexr()
,但没有任何帮助。

regexr()出了什么问题?它似乎正是要使用的工具,所以可能是正则表达式让您遇到了麻烦

我的Stata语法可能有点不正确,但请尝试以下方法:

gen string = "110xyz 43 abc"
gen number = regexs(1) if regexm(string, "^([0-9]+) *([a-zA-Z].*)")
gen remain = regexs(2) if regexm(string, "^([0-9]+) *([a-zA-Z].*)")
gen fixed  = number + " " + remain

这可以简化,但我先从我认为最有可能工作的东西开始,例如保证匹配,因为我不知道如果
regexm()
不匹配,会产生什么样的空值。

为Stata的正则表达式函数提供了一个方便的包装器。演示:

clear 
input str16 test 
"110xyz 43 abc" 
"110xyz 44 abc"
"111 xyz 56 abc" 
end 
ssc inst moss
help moss 
moss test, match("([0-9]+)") regex pre(num) 
moss test, match("([a-z]+)") regex pre(word)
list test *match* 

     +------------------------------------------------------------+
     |           test   nummat~1   nummat~2   wordma~1   wordma~2 |
     |------------------------------------------------------------|
  1. |  110xyz 43 abc        110         43        xyz        abc |
  2. |  110xyz 44 abc        110         44        xyz        abc |
  3. | 111 xyz 56 abc        111         56        xyz        abc |
     +------------------------------------------------------------+

谢谢,成功了。你是对的,只是我在正则表达式方面遇到了麻烦。正如Andrew建议的那样,简化为一行:
replace string=regexr(s),“^[0-9]*”,regexs(1)+“”),如果regexm(s),“^([0-9]*)[^0-9]”
“没有帮助”作为错误报告是不透明的。始终准确地说出你尝试了什么以及为什么不令人满意。