안녕하세요. 오늘은 RANK프로시져를 이용해 그룹별로 top n 을 검색하는 방법에 대해 알아보겠습니다.
PROC RANK OPTIONS
우선 PROC RANK문에 대해 간단하게 알아보겠습니다. 일반적으로 하나 또는 그 이상의 연속형 변수에 대해 순위를 얻기 위해 사용됩니다. 그리고 기본적으로 다음과 같은 형식을 가지게 됩니다.
PROC RANK문에 자주 사용되는 옵션에는 out=, Ties=, Descending등이 있습니다. Out=옵션은 새롭게 생성될 데이터셋을 만드는 역할을 하고 Descending옵션은 순위를 매기는 기준이 큰 값일 수록 높은 순위를 가지게 합니다. 같은 순위를 가지는 경우 Ties= 옵션으로 어떻게 순위가 매겨질지 결정됩니다. Ties=Mean이 올 경우 순위들의 평균을 공통된 순위로 결정합니다. Ties=High은 순위들 중 큰 값을, Ties=Low은 순위들 중 작은 값을 순위로 결정합니다.
예를 들어 다음과 같은 데이터셋이 있을 때
Ties=high 옵션을 사용하게 되면 2위와 3위 중 3위로 값을 결정하게 되고
Ties=low 옵션을 사용하게 되면 2위와 3위 중 3위로 값을 결정하게 됩니다.
그리고 ties=mean 옵션은 디폴트 값과 마찬가지로 2위와 3위의 평균값으로 순위를 결정합니다.
VAR, RANKS
RANK 프로시져에 쓰이는 명령문에서 VAR명령문은 순위의 기준이 되는 변수들을 지정하는 역할을 하고 RANKS명령문은 순위를 저장할 새로운 변수를 생성할 때 쓰입니다. 만약 RANKS명령문이 없다면 VAR명령문에 지정된 변수들은 순위로 기존의 값들이 대체됩니다. 따라서 기존의 자료값을 보존하고 싶다면 RANKS명령문을 함께 사용하는 것이 좋습니다.
GROUP, top n
만약 데이터 내에 그룹이 존재하여 그룹별로 순위를 매기고 싶을 때는 BY명령문을 사용하면 됩니다. 단, PROC SORT문으로 미리 그룹변수를 정렬해 놓아야 합니다.
예를 들어 다음과 같은 데이터가 있을 때 test 그룹별로 순위를 매기고 싶다면
우선 PROC SORT문으로 변수 test에 대해 정렬을 한 후 PROC RANK문에서 BY test 명령문을 통해 그룹별로 순위를 매길 수 있습니다.
그룹별로 top n 의 개체만을 검색하는 법은 다음과 같이 순위변수에 대한 조건문을 만드는 것입니다.
데이터 단계에서 if 조건문을 사용할 수도 있고
PROC SQL문에서 where 조건절을 사용하여 그룹별로 1또는 2위의 개체값을 검색할 수 있습니다.
마치며
오늘은 PROC RANK문을 사용하여 그룹별로 top n개의 개체를 검색하는 법에 대해 알아보았습니다. 이외에도 PROC RANK문에 있는 옵션이나 함께 쓰이는 명령어 등의 활용에 대해서도 간단히 알아보았습니다.
Reference
김기영 외 3인. 『예제로 배우는 SAS프로그래밍 입문』. 자유아카데미. 2016.
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.