BookmarkSubscribeRSS Feed

[SAS 프로그래밍] PROC RANK를 이용해 그룹별 top n을 검색하는 방법

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

 

 안녕하세요오늘은 RANK프로시져를 이용해 그룹별로 top n 을 검색하는 방법에 대해 알아보겠습니다.

 

 

 

PROC RANK OPTIONS

우선 PROC RANK문에 대해 간단하게 알아보겠습니다일반적으로 하나 또는 그 이상의 연속형 변수에 대해 순위를 얻기 위해 사용됩니다그리고 기본적으로 다음과 같은 형식을 가지게 됩니다.

 

 

jSR2wb5ycgAAAABJRU5ErkJggg__.png

 

PROC RANK문에 자주 사용되는 옵션에는 out=, Ties=, Descending등이 있습니다Out=옵션은 새롭게 생성될 데이터셋을 만드는 역할을 하고 Descending옵션은 순위를 매기는 기준이 큰 값일 수록 높은 순위를 가지게 합니다같은 순위를 가지는 경우 Ties= 옵션으로 어떻게 순위가 매겨질지 결정됩니다Ties=Mean이 올 경우 순위들의 평균을 공통된 순위로 결정합니다Ties=High은 순위들 중 큰 값을Ties=Low은 순위들 중 작은 값을 순위로 결정합니다.

 

예를 들어 다음과 같은 데이터셋이 있을 때

 

36B2QQE3wiBzPz0RrAh1AYCzvz08fEBSIFAiYCTT4ASCFQRQL0DMTIRAJ8y0YQu8AkcyEQAfMpEE7rAJ3AgEwHwKRNN6AKfwIFMB.png

 

vAAAAAElFTkSuQmCC.png

 

 

 

 

Ties=high 옵션을 사용하게 되면 2위와 3위 중 3위로 값을 결정하게 되고

 

W6w7v0LlaThEPBBQEhm6uK_qnCAQgAIEMgcmjHhhDAAIQ0BCwj3qez6emAcpAAAIQSAnYpQeaEIAABMwEmHCZ0WEIAQjYCSA9dnZ.png

 

nZDK7eoAAAAASUVORK5CYII_.png

 

 

 

 

Ties=low 옵션을 사용하게 되면 2위와 3위 중 3위로 값을 결정하게 됩니다.

 

Xlgdnt8NQAAAABJRU5ErkJggg__.png

 

My0qtFpXpGaBgUWGfNRlChAFUAZIOHNRUA2WvGFbMC2WBgTQVA9ppxxaxANhhYUwGQvWZcMSvUiAIDUyhgskbUFMrBic0UQDayWc.png

 

 

 

그리고 ties=mean 옵션은 디폴트 값과 마찬가지로 2위와 3위의 평균값으로 순위를 결정합니다.

 

ORR6KAgAcC6JGHLBIDBHwQQI985JEoIOCBAHrkIYvEAAEfBNAjH3kkCgh4IIAeecgiMUDABwH0yEceiQICHgigRx6ySAwQ8EEAPf.png

FihscQMBJA3kZQmEFgPALIe7yY4TEEjASQtxEUZhAYjwDyHi9meAwBIwHkbQSFGQTGI4C8x4sZHkPASAB5G0FhBoHxCCDv8WKGxx.png

 

OIAcOB0B9Jk7PQMW9N94n7kFEYdJhyOAWujwBID7hv5uFMEEAm0IYB9oww2j7CAADtiJJTxpQwAcaMMNo_wgAA7YiSU8aUMAHGjD.png

 

 

 

 

 

 

VAR, RANKS

RANK 프로시져에 쓰이는 명령문에서 VAR명령문은 순위의 기준이 되는 변수들을 지정하는 역할을 하고 RANKS명령문은 순위를 저장할 새로운 변수를 생성할 때 쓰입니다만약 RANKS명령문이 없다면 VAR명령문에 지정된 변수들은 순위로 기존의 값들이 대체됩니다따라서 기존의 자료값을 보존하고 싶다면 RANKS명령문을 함께 사용하는 것이 좋습니다.

 

ANpmSn2_1W3DAAAAAElFTkSuQmCC.png

 

ITCLACowiyT1QOBUAv8BY3sM7XEwzE4AAAAASUVORK5CYII_.png

 

 

 

 

 

 

GROUP, top n

 만약 데이터 내에 그룹이 존재하여 그룹별로 순위를 매기고 싶을 때는 BY명령문을 사용하면 됩니다, PROC SORT문으로 미리 그룹변수를 정렬해 놓아야 합니다.

 

예를 들어 다음과 같은 데이터가 있을 때 test 그룹별로 순위를 매기고 싶다면

 

nrsdaCiI917VkLAxHP8tdjrQURH_vasxYGIp7lr8daCyI_1rVnLQxEPMtfj7UWRHysa89a2P8BXshq8ILpKFwAAAAASUVORK5CYI.png

 

NtbWdb63HDQCvB2_tzw8DtyGkQAhAICLA8ZlBAYDECiHaxgOEuBBAtYwACixFAtIsFDHchgGgZAxBYjACiXSxguAsBRMsYgMBiBB.png

 

 

 

 

우선 PROC SORT문으로 변수 test에 대해 정렬을 한 후 PROC RANK문에서 BY test 명령문을 통해 그룹별로 순위를 매길 수 있습니다.

 

gPBOW8LJmdE4AAAAABJRU5ErkJggg__.png

 

gTWF51QwxL9BgAAAABJRU5ErkJggg__.png

 

 

 

 

그룹별로 top n 의 개체만을 검색하는 법은 다음과 같이 순위변수에 대한 조건문을 만드는 것입니다.

 

qgYfeS3AIj2dAgrwdjuNHifSja59DvY6OjWjrSb45qw1nrNfpN5f9JnNVS89tlZDNf0Tes0WMaLnRn42xwLYCrmfuNs8G1AK5m7j.png

 

AffFOppxNMmMgAAAABJRU5ErkJggg__.png

데이터 단계에서 if 조건문을 사용할 수도 있고

 

 

 

 

 

CgAGAqoBJmd4lUDV9CgMG8Bf9Rn_rZY_xsQAAAABJRU5ErkJggg__.png

 

LhpLl9xfLRmo7L2mqsbtji4J39tvq80Xn264SNXm5JwF6Nt8SKUxAYIIAaB6BRBQJLCKDGJVhpFAIDBFDjADSqQGAJAdS4BCuNQm.png

PROC SQL문에서 where 조건절을 사용하여 그룹별로 1또는 2위의 개체값을 검색할 수 있습니다.

 

 

 

 

 

마치며

오늘은 PROC RANK문을 사용하여 그룹별로 top n개의 개체를 검색하는 법에 대해 알아보았습니다이외에도 PROC RANK문에 있는 옵션이나 함께 쓰이는 명령어 등의 활용에 대해서도 간단히 알아보았습니다.

 

 

 

 

 

 

Reference

김기영 외 3인. 『예제로 배우는 SAS프로그래밍 입문』. 자유아카데미. 2016.

 

Version history
Last update:
‎06-17-2020 10:53 PM
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