BookmarkSubscribeRSS Feed

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

Started ‎06-17-2020 by
Modified ‎06-17-2020 by
Views 163

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

 

 

안녕하세요^^

 

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

 

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

  • _IORC_를 사용하여 결과 제어

     

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

 

 

 

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

SE22017061823101670.jpg

 

 

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

SE22017061823103970.jpg

 

 

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

SE22017061823110070.jpg

 

 

 

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

SE22017061823112270.jpg

 

 

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

SE22017061823114270.jpg

 

 

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

SE22017061823115870.jpg

 

 

 

 

 

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

SE22017061823121770.jpg

 

 

▷ SAS가 KEY=index의 현재의 값과 일치하는 관측값을 찾았다면, _IORC_가 0의 값을 갖습니다.

SE22017061823123570.jpg

 

 

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

SE22017061823125270.jpg

 

 

 

 

 

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

 

 

▷ DATA STEP의 data 문장은 PDV를 초기화합니다.

 

SE22017061823133270.jpg

 

SE22017061823134470.jpg

 

 

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

SE22017061823135970.jpg

 

 

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

SE22017061823141670.jpg

 

 

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

SE22017061823143370.jpg

 

SE22017061823144470.jpg

 

 

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

SE22017061823150170.jpgSE22017061823151170.jpg

 

 

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

SE22017061823152570.jpg

 

 

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

SE22017061823154170.jpg

 

 

===============================================================

 

 

SE22017061823155170.jpg

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

 

 

SE22017061823160470.jpg

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

 

 

SE22017061823161970.jpg

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

 

 

 

 

 

 

 

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

SE22017061823164370.jpg

 

 

 

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

SE22017061823170370.jpg

 

SE22017061823171070.jpg

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

 

 

 

SE22017061823175370.jpg

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

 

 

 

 

 

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

 

감사합니다^^

Version history
Last update:
‎06-17-2020 04:40 AM
Updated by:
Contributors

sas-innovate-white.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.

 

Early bird rate extended! Save $200 when you sign up by March 31.

Register now!

Article Labels
Article Tags