BookmarkSubscribeRSS Feed

[HASH Object] Hash 테이블을 사용하여서 데이터 클린징 작업 수행하기

Started ‎06-12-2020 by
Modified ‎06-12-2020 by
Views 75

* 제목 : Hash 테이블을 사용하여서 데이터 클린징 작업 수행하기;

 

* Sample 25983: Performing data cleansing using a hash table;

 

* 출처 : http://support.sas.com/kb/25/983.html;

 

* 목적 : 문자 변수에 대한 데이터 클린징 작업을 수행한다. 

         사용자가 지정한 단어에 대한 대문자 변경 작업과 

         특정 구문 부호 뒤에 위치하는 문자에 대하여 첫 문자를 대문자(나머지 소문자)로 변경하는 작업을 수행한다.

         이 예제는 CHECK() 매소드를 설명한다.;

 

data caps; 

     infile datalines truncover;

     input cap $15.;

datalines;

DATA

SAS

_NEW_

ADD

;

 

options linesize=130;

data test;

  infile datalines truncover;

  input c $125.;

datalines;

The data step is very powerful. the data step has been part of sas since at least 1976.

Using dot notation makes your sas programs easier to read.

Use the _new_ statement to instantiate an object.

You can use the add method in one of two ways to store data in a hash object.

baek, seung. mIN.

;

 

/* 변수 C에서 각각의 단어를 추출하여 대문자로 변경한 후에 이 값이 Hash 오브젝트 H에 존재하는지 여부를 확인하기 위하여 CHECH 매소드를 사용한다.

   반환 코드가 Zero(0)이면, Key가 발견되었음을 표시한다. */

data upcased;

     set test;

     length cap $ 15;

     /* 데이서 스텝의 첫 번째 반복 작업에서 Hash 테이블 H를 생성하고 인스턴트화 한다.

        DATASET: 인수 태그를 사용하여서 Hash 테이블 H에 WORK.CAPS 데이터 세트를 로딩한다.

        일치하는 값을 찾기 위하여 CAP 변수를 키(KEY) 변수로 정의한다.

        또한, CPA 변수를 출력하기 위하여 데이터 항목으로 정의한다. */

     if _n_ = 1 then do;

        declare hash h(dataset: "work.caps");

        h.definekey('cap');

        h.definedata('cap');

        h.definedone();

 

        /* 로그에 "지정된 변수가 초기화되지 않았습니다." 메시지 출력을 방지하기 위하여,

           데이터 세트 변수 cap 변수를 결측치 값으로 초기화한다. */

        call missing(cap);

     end;

 

     length final $ 125;

     /* NUMW 변수에 변수 c에 존재하는 단어의 개수를 할당한다. */

     numw=countc(trim(c),' ')+1;

     

     /* SCAN 함수는 변수 C에서 개별 단어를 추출한다. SCAN 함수로 분리된 단어를 대문자로 변경 후에 

        이 값과 일치하는 KEY 값이 존재하는지 확인하기 위하여 CHECK 매소드를 사용한다. 

        일치하는 값이 존재하면, 0 값을 반환한다.

     /* HAHS 테이블에서 일치하는 KEY 값을 발견하였으면, CATX 함수를 사용하여서 FINAL 변수와 TEMP 변수의 첫번째 값을 

        대문자로 전환한 값을 공백을 사이에 구분자로 삽입하여 결합한 후에 이 값을 FINAL 변수로 할당한다.

     /* HASH 테이블에서 일치하는 KEY 값을 발견하지 못하면, CATX 함수를 사용하여서 FINAL 변수와 

        TEMP 변수를 소문자로 전환한 값을 공백을 사이에 구분자로 삽입하여 결합한다. */

 

     do i=1 to numw;

        temp=scan(c,i,' '); * DO 반복문을 사용하여서 C변수의 개별 단어를 순차적으로 추출하여 작업한다;

        if h.check(key:upcase(temp))=0 then final=catx(' ',final,upcase(temp));

        else do;

          * 관측치의 첫 번째 단어 또는 이전 단어에 인용부호가 포함된 현재 처리중인 단어에 대하여 

            첫번째 문자를 대문자로 나머지 문자를 소문자로 변경한다.;

          if i=1 or indexc(scan(c,i-1,' '),',.;:') ne 0 then do;

             final=catx(' ',final,propcase(temp));

          end;

          else final=catx(' ',final,lowcase(temp));

        end;

     end;

 

     keep final;

run;

 

proc print;

run;

 

***********************************************************
- 통계분석연구회 
- 카페 : http://cafe.daum.net/statsas
- 통계분석연구회 페이지 : https://www.facebook.com/statsas 

- 통계분석연구회(Statistics Analysis Study) 그룹 : https://www.facebook.com/groups/statsas/ 

Version history
Last update:
‎06-12-2020 05:21 AM
Updated by:
Contributors

sas-innovate-wordmark-2025-midnight.png

Register Today!

Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.


Register now!

Article Labels
Article Tags