포스팅 목차
CALL PRXPOSN
capture 버퍼의 시작 위치와 length를 반환한다.
Category: | 문자열 비교 함수(Character String Matching) |
MAIN |
문 법
CALL PRXPOSN (regular-expression-id, capture-buffer, start <, length>); |
Arguments
- regular-expression-id
- 는 PRXPARSE함수에 의해 반환되는 인식자를 지정.
참 고
단, 메모리에 직접 쓰는 것은 상당히 조심할 필요있습니다.
SAS regular 형식 은 RX로 시작하고, Perl regular형식은 PRX로 시작한다.
좀 더 상세한 사항을 알고 싶으신 분은 PERL언어에 관하여 찾아보시기를 바랍니다.
* PERL : 자료를 추출하고 그에 의거한 보고서를 작성하는데 사용하는 프로그래밍언어 가운데 하나이다.
* capture buffer : 수신 전송 신호를 저장하는 메모리 공간으로 괄호로 나누어진다.
관련 함수
함수명 | 함수내용 |
CALL PRXCHANGE | 지정한 패턴과 일치하는 문자열을 검색하여 검색된 부분을 변경하기 원하는 대체 문자열로 변경 작업을 수행한다. |
CALL PRXDEBUG | PERL 정규식이 컴파일 되는 과정과 패턴이 문자값과 일치 될 때 반환되는 값에 대한 정보를 제공한다. |
CALL PRXFREE | 메모리에 할당된 Perl regular 표현식을 초기화 한다. 일반적으로 데이터 스텝이 종료되면 리소스가 초기화 된다. |
CALL PRXNEXT | 문자열에서 지정한 패턴과 일치하는 패턴 검색 작업을 반복적으로 수행하여서 패턴과 일치하는 하위 문자열의 위치와 length를 반환한다. |
CALL PRXPOSN | capture 버퍼의 시작 위치와 length를 반환한다. |
CALL PRXSUBSTR | 패턴이 일치하는 문자열의 위치와 length를 반환한다. |
PRXCHANGE | 지정한 패턴과 일치하는 경우 변경 작업을 수행한다. |
PRXMATCH | 패턴 일치여부를 검색하고, 패턴이 발견된 첫 번째 위치를 반환한다. |
PRXPAREN | 패턴이 일치하는 마지막 캡쳐 버퍼의 값을 반환한다. |
PRXPARSE | Perl 정규식 함수에 의해 이용될 Perl 정규식 표현을 정의 한다. |
PRXPOSN | capture 버퍼에 할당된 값을 반환한다. 캡쳐 버퍼는 prxparse를 통해 패턴 선언시 괄호를 지정하여 나눌수 있다. |
예 제
예 제 1 :
text변수에서 시간:분:(오전/오후)의 형태를 검색하여서 ( )로 나누어 3개의 캡쳐 버퍼에 저장된 데이터를 각각 구분하여 출력한다. 첫 번째 캡쳐 버퍼에서 시간, 두 번째 캡쳐 버퍼에서 분, 세 번째 캡쳐 버퍼에서 (AM 또는 PM)을 출력한다.
\( : OPEN 괄호를 찾는다. \d\d\d : 3개의 숫자 매칭
\) : close 괄호 b? : blank를 찾는다.
\d\d\d : 3개숫자. - : -(dash).
SAS Statements |
data _null_;
patternID = prxparse('/(\d\d):(\d\d)(am|pm)/');
text = 'The time is 09:56am.';
if prxmatch(patternID, text) then do;
call prxposn(patternID, 1, position, length);
hour = substr(text, position, length);
call prxposn(patternID, 2, position, length);
minute = substr(text, position, length);
call prxposn(patternID, 3, position, length);
ampm = substr(text, position, length);
put hour= minute= ampm=;
end;
run;
Results |
hour=09 minute=56 ampm=amtext=The time is 09:56am.
예 제 2 :
Number 변수에서 (지역번호) 국-번호의 형태를 검색한 후에 (지역번호) 와 (국번)을 출력하자.
SAS Statements |
DATA PIECES;
IF _N_ THEN RE = PRXPARSE("/\((\d\d\d)\) ?(\d\d\d)-\d{4}/");
RETAIN RE;
INPUT NUMBER $CHAR80.;
MATCH = PRXMATCH(RE,NUMBER);
IF MATCH GT 0 THEN DO;
CALL PRXPOSN(RE,1,AREA_START);
CALL PRXPOSN(RE,2,EX_START,EX_LENGTH);
AREA_CODE = SUBSTR(NUMBER,AREA_START,3);
EXCHANGE = SUBSTR(NUMBER,EX_START,EX_LENGTH);
END;
DROP RE;
DATALINES;
THIS LINE DOES NOT HAVE ANY PHONE NUMBERS ON IT
THIS LINE DOES: (123)345-4567 LA DI LA DI LA
ALSO VALID (609) 999-9999
TWO NUMBERS HERE (333)444-5555 AND (800)123-4567
;
Results |
NUMBERTHIS LINE DOES NOT HAVE ANY PHONE NUMBERS ON IT
THIS LINE DOES: (123)345-4567 LA DI LA DI LA
ALSO VALID (609) 999-9999
TWO NUMBERS HERE (333)444-5555 AND (800)123-4567AREA_ AREA_
MATCH START EX_START EX_LENGTH CODE EXCHANGE 0 . . . 17 18 22 3 123 345 12 13 18 3 609 999 18 19 23 3 333 444
SAS 함수(SAS Function) 리스트 링크 |
엑셀(EXCEL)과 SAS 함수(SAS Function) 비교 리스트 링크 |
SAS 데이터 스텝 구문 리스트(SAS Data Step Statement) |
반응형
'SAS > SAS 함수' 카테고리의 다른 글
【SAS 함수】 52. CALL RANBIN 함수 (0) | 2018.11.21 |
---|---|
【SAS 함수】 51. CALL PRXSUBSTR 함수 (0) | 2018.11.21 |
【SAS 함수】 49. CALL PRXNEXT 함수 (0) | 2018.11.20 |
【SAS 함수】 48. CALL PRXFREE 함수 (0) | 2018.11.20 |
【SAS 함수】 47. CALL PRXDEBUG 함수 (0) | 2018.11.20 |
댓글