BookmarkSubscribeRSS Feed

[SAS 프로그래밍 고수 백승민] [Sort, Ranking] 관측치별로 변수 정렬하기

Started ‎06-11-2020 by
Modified ‎06-11-2020 by
Views 126

* [Sort, Ranking] 관측치별로 변수 정렬하기;

* 기본 참고 문서 : http://cafe.daum.net/statsas/3F8j/174

* 기본적으로 관측치별로 정렬을 위하여 sortc/sortn 함수로 정렬 가능;
* 그러나 해당 변수의 순서까지 정렬을 위하여 배열을 사용함;
* Proc transpose 방식으로 구현 가능.;


DATA BACK;
INPUT TVAR1-TVAR5;
CARDS;
1 5 3 6 2
1 5 3 1 2
2 5 9 6 1
1 2 . 3 8
5 8 6 1 3
1 5 2 6 6
;

OPTIONS LS=150;

* 효율적인 로직은 위 기본 참고 문서의 최홍규님의 방식을 참조하시기를 바랍니다.;
* 현재 제 로직은 전체를 관측치를 모두 비교하여 비효율적.;
* 변수와 관측치의 수자가 많으면, Proc Transpose의 속도와 비교 할 필요가 있을 듯 합니다.;


DATA BACK1;
 SET BACK;
     ARRAY TVAR{*} TVAR1-TVAR5; * 관측치값 정렬;
     ARRAY POS(*)  POS1-POS5;   * 변수의 위치 정렬;
     ARRAY NAM{*}  $ NAM1-NAM5; * 변수의 이름 정렬;
    
     * 기본적으로 현재 변수의 위치를 수치로 할당;
     DO k = 1 TO DIM(POS);
        POS{k} = k;
     END;
     DO i = 2 TO DIM(TVAR);
        DO J = i-1 TO 1 BY -1;
           * 현재 관측치가 다음 관측치보다 큰 경우 전환 작업 수행;
           IF TVAR{J}  > TVAR{J+1} THEN DO;
             
              TMP1      = TVAR{J+1}; * 관측치 전환;
              TMP2      = POS(J+1);  * 변수의 위치 전환;
             
              TVAR{J+1} = TVAR{J};
              POS(J+1)  = POS(J);

              TVAR{J}   = TMP1;
              POS(J)    = TMP2;
           END;
        END;
     END;
    
     * 전환된 변수의 위치값에 해당하는 변수명 추출;
     DO I=1 TO 5;
        CNT = POS(I);
        * 변수의 이름을 추출;
        CALL VNAME(TVAR(CNT),NAM(I)); * 참고 : http://www.statwith.pe.kr/SAS/1.FUNCTION/F0077.htm;
     END;

RUN;
 

Version history
Last update:
‎06-11-2020 09:31 PM
Updated by:
Contributors

hackathon24-white-horiz.png

The 2025 SAS Hackathon Kicks Off on June 11!

Watch the live Hackathon Kickoff to get all the essential information about the SAS Hackathon—including how to join, how to participate, and expert tips for success.

YouTube LinkedIn

Article Labels
Article Tags