BookmarkSubscribeRSS Feed

[SAS 프로그래밍 고수 백승민] [PROC SQL] MONOTONIC 함수를 사용하여서 그룹내 최소값 최대값 찾기

Started ‎06-11-2020 by
Modified ‎06-12-2020 by
Views 106

* 출처 : http://cafe.daum.net/statsas/3F8j/216

 

* PROC SQL에서 중복제거는 일반적으로 SUBQUERY나 JOIN 으로 일반적으로 처리하지만, MONOTONIC() 함수로 처리해보았습니다;

 

* MONOTONIC은 메모리에서 처리 순서에 따라서 씨퀀스 방식이 달라지므로 권해드리는 방식은 아님을 알려드립니다;

 

 * PROC SQL에서 MONOTONIC은 정식 지원 옵션은 아님;


* http://support.sas.com/kb/15/138.html;
* Usage Note 15138: Support for the MONOTONIC() function in PROC SQL;

 

 

 * [ 참고 ]

데이터 중복제거(first. / last대안) - MAX , MIN : http://cafe.daum.net/statsas/3F8j/162

[SQL] PROC SQL에서 nodupkye 사용(monotonic) : http://cafe.daum.net/statsas/3F8j/70

[MAX] 변수중에 2번째 큰값 찾기 http://cafe.daum.net/statsas/3F8j/163

 

 

DATA BACK;
INPUT VAR1 $ VAR2;
CARDS;
백승민 100
백승민 300
백승민 400
홍길동 500
홍길동 600
김나비 100
김나비 600
김나비 500
;

 

PROC SORT DATA= BACK OUT=BACK1;
      BY VAR1;
RUN;

 

 

* PROC SQL로 구현(사전 PROC SORT);
PROC SQL;
  CREATE TABLE BACK2 AS
    SELECT A.*,
           MONOTONIC()      AS VAR3,
           MIN(MONOTONIC()) AS VAR4
    FROM   BACK1 A
    GROUP BY VAR1
    HAVING MONOTONIC() = MIN(MONOTONIC());
quit;

 

* 데이터 스텝으로 구현;
DATA BACK3;
 SET BACK1;
     BY VAR1;
     IF FIRST.VAR1;
RUN;


* PROC SQL로 구현(사전에 PROC SORT 사용 안함);
* SAS는 인라인뷰에서 ORDER BY 지원안함;

* 내부적으로 정렬 후에 MONOTONIC을 적용하기 위하여 INLINE 뷰 내부에 HAVING절을 삽입하고,
  MONOTONIC에 RANK변수를 지정;

* -> 내부 처리 방식 문제라 정확한 해답이라고 확답을 못하겠네요;
* -> Key값에 중복 발생시에는 문제;

* _TREE로 확인 필요


PROC SQL;
  SELECT A.*,
           MONOTONIC(RANK) AS VAR3,
           MIN(MONOTONIC(RANK)) AS VAR4
  FROM ( SELECT A.*,
                VAR1||PUT(A.VAR2,3.) AS RANK
         FROM   BACK A
         GROUP BY 1,2
         HAVING MIN(RANK) = RANK
       ) A
  GROUP BY VAR1
  HAVING MONOTONIC(RANK) = MIN(MONOTONIC(RANK));
QUIT;
 

Version history
Last update:
‎06-12-2020 04:20 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