Stata正则表达式提取数值
Stata Regular expressions extracting numerical values
我有一些数据看起来像这样
var1
h 01 .00 .0 abc
d 1.0 .0 14.0abc
1,0.0 0.0 .0abc
需要注意的是,最后三个alpha值是相同的,我希望提取字符串中的所有数值。我使用的代码如下所示
gen x1=regexs(1) if regexm(var1,"([0-9]+) [ ]*(abc)*$")
但是,此代码仅提取 abc 项之前的数字,并在 space 或 . 之后停止。比如只提取第一项abc前的0。我想知道是否有办法处理这个问题并提取字母字符之前的所有数值。
正如@Roberto Ferrer 指出的那样,您的问题不是很清楚,但这里有一个使用来自 SSC 的 moss
的示例:
. clear
. input str16 var1
var1
1. "h 01 .00 .0 abc"
2. "d 1.0 .0 14.0abc"
3. "1,0.0 0.0 .0abc"
4. end
. moss var1, regex match("([0-9]+\.*[0-9]*|\.[0-9]+)")
. l _match*
+---------------------------------------+
| _match1 _match2 _match3 _match4 |
|---------------------------------------|
1. | 01 .00 .0 |
2. | 1.0 .0 14.0 |
3. | 1 0.0 0.0 .0 |
+---------------------------------------+
我有一些数据看起来像这样
var1
h 01 .00 .0 abc
d 1.0 .0 14.0abc
1,0.0 0.0 .0abc
需要注意的是,最后三个alpha值是相同的,我希望提取字符串中的所有数值。我使用的代码如下所示
gen x1=regexs(1) if regexm(var1,"([0-9]+) [ ]*(abc)*$")
但是,此代码仅提取 abc 项之前的数字,并在 space 或 . 之后停止。比如只提取第一项abc前的0。我想知道是否有办法处理这个问题并提取字母字符之前的所有数值。
正如@Roberto Ferrer 指出的那样,您的问题不是很清楚,但这里有一个使用来自 SSC 的 moss
的示例:
. clear
. input str16 var1
var1
1. "h 01 .00 .0 abc"
2. "d 1.0 .0 14.0abc"
3. "1,0.0 0.0 .0abc"
4. end
. moss var1, regex match("([0-9]+\.*[0-9]*|\.[0-9]+)")
. l _match*
+---------------------------------------+
| _match1 _match2 _match3 _match4 |
|---------------------------------------|
1. | 01 .00 .0 |
2. | 1.0 .0 14.0 |
3. | 1 0.0 0.0 .0 |
+---------------------------------------+