Stata 正则表达式
Stata regular expressions
我需要使用正则表达式来提取字符串变量的一部分。我的数据看起来像这样 a 代表字母字符 x 和 Z 代表数字字符。我想提取“-”之前的 Z 个字符
var1
"aaa xxx xxx ZZZ-ZZZ-a"
"aaa xx xxx ZZZ-ZZ"
我的代码是这样的
gen p_id = regexs(1) if regexm(var1, "([0-9][0-9][0-9])[-]*[0-9][0-9][-]*[ a-zA-Z]*$"
)
此代码提取的内容超出了要求。例如,此代码从如下所示的观察中提取数字部分。具体来说,它提取 ZZZ
var1
"aaa ZZZZZ aaa"
我尝试了各种表达式,但无法得到所需的答案。
我认为您需要更好地描述可以存在的值的结构。但
怎么样:
clear
set more off
input ///
str30 x
"aaa 736 058 123-456-a"
"aaa 11 688 789-01"
"aaa 56789 aaa"
end
// original
gen p_id = regexs(1) ///
if regexm(x, "([0-9][0-9][0-9])[-]*[0-9][0-9][-]*[ a-zA-Z]*$")
// modified
gen p_id2 = regexs(1) ///
if regexm(x, "([0-9]*[-][0-9]*)")
list p_id*
?
这似乎经常发生,提前决定解决方案必须基于正则表达式只会使您的代码复杂化。根据您的描述,您需要第一个“-”之前的三个字符。那将是
gen p_id = substr(var1, strpos(var1, "-") - 3, 3)
测试示例:
clear
input str21 var1
"aaa xxx xxx 123-ZZZ-a"
"aaa xx xxx 567-ZZ"
end
gen p_id = substr(var1, strpos(var1, "-") - 3, 3)
list
+------------------------------+
| var1 p_id |
|------------------------------|
1. | aaa xxx xxx 123-ZZZ-a 123 |
2. | aaa xx xxx 567-ZZ 567 |
+------------------------------+
尝试
gen var2=regexs(1) if regexm(var1,"([0-9]+)[-]*([0-9]+)[-]*([0-9]+)[-]?([a-z]*$
继续将 regexs(1) 更改为 regexs(2) 和 regexs(3) 以及变量名称以在 (-)
之前生成其他数字
我需要使用正则表达式来提取字符串变量的一部分。我的数据看起来像这样 a 代表字母字符 x 和 Z 代表数字字符。我想提取“-”之前的 Z 个字符
var1
"aaa xxx xxx ZZZ-ZZZ-a"
"aaa xx xxx ZZZ-ZZ"
我的代码是这样的
gen p_id = regexs(1) if regexm(var1, "([0-9][0-9][0-9])[-]*[0-9][0-9][-]*[ a-zA-Z]*$"
)
此代码提取的内容超出了要求。例如,此代码从如下所示的观察中提取数字部分。具体来说,它提取 ZZZ
var1
"aaa ZZZZZ aaa"
我尝试了各种表达式,但无法得到所需的答案。
我认为您需要更好地描述可以存在的值的结构。但 怎么样:
clear
set more off
input ///
str30 x
"aaa 736 058 123-456-a"
"aaa 11 688 789-01"
"aaa 56789 aaa"
end
// original
gen p_id = regexs(1) ///
if regexm(x, "([0-9][0-9][0-9])[-]*[0-9][0-9][-]*[ a-zA-Z]*$")
// modified
gen p_id2 = regexs(1) ///
if regexm(x, "([0-9]*[-][0-9]*)")
list p_id*
?
这似乎经常发生,提前决定解决方案必须基于正则表达式只会使您的代码复杂化。根据您的描述,您需要第一个“-”之前的三个字符。那将是
gen p_id = substr(var1, strpos(var1, "-") - 3, 3)
测试示例:
clear
input str21 var1
"aaa xxx xxx 123-ZZZ-a"
"aaa xx xxx 567-ZZ"
end
gen p_id = substr(var1, strpos(var1, "-") - 3, 3)
list
+------------------------------+
| var1 p_id |
|------------------------------|
1. | aaa xxx xxx 123-ZZZ-a 123 |
2. | aaa xx xxx 567-ZZ 567 |
+------------------------------+
尝试
gen var2=regexs(1) if regexm(var1,"([0-9]+)[-]*([0-9]+)[-]*([0-9]+)[-]?([a-z]*$
继续将 regexs(1) 更改为 regexs(2) 和 regexs(3) 以及变量名称以在 (-)
之前生成其他数字