본문 바로가기
SAS/SAS 함수

【SAS 함수】 98. COMPGED 함수

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

포스팅 목차

    COMPGED

     


    일반화된 편집 거리 계산에 의해 두 문자 사이의 거리를 계산한다.

    문자열2를 기준으로 문자열1의 거리를 측정한다. (문자열1과 문자열2가 바뀌면 값은 변경될수 있음)

    Category: 문 자
    MAIN

    문 법


    COMPGED
     (string-1string-2 <,cutoff> <,modifiers>)


     

    Arguments

    string-1,string-2

     

         는 문자 상수, 변수 , 표현을 지정.

     

    modifiers(변경자)

     

         i 또는 I   : 문자열의 대소문차이를 무시하고 비교

     

         l 또는 L  : 비교전에 문자열의 앞의 공백을 제거후 비교

     

         n 또는 N : 문자열안의 인용부호를 제거하고, 대소문자 차이를 무시하고 비교

     

         :(colon)  : 문자열1과 문자열2중에 짧은 크기의 length에 맞추어 긴 length의 문자열 길이를 잘라서 맞추어서 비교하고, 만약 변경자가 지정이 되지 않은경우에는 짧은 length에 공백을 추가하여 긴 length문자열에 맞추어서 비교를 한다

     


    참 고

    * 일반적인 거리 계산에 대한 비용

    연산 기본비용 설명
    APPEND 50 문자열 뒤에 한 문자가 추가
    BLANK 10 공란이 추가된 경우
    DELETE 100 한 문자가 삭제된 경우
    DOUBLE 20 문자열에서 동일 문자가 반복해서 추가된 경우
    FDELETE 200 문자열 맨 앞의 문자가 삭제된 경우
    FINSERT 200 문자열 맨 앞에 문자가 삽입된 경우
    FREPALCE 200 문자열 맨 앞의 문자가 변경된 경우
    INSERT 100 문자열에서 문자가 삽입된 경우
    MATCH 0 두 개의 문자열이 동일한 경우
    PUNCTUATION 30 문자열에 인용부호가 삽입된 경우
    REPLACE 100 문자열에서 문자가 변경된 경우
    SINGLE 20 문자열에서 동일한 문자가 한 개의 문자로 변경
    SWAP 20 문자열에서 두 개의 문자가 교환된 경우
    TRUNCATE 10 문자열에서 뒤의 문자가 잘린 경우

     

    * 기본비용을 변경하기 위해서는 CALL COMPCOST 함수를 사용한다.

     


    관련 함수

    함수명 함수 내용
    COMPARE 두 문자 차이가 있는 것중 가장 왼편의 위치를 반환한다.
    COMPGED 일반화된 편집 거리 계산에 의해 두 문자 사이의 거리를 계산한다.
    COMPLEV Levenshtein 편집 거리 계산에 의해 두 문자의 거리 계산한다.
    CALL COMPCOST COMPGED 함수에서 사용되는 운영 비용을 정의한다.
    SPEDIS
    두 단어 사이의 비대칭적 스펠링 거리로써 표현되는 두 단어 매칭의 가능성을 정의한다.

     


    예 제

     

    예 제 1 :

    문자열1과 문자열2을 비교하여 거리를 두 문자열 차이 거리를 반환한다.

    SAS Statements
    data COMPGED;
         infile datalines missover;
         input String1 $char8. +1 String2 $char8. +1 Operation $40.;
         GED = compged(string1, string2);
    datalines;
    baboon baboon match
    baXboon baboon insert
    baoon baboon delete
    baXoon baboon replace
    baboonX baboon append
    baboo baboon truncate
    babboon baboon double
    babon baboon single
    baobon baboon swap
    bab oon baboon blank
    bab,oon baboon punctuation
    bXaoon baboon insert+delete
    bXaYoon baboon insert+replace
    bXoon baboon delete+replace
    Xbaboon baboon finsert
    aboon baboon trick question: swap+delete
    Xaboon baboon freplace
    axoon baboon fdelete+replace
    axoo baboon fdelete+replace+truncate
    axon baboon fdelete+replace+single
    baby baboon replace+truncate*2
    balloon baboon replace+insert
    ;

     

    Results
    String1 String2 Distance Operation
    baboon  baboon     0 match
    baXboon baboon   100 insert
    baoon   baboon   100 delete
    baXoon  baboon   100 replace
    baboonX baboon    50 append
    baboo   baboon    10 truncate
    babboon baboon    20 double
    babon   baboon    20 single
    baobon  baboon    20 swap
    bab oon baboon    10 blank
    bab,oon baboon    30 punctuation
    bXaoon  baboon   200 insert+delete
    bXaYoon baboon   200 insert+replace
    bXoon   baboon   200 delete+replace
    Xbaboon baboon   200 finsert
    aboon   baboon   120 trick question: swap+delete
    Xaboon  baboon   200 freplace
    axoon   baboon   300 fdelete+replace
    axoo    baboon   310 fdelete+replace+truncate
    axon    baboon   320 fdelete+replace+single
    baby    baboon   120 replace+truncate*2
    balloon baboon   200 replace+insert

     


    예 제 2 :

    Cutoff(MAX)값 지정과 변경자 지정에 따른 비교를 한다.

    SAS Statements
    DATA _NULL_;
         INPUT @1 STRING1 $CHAR10.
               @11 STRING2 $CHAR10.;
         PUT "Function COMPGED";
         DISTANCE = COMPGED(STRING1, STRING2);
         IGNORE_CASE = COMPGED(STRING1, STRING2, 'I');
         LEAD_BLANKS = COMPGED(STRING1, STRING2, 'L');
         CASE_TRUNC = COMPGED(STRING1, STRING2, ':I');
         MAX = COMPGED(STRING1, STRING2, 250);
         PUT STRING1 = STRING2= /
         DISTANCE= IGNORE_CASE= LEAD_BLANKS= CASE_TRUNC= MAX= /;
    DATALINES;
    SAME      SAME
    cAsE      case
    Longer    Long
    abcdef    xyz
       lead   lead
    ;

     

    Results
    Function COMPGED
    STRING1=SAME STRING2=SAME
    DISTANCE=0 IGNORE_CASE=0 LEAD_BLANKS=0 CASE_TRUNC=0 MAX=0
    
    Function COMPGED
    STRING1=cAsE STRING2=case
    DISTANCE=200 IGNORE_CASE=0 LEAD_BLANKS=200 CASE_TRUNC=0 MAX=200
    
    Function COMPGED
    STRING1=Longer STRING2=Long
    DISTANCE=100 IGNORE_CASE=100 LEAD_BLANKS=100 CASE_TRUNC=100 MAX=100
    
    Function COMPGED
    STRING1=abcdef STRING2=xyz
    DISTANCE=550 IGNORE_CASE=550 LEAD_BLANKS=550 CASE_TRUNC=550 MAX=250
    
    Function COMPGED
    STRING1=lead STRING2=lead
    DISTANCE=320 IGNORE_CASE=320 LEAD_BLANKS=0 CASE_TRUNC=320 MAX=250

     


    예 제 3 :

    Call Compcost 함수를 이용하여 기본 가격을 변경가능하다. Append의 거리를 33으로 변경한다.

    SAS Statements
    DATA _NULL_;
         INPUT @1 STRING1 $CHAR10.
               @11 STRING2 $CHAR10.;
         IF _N_ = 1 THEN CALL COMPCOST('APPEND=',33);
         DISTANCE = COMPGED(STRING1, STRING2);
         PUT STRING1= STRING2= / DISTANCE=;
    DATALINES;
    Ron Run
    ABC AB
    ;

     

    Results
    STRING1=Ron STRING2=Run
    DISTANCE=100
    
    STRING1=ABC STRING2=AB
    DISTANCE=33

     


    엑셀(EXCEL)과 SAS 함수(SAS Function) 비교 리스트 링크

     

    SAS 함수(SAS Function) 리스트 링크
    반응형

    'SAS > SAS 함수' 카테고리의 다른 글

    【SAS 함수】 100. COMPOUND 함수  (0) 2018.11.30
    【SAS 함수】 99. COMPLEV 함수  (0) 2018.11.30
    【SAS 함수】 97. COMPBL 함수  (0) 2018.11.29
    【SAS 함수】 96. COMPARE 함수  (0) 2018.11.29
    [SAS 함수] 95. COMB 함수  (0) 2018.11.29

    댓글