BookmarkSubscribeRSS Feed

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

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

* 제목 : 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

hackathon24-white-horiz.png

The 2025 SAS Hackathon Kicks Off on June 11!

Watch the live Hackathon Kickoff to get all the essential information about the SAS Hackathon—including how to join, how to participate, and expert tips for success.

YouTube LinkedIn

Article Labels
Article Tags