Stata正则表达式
我需要使用正则表达式来提取字符串变量的一部分。我的数据是这样的,其中a表示字母字符x,Z表示数字字符。我想提取“-”前面的Z字符 我的代码如下所示Stata正则表达式,stata,Stata,我需要使用正则表达式来提取字符串变量的一部分。我的数据是这样的,其中a表示字母字符x,Z表示数字字符。我想提取“-”前面的Z字符 我的代码如下所示 gen p_id=regexs(1)如果regexm(var1,“([0-9][0-9][0-9])[-]*[0-9][0-9][0-9][-]*[a-zA-Z]*$”) 此代码提取的内容超过了所需的内容。例如,这段代码从如下观察中提取数值部分。具体来说,它提取ZZZ 我玩弄各种表情,但无法得到所需的答案 我认为您需要更好地描述可以呈现的值的结构。但
gen p_id=regexs(1)如果regexm(var1,“([0-9][0-9][0-9])[-]*[0-9][0-9][0-9][-]*[a-zA-Z]*$”
)
此代码提取的内容超过了所需的内容。例如,这段代码从如下观察中提取数值部分。具体来说,它提取ZZZ
我玩弄各种表情,但无法得到所需的答案 我认为您需要更好地描述可以呈现的值的结构。但是 那么:
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*
?我认为您需要更好地描述可以呈现的值的结构。但是 那么:
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 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 |
+------------------------------+
试一试
将regexs(1)与变量名一起更改为regexs(2)和regexs(3),以便在(-)之前生成其他数字
将regexs(1)与变量名一起更改为regexs(2)和regexs(3),以在(-)之前生成其他数字