2015-01-14 2 views
0

정규 표현식을 사용하여 문자열 변수의 일부를 추출해야합니다. 내 데이터는 다음과 같습니다. 은 영문자를 나타냅니다. xZ은 숫자를 나타냅니다. 나는 전에 Z 문자를 추출 할 "-"Stata 정규 표현식

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]*$" 것 같습니다. 예를 들어,이 코드는 다음과 같은 관측치에서 숫자 부분을 추출합니다. 구체적으로는 나는 표정으로 주위를 연주하지만, 필요한 답변을 얻을 수 없습니다

var1 
"aaa ZZZZZ aaa" 

ZZZ 추출합니다.

답변

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 | 
    +------------------------------+ 
2

나는 여러분이 존재할 수있는 값의 구조를 더 잘 설명 할 필요가 있다고 생각합니다. 그러나 어때 :

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* 

?

0

는 정규식 등에서 특정 요소를 뽑아 오기 (2) 및 (3) 변수 이름과 함께 생성 정규식 등에서 특정 요소를 뽑아 오기에

gen var2=regexs(1) if regexm(var1,"([0-9]+)[-]*([0-9]+)[-]*([0-9]+)[-]?([a-z]*$ 

KEEP 변화 정규식 등에서 특정 요소를 뽑아 오기 (1) 시도 : 그

gen p_id = substr(var1, strpos(var1, "-") - 3, 3) 

시험 예 것 다른 숫자 앞에 (-)