SAS FUNCTION
SAS 9.1.3
Go to Documentation Home
HOME
Go to Book List
FUN_home
Go to Table of Contents
연구회
Go to Index
자료실
Go to Master Index
SAS  9.1.3
Go to Feedback page
MAIL
CALL PRXPOSN
Go to previous page
Previous
Go to next page
Next
처음메뉴로

50. 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 : 수신 전송 신호를 저장하는 메모리 공간으로 괄호로 나누어진다.
 

예제

MAIN

 

예 제 1 :

text변수에서 시간:분:(오전/오후)의 형태를 검색하여서 ( )로 나누어 3개의 캡쳐버퍼에 저장된 데이터를 각각 구분하여 출력한다.

첫 번째 캡쳐버퍼에서 시간, 두 번째 캡쳐버퍼에서 분, 세 번째 캡쳐버퍼에서 (AM 또는 PM)을 출력한다.

\( : OPEN 괄호를 찾는다.   \d\d\d : 3개의 숫자 매칭
\) : close 괄호             b? : blank를 찾는다.
\d\d\d : 3개숫자.        - : -(dash).

SAS Statements Results
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;
 

 

hour=09 minute=56 ampm=am

text=The time is 09:56am.

 

예 제 2 :

Number변수에서 (지역번호) 국-번호의 형태를 Match하여서 (지역번호) 와 (국)을 출력하자.

SAS Statements Results
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
;
                         NUMBER

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

AREA_                          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     


함수비교

Functions:

046.CALL PRXCHANGE

  047.CALL PRXDEBUG
  048.CALL PRXFREE
  049.CALL PRXNEXT
  051.CALL PRXSUBSTR
  329.PRXCHANGE
  330.PRXMATCH
  331.PRXPAREN
  332.PRXPARSE
  333.PRXPOSN

2006년 백승민 제작하였답니다. 
( http://cafe.daum.net/statsas )