BookmarkSubscribeRSS Feed

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

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

* [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

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