로그인   |  회원가입  |  사이트맵  |  Contact Us
  아이디 저장하기
 
홈 > SAS Tech & Tip > SAS Programming 활용하기
[SAS 고급] 인덱스를 사용하는 데이터 결합 (Using an Index to Combine Data) 2017.06.18
MYSAS 시샵 126 0
http://www.mysas.co.kr/sas_tiptech/a_question.asp?b_no=7330&cmd=content&bd_no=5

[SAS 고급] 인덱스를 사용하는 데이터 결합 (Using an Index to Combine Data)

 


안녕하세요^^

 

이번 시간에는 데이터를 결합할 때 인덱스를 사용하는 방법을 알아보도록 하겠습니다.


  • KEY= 옵션과 함께 SET 문장을 사용하여 두 개의 데이터 셋 결합

  • _IORC_를 사용하여 결과 제어

     

▶ 비즈니스 시나리오를 통해 살펴보도록 하겠습니다.

 ▷ 마케팅부서에서 두 개의 데이터 파일을 결합하려고 하는데, 두 데이터 파일의 크기가 다른 경우의 문제입니다.

 

▷ 첫 번째 데이터 파일은 orion.catalog이며, 이 데이터는 CustomerID로 인덱스 되어 있거나, 정렬되어있지 않습니다. 이러한 경우 전체의 데이터는 순차적으로 읽히게 됩니다.

 


▷ 큰 데이터 파일은 orion.customerdlimmore이며, CustomerID로 인덱스 되어있습니다. 인덱스를 사용하여 관측값에 직접적으로 접근하며 I/OCPU를 절약할 수 있습니다.

 

▶ 이러한 상황에서, 여러 개의 SET 문장을 사용하면 SAS가 작은 데이터 파일(orion.catalog)은 순차적으로 읽고, 큰 데이터 파일(orion.customerdlimmore)은 인덱스를 이용하여 읽을 수 있습니다.

 

 

▷ 다음은 여러 개의 SET 문장을 사용하는 방법입니다. 간단하게, DATA STEP에 여러 개의 SET 문장을 작성하는 방법이지만, 이 구문 자체로는 테이블 조회(Table Lookup)을 수행하지 않습니다.

 

 


Key= 옵션을 사용하여 데이터에 대한 접근을 순차적인 접근방법에서 직접적(direct)인 접근방법으로 바꿀 수 있습니다. , 테이블 조회를 수행할 수 있습니다.

 

 

 

 

KEY= 옵션이 사용되었을 때, SAS는 입/출력 리턴 코드를 보유할 임시변수(temporary variable)_IORC_를 만듭니다. 이 값은 인덱스된 파일에 현재의 key 값에 대한 항목이 있는지 여부를 나타냅니다.

 

 

SASKEY=index의 현재의 값과 일치하는 관측값을 찾았다면, _IORC_0의 값을 갖습니다.

 

 

SASKEY=index의 현재의 값과 일치하는 관측값을 찾지 못했다면, _IORC_값이 0이 아닌 값을 갖습니다. 또한 0이 아닌 _ERROR_ 값은 데이터 오류가 발생했음을 나타냅니다. , 아래와 같은 예의 경우, Ulrich Heyde CustomerID 66의 고객이 아닌 것을 의미합니다.

 

 

_IROC_를 결과를 제어하기 위해 사용해보도록 하겠습니다.

  DATA STEPdata 문장은 PDV를 초기화합니다.

 

 

▷ 첫 번째 SET 문장은 KEEP에 있는 변수들에 대해 orion.catalog 데이터셋을 가져오고, 첫 번째 행(row)를 읽습니다.

▷두 번째 SET 문장에서 KEY= 옵션을 CustomerID로 지정하였기 때문에, orion.customerdimmore 데이터셋의 인덱스에서 PDV에 있는 현재의 key 값을 찾습니다.

 

Key 값을 찾으면, 입력 파일에서 데이터를 직접 읽습니다. PDVCustomer Name에 새로운 값이 입력된 것을 확인하실 수 있습니다.

 


_IORC_의 값이 0이므로 work.catalogcustomers 데이터셋에 입력됩니다.


▷ 다시 PDV를 초기화합니다.


orion.catalog 데이터셋에서 두 번째 관측값을 읽습니다. PDV의 값이 바뀐 것을 확인할 수 있습니다.



CustomerID의 값이 15는 인덱스에 존재하지 않으면, _IROC_값이 0이 아닌 값을 갖게 됩니다.


▷만약 _ERROR_ 값이 0이면, work.errors로 결과를 출력합니다.


▷ 데이터 파일 orion.catalog의 마지막 행에 다다를 때까지 반복됩니다. 

 

 

key 변수에 중복되는 값이 있다면, 결과는 중복이 연속적인지의 여부에 따라 다르게 나타납니다. 예를들어,

 

 

 

 

▷ 데이터셋 oneCustomerID 변수에 연속적인 중복 값을 갖는다면, 각각은 데이터셋 two의 값과 매칭됩니다 .

 

 


▷ 데이터셋 oneCustomerID 변수에 연속적인 중복 값을 갖고, 데이터셋 two와 일부 일치하는 항목이 없다면, 중복을 무시하는 방법으로 UNIQUE 옵션을 사용합니다.

 


▷ 데이터셋 one에서 연속적이지 않은 중복은 데이터셋 two의 첫 번째 행의 값에만 매칭됩니다.

 

이상으로 데이터를 결합할 때 인덱스를 사용하는 방법을 알아보았습니다.

감사합니다^^

 

 

 

 
 
 
 
 [SAS 고급] 요약 데이터와 상세 데이터 결합하기1(Combining Summary and Detail Data 1)
 [SAS 고급] 데이터스텝의 Merge와 SQL Joins 프로시저 (DATA Step Merges and SQL Procedure Joins)