본문 바로가기
SAS/SAS 함수

【SAS 함수】 50. CALL PRXPOSN 함수

by 기서무나구물 2018. 11. 20.

포스팅 목차

    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)
    반응형

    댓글