본문 바로가기
SAS/SAS 구문사전

【SAS Statement】 BY 구문

by 기서무나구물 2022. 1. 25.

포스팅 목차

    o BY 구문

     


    1. 목 적 

       BY 구문은 데이터 세트에서 SET, MERGE, UPDATE 구문의 그룹별 관측치에 대한 처리 방식을 지정하고, 특수한 그룹화 변수를 내부적으로 생성한다.

     


    2. 문 법


    BY
      variable-1 <... variable-n > ;

    • DESCENDING

       지정된 변수를 기준으로 데이터 세트의 관측치가 내림차순으로 정렬되도록 지정한다. DESCENDING은 수치형 변수에 대하여 가장 큰 수에서 가장 작은 순서로 정렬하고, 문자형 변수에 대하여 알파벳(한글) 역순으로 정렬한다. 

    제한사항 : 인덱스(INDEX) 항상 올림차순 순서로 저장되기 때문에, 인덱스가 생성된 데이터 세트에 대하여 DESCENDING 옵션을 사용 없다.
    주요기능 : 예제2 : 정렬 순서 지정

     

    • GROUPFORMAT

       BY 그룹이 시작하는 곳과 종료하는 곳을 정의하기 위하여 BY 변수의 내부 값 대신에 출력 형식이 적용된 값을 사용하도록 한다. 그에 따라서, FIRST.variable과 Last.variable가 할당되는 방법이 기존 방식과 다르다. GROUPFORMAT 옵션은 BY 구문 어디에서나 지정할 수 있지만, 이 옵션은 BY 구문에 지정된 모든 변수에 적용된다.

    제한사항 : BY 구문에서 GROUPFORMAT 옵션을 사용하기 전에 BY 구문의 값에 기초하여 데이터 세트의 관측치를 정렬해야만 한다.
    제한사항: GROUPFORMAT 옵션은 데이터 세트의 BY 구문에서 사용 있다.
    영향 : NOTSORTED 옵션을 사용한다면, 데이터 세트에 대한 정렬 또는 인덱스 사용 없이 포맷이 지정된 BY 변수의 값을 사용하여 데이터 세트의 관측치를 그룹화 있다.
    Tip : 그룹화된 관측치를 출력하기 위하여 사용자 포맷을 정의하는 경우에 GROUPFORMT 옵션을 사용하는 것이 유용하다.
    Tip : 데이터 세트에서 GROUPFORMAT 옵션의 사용을 통하여 데이터 세트를 생성하기 위하여 사용되는 BY 그룹(출력형식을 기준으로 그룹화 작업 수행) 출력형식이 지정된 데이터 세트를 그룹 단위로 처리하기 위하여 사용하는 PROC 스텝의 BY 그룹이 동일하게 그룹화 작업을 수행하도록 만든다.
    비교사항 : 데이터 스텝에서 GROUPFORMAT 옵션이 포함된 BY 그룹 처리는 SAS 프로시져에서 출력형식이 지정된 값을 기준으로 BY 그룹 처리하는 것과 동일하게 데이터를 처리한다.
    관련사항 : SAS Language Reference DATA STEP에서 BY-Group 처리
    주요기능 : 예제4 : 출력형식이 적용된 관측치를 사용하여 관측치 그룹화

     

    • Variable

       데이터 세트가 정렬되거나 인덱스가 생성된 기준 변수를 지정한다. 이 변수는 현재 데이터 스텝 또는 PROC 스텝에 대한 기준변수(BY 변수)로 사용된다.

    Tip : 데이터 세트는 하나 이상의 변수에 의해 정렬되거나 인덱스가 생성 있다.

     

     

    • NOTSORTED

       입력되는 상태로 동일한 BY 변수값을 가지는 관측치를 함께 그룹화하지만, 동일 그룹 내의 하위 그룹에 대하여 알파벳 문자 또는 숫자 순서로 추가적인 정렬 작업을 수행하지 않는다.

    제한사항 : MERGE UPDATE 구문에서는 NOTSORTED 옵션을 사용 없다.
    Tip : NOTSORTED 옵션은 BY 구문 어디에서나 사용 있다.
    Tip : 데이터가 시간 순서와 같은 논리적 범주 또는 그룹화되어 존재하면, NOTSORTED 옵션 사용이 유용하다.
    주요기능 : 예제3 : NOTSORTED 옵션이 적용된 데이터를 가지고 BY 그룹 처리하기

     


    3. 상세 설명

     

    BY 그룹의 시작과 끝을 확인하는 방법 :  

    SAS BY 변수에 대하여 2개의 임시 변수를 생성하여 BY 그룹의 시작과 종료 지점을 확인한다. FIRST.variable LAST.variable. 변수의 값은 0 또는 1 값을 가진다. BY 그룹에서 번째 관측치를 읽을 , FIRST.variable 값을 1 설정하고, BY 그룹에서 마지막 관측치를 읽을 , LAST.variable 값을 1 설정한다. 임시 변수는 데이터 스텝의 프로그램 작성에서 사용되지만, 출력 데이터 세트에는 출력되지 않는다.

    그룹화된 데이터 처리 방법과 데이터 준비 방법에 대한 자세한 설명은 DATA step에서 “BY-Group Processing” 참조.

     

    DATS Step

    BY 구문은 SET, MERGE, MODIFY, UPDATE 구문에서 사용된다. 데이터 스텝에서 구문에 대하여 하나의 BY 구문이 사용된다.

    SET, MERGE, UPDATE 구문에서 사용되는 데이터 세트는 BY 구문에서 나열된 변수의 값을 기준으로 사전에 정렬되거나, 적당한 인덱스를 가져야 한다. 기본적으로, 데이터 세트는 수치형 순서 또는 알파벳 순서로 정렬된다. 관측치는 다음 방법으로 정렬 있다.

    • 프로시져를 사용하여 데이터 세트 정렬
    • 변수에 대하여 인덱스 생성
    • 정렬 순서대로 관측치 입력

     

    참고 : MODIFY 데이터 정렬이 필요하지 않지만, 데이터 정렬 작업을 수행하면 작업 속도에 대한 효율성이 향상 있다.
    참고 : BY 구문은 SORTSEQ=LINGUISTIC 옵션과 SORT 프로시져를 사용하여 지정된 데이터의 언어 정렬( linguistic collation) 기준에 따라 정렬된다.

     

    상세한 정보는 SAS Language Reference: Concepts. 에서 “How to Prepare Your Data Sets” 참조하라.

     


    PROC 스텝

    데이터 처리 방식을 변경하기 위하여 일부 SAS 프로시져에서 BY 구문을 사용 있다. BY 구문을 사용한 SAS 프로시져의 처리 방식에 대한 자세한 내용은 Base SAS Procedures Guide에서 개별 SAS 프로시져를 참조하라.

     

    SAS (Views)

    DBMS로부터 데이터를 읽어서 데이터 스텝 뷰를 생성하는 중에, BY 구문과 SET, MERGE, UPDATE, MODIFY 구문을 함께 사용하면, BY 구문은 DBMS 데이터를 정렬하여 반환하도록 지시하기 때문에 데이터 정렬 작업이 수행 있다.

     


    BY 그룹 처리

    SAS 지정된 Variable 기준으로 FIRST.variable LAST.variable 다음과 같은 방식으로 값을 지정한다.

    • FIRST.variable 은 variable의 관측치에 대하여 다음 조건에서 1의 값이 설정된다.
      • Variable의 현재 관측치가 데이터 세트의 처음 관측치인 경우
      • GROUPFORMAT 옵션을 사용하지 않은 경우에는, 출력형식이 지정되기 전의 내부 관측치 값을 기준으로 현재 관측치 값과 이전 관측치 값이 다른 경우. 만약 GROUPFORMAT 옵션이 사용된 경우에는, 출력형식이 지정된 관측치 값을 기준으로 현재 관측치 값과 이전 관측치 값이 다른 경우에 FIRST.variable 1 값이 지정된다.
      • FIRST.variable 값은 BY 구문에서 앞에 위치한 선행 그룹 변수의 값이 변경 되는 경우에 1 값이 지정된다.

    외의 다른 경우에는, FIRST.variable 값은 0 값이 지정된다.

     

    • LAST.variable 은 Variable의 관측치에 대하여 다음 조건에서 1의 값이 설정된다.
      • Variable 현재 관측치가 데이터 세트의 마지막 관측치인 경우
      • GROUPFORMAT 옵션을 사용하지 않는 경우에는, 출력형식이 지정되기 전의 내부 관측치 값을 기준으로 현재 관측치 값과 다음 관측치 값이 다른 경우. 만약 GROUPFORMAT 옵션이 사용되는 경우에는, 출력형식이 지정된 관측치 값을 기준으로 현재 관측치 값과 다음 관측치 값이 다른 경우에 LAST.variable 1 값이 지정된다.
      • LAST.variable 값은 BY 구문에서 앞에 위치한 선행 그룹 변수의 값이 변경 되는 경우에 1 값이 지정된다.

    외의 다른 경우에는, LAST.variable값은 0 값이 지정된다.

     


    4. 범 주

    SAS 기본 구문

     


    5. 관련 구문

    구문명 구문내용
    BY 구문 BY 구문은 데이터 세트에서 SET, MERGE, UPDATE 구문의 그룹별 관측치에 대한 처리 방식을 지정하고, 특수한 그룹화 변수를 내부적으로 생성한다.
    MERGE 구문 MERGE 구문은 다수의 SAS 데이터 세트의 관측치를 하나의 관측치로 결합하여 새로운 SAS 데이터 세트를 생성한다.
    MISSING 구문 MISSING 구문은 입력 데이터에서 수치형 데이터의 특별한 결측치 값을 표현하기 위한 문자를 지정한다.
    MODIFY 구문 MODIFY 구문은 새로운 SAS 데이터 세트를 추가로 생성하지 않고 기존에 존재하는 SAS 데이터 세트의 관측치에 대하여 대체, 삭제, 추가 작업을 수행한다.
    SET 구문 SET 구문은 하나 이상의 SAS 데이터 세트에서 관측치를 읽는다. 

    [SAS Statement] SAS 데이터 스텝 구문 사전 목록]

     


    6. 예 제

    예제1 : 다수의 BY 변수 지정

    • 관측치가 DEPT 변수를 기준으로 오름차순 순서로 정렬된다.
    SAS Statements
    by dept;

     

    • 관측치는 CITY 변수를 기준으로 알파벳(오름차순) 순서로 정렬되고, CITY변수의 개별 관측치에 대한 하위 그룹에서 ZIPCODE 변수를 기준으로 오름차순 순서로 정렬된다.
    SAS Statements
    by city zipcode;

     


    예제2 : 정렬 순서 지정

    • 관측치는 SALESREP 변수를 기준으로 오름차순 순서로 정렬되고, 각 SALESREP 변수의 개별 관측치에 대한 하위 그룹에서 JANSALES 변수를 기준으로 내림차순 순서로 정렬된다.
    SAS Statements
    by salesrep descending jansales;

     

    • 관측치는 BEDROOMS 변수를 기준으로 내림차순 순서로 정렬되고, 각 BEDROOMS 변수의 개별 관측치에 대한 하위 그룹에서 PRICE 변수를 기준으로 내림차순 순서로 정렬된다.
    SAS Statements
    by descending bedrooms descending price;

     


    예제3 : NOTSORTED 옵션이 적용된 데이터를 가지고 BY 그룹 처리하기

    관측치는 비용이 입력된 월의 이름을 기준으로 정렬된다.

    SAS Statements
    by month notsorted;

     


    예제4 : 출력형식이 적용된 관측치를 사용하여 관측치 그룹화

    다음 예제는 GROUPFORMAT 옵션의 사용 방법을 설명한다.

     

    SAS Statements
    proc format;
       value range
          low -55 = 'Under 55'
          55-60   = '55 to 60'
          60-65   = '60 to 65'
          65-70   = '65 to 70'
          other   = 'Over 70';
    run;
     
    proc sort data=class out=sorted_class;
       by height;
    run;
     
    data _null_;
       format height range.;
       set sorted_class;
          by height groupformat;
       if first.height then
          put 'Shortest in ' height 'measures ' height:best12.;
    run;

     

    Results
    Shortest in Under 55 measures 51.3
    Shortest in 55 to 60 measures 56.3
    Shortest in 60 to 65 measures 62.5
    Shortest in 65 to 70 measures 65.3
    Shortest in Over 70 measures 72

     


    예제5 : 다중 관측치 결합과 단일 BY 값을 기준으로 그룹화

    다음 예제는 BY그룹 처리와 함께 First.variable Last.variable 사용 방법을 보여준다.

     

    SAS Statements
    options pageno=1 nodate ls=80 ps=64;
     
    data Inventory;
       length RecordID 8 Invoice $ 30 ItemLine $ 50;
       infile datalines;
       input RecordID Invoice ItemLine &;
       drop RecordID;
       datalines;
    A74  A5296  Highlighters
    A75  A5296  Lot # 7603
    A76  A5296  Yellow Blue Green
    A77  A5296  24 per box
    A78  A5297  Paper Clips
    A79  A5297  Lot # 7423
    A80  A5297  Small Medium Large
    A81  A5298  Gluestick
    A82  A5298  Lot # 4422
    A83  A5298  New item
    A84  A5299  Rubber bands
    A85  A5299  Lot # 7892
    A86  A5299  Wide width, Narrow width
    A87  A5299  1000 per box
    ;
     
    data combined;                
       array Line[4] $ 60 ;      
       retain Line1-Line4;
       keep Invoice Line1-Line4;
     
       set Inventory;
       by Invoice; 
                                          
       if first.Invoice then do;
          call missing(of Line1-Line4);
          records = 0;
       end;
                                           
       records + 1;
       Line[records]=ItemLine;      
                                           
       if last.Invoice then output;
    run;                                    
     
    proc print data=combined;
       title 'Office Supply Inventory';
    run;

     

    Results
    Office Supply Inventory
     
     Obs     Line1        Line2     Line3                        Line4      Invoice
     
      1   Highlighters  Lot # 7603  Yellow Blue Green         24 per box     A5296
      2   Paper Clips   Lot # 7423  Small Medium Large                       A5297
      3   Gluestick     Lot # 4422  New item                                 A5298
      4   Rubber bands  Lot # 7892  Wide width, Narrow width  1000 per box   A5299

     


     


    [SAS Statement] SAS 데이터 스텝 구문 사전 목록]

     

    SAS 함수(SAS Function) 리스트 링크
    반응형

    'SAS > SAS 구문사전' 카테고리의 다른 글

    [SAS Statement] CARDS 구문  (0) 2022.01.25
    [SAS Statement] CALL 구문  (0) 2022.01.25
    【SAS Statement】 ATTRIB 구문  (0) 2022.01.25
    【SAS Statement】 ARRAY 구문  (0) 2022.01.25
    【SAS Statement】 ABORT 구문  (0) 2022.01.25

    댓글