Stata 在字符串中分隔数字和单词
我在Stata中有一个字符串变量,其中包含以下条目:Stata 在字符串中分隔数字和单词,stata,Stata,我在Stata中有一个字符串变量,其中包含以下条目: 110xyz 43 abc 110xyz 44 abc 111 xyz 56 abc 关键是,有时第一组数字(1到5位数)在下一个单词开始之前没有后跟空格(长度可以是1到50个字母)。有没有一种巧妙的方法来插入空格来分隔数字和单词?(110 xyz将是上述示例中所需的结果)我尝试了regexr(),但没有任何帮助。regexr()出了什么问题?它似乎正是要使用的工具,所以可能是正则表达式让您遇到了麻烦 我的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()
不匹配,会产生什么样的空值。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]”
“没有帮助”作为错误报告是不透明的。始终准确地说出你尝试了什么以及为什么不令人满意。