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

【SAS Statement】 MERGE 구문

by 기서무나구물 2022. 2. 3.

포스팅 목차

    o MERGE 구문

     


    1. 목 적

       MERGE 구문은 다수의 SAS 데이터 세트의 관측치를 하나의 관측치로 결합하여 새로운 SAS 데이터 세트를 생성한다. MERGE 구문은 SQL의 일반적인 내/외부 조인의 기능을 동일하게 수행한다.

     


    2. 문 법


    MERGE 
    SAS-data-set-1 <(data-set-options)>

                  SAS-data-set-2 <(data-set-options) >
                  < ...SAS-data-set-n<(data-set-options)>>
                                                < END=variable>;

     

    1) SAS-data-set

       관측치가 존재하는 2개 이상의 SAS 데이터 세트를 지정한다. 개별 데이터 세트의 이름, 데이터 세트 리스트 또는 앞의 두 개를 결합하여 지정할 수 있다.

     

    Tip : 데이터 세트 이름 대신에 운영 시스템이 인식하는 파일의 물리적 경로를 지정 있다. 경로명은 단일 인용 부호 또는 이중 인용 부호 안에 작성해야 한다.
    관련사항 : MERGE 구문에서 데이터 세트 리스트 사용

     

    2) (data-set-options)

       SAS 데이터 세트명 바로 뒤의 괄호 안에 다수의 SAS 데이터 세트 옵션을 지정한다. 데이터 스텝에서 처리를 위하여 관측치를 읽을 때, 데이터 세트 옵션은 SAS가 취해야 하는 행동을 지정한다. 데이터 세트 리스트에 적용되는 데이터 세트 옵션은 리스트에 있는 모든 데이터 세트에 동일하게 적용된다.

     

    설명 : 데이터 스텝에서 처리를 위하여 관측치를 읽을 , 데이터 세트 옵션은 SAS 취하는 행동을 지정한다. 데이터 세트 옵션 리스트에 대하여는 SAS 데이터 세트 옵션을 참조.
    Tip : 데이터 세트 리스트에 적용되는 데이터 세트 옵션은 리스트에 있는 모든 데이터 세트에 적용된다.

     

    3) END=variable

       파일의 끝(End-of-file)을 표시하는 임시 변수를 생성하도록 지정한다. 변수는 초기값으로 0이 지정되고 MERGE 구문의 마지막 관측치를 처리할 때 1로 설정된다. 만약 입력 데이터 세트가 서로 상이한 개수의 관측치를 가졌다면, END= 변수는 MERGE 구문이 모든 데이터 세트 중에서 마지막 관측치를 처리할 때 1로 설정된다.

     

    설명 : 변수는 초기값으로 0 지정되고 MERGE 구문의 마지막 관측치를 처리 1 설정된다. 만약 입력 데이터 세트가 서로 상이한 개수의 관측치를 가졌다면, END=변수는 MERGE 구문이 모든 데이터 세트 중에서 마지막 관측치를 처리 1 설정된다.
    Tip : END=변수는 새롭게 생성되는 SAS 데이터 세트에 추가되지 않는다.

     

     


    3. 상세설명

     

    기본 사항

    MERGE 구문은 프로그램에서 다양한 형태와 사용 방법을 제공한다. 다음 세션은 MERGE 구문의 기본 사용 방법을 설명한다.

     

    상세한 사용 방법은 SAS Language Reference: Concepts에서 “How to Prepare Your Data Sets” 참고하라.

     

    MERGE 구문에서 데이터 세트 리스트 사용

    MERGE 구문에서 데이터 세트 리스트를 사용 있다. 다수의 데이터 세트를 결합 때에 데이터 리스트를 사용하여 효율적으로 데이터 세트를 MERGE 구문에 작성 있다. 데이터 세트 리스트는 이름 첨자 리스트 또는 범위 부여 리스트 형태를 사용 있다.

    이름 첨자 리스트는 지정된 문자열로 시작하는 모든 데이터 세트를 참조한다. 예를 들어, MERGE SALES1:; "SALES1" 시작하는 모든 데이터 세트 열을 결합한다. (SALES1, SALES10, SALES11, .. SALES12.)

    범위 부여 리스트는 동일한 형태의 이름을 가지는 데이터 세트가 연속으로 존재해야 하고, 데이터 세트 이름의 마지막 열은 문자 또는 문자열이 아닌 연속적인 숫자로 구성되어 있어야 한다. 범위 부여 리스트에서 임의의 숫자로 시작해서 임의의 숫자로 종료할 있다. 예를 들어, 다음 리스트는 동일한 데이터 세트를 참조한다.

     

    sales1 sales2 sales3 sales4
    
    sales1-sales4

     

    참고 : 만약 번째 데이터 세트 이름에서 숫자 첨자의 부분에 0 포함하면, 마지막 데이터 세트 이름에서 숫자 첨자의 자리수는 처음 데이터 세트의 숫자 첨자 자리수 보다 크거나 같아야 한다. 그렇지 않으면, 에러가 발생할 것이다. 예를 들어 데이터 세트 리스트 sales001-sales99 sales01-sales9 에러가 발생한다. 데이터 세트 리스트 sales001-sales999 올바른 사용법이다. 만약 처음 데이터 세트 이름에서 숫자 첨자의 부분에 0 포함하고 있지 않으면, 처음과 마지막 데이터 세트 이름에서 숫자 첨자의 자리수는 같을 필요가 없다. 예를 들어 데이터 세트 리스트 sales1-sales999 올바른 사용법이다.

     

    범위 부여 데이터 세트 리스트를 사용 때에 고려 일부 규칙은 다음과 같다.

     

    • 다수의 범위 그룹을 지정 할 수 있다.
    SAS Program
    merge cost1-cost4 cost11-cost14 cost21-cost24;

     

    • 범위 부여 리스트와 이름 첨자 리스트를 함께 사용 할 수 있다.
    SAS Program
    merge cost1-cost4 cost2: cost33-37;

     

    • 단일 데이터 세트와 데이터 세트 리스트를 함께 사용 할 수 있다.
    SAS Program
    merge cost1 cost10-cost20 cost30;

     

    • 데이터 세트 리스트 주위의 인용 부호는 무시된다.
    SAS Program
    /* 다음 2개 라인은 동일하다 */
    
    merge sales1-sales4;
    
    merge 'sales1'n-'sales4'n;

     

    • 데이터 세트 이름에서 공백을 사용 할 수 없다. 만약 인용부호가 사용된다면, 후행 공백을 제거하고 사용한다.
    SAS Program
    /* 다음 문장에서 공백은 에러를 발생한다. */
    
    merge sales 1-sales 4;
    
    merge 'sales 1'n - 'sales 4'n;
    
     
    
    /* 다음 문장에서 후행 공백은 무시될 것이다. */
    
    merge 'sales1   'n - 'sales4   'n;

     

    • 사용 가능한 최대 숫자 첨자는 2147483647이다.
    SAS Program
    /* 다음에 사용된 숫자 첨자는 에러를 발생 할 것이다. */
    
    merge prod2000000000-prod2934850239;

     

    • 데이터 세트 리스트에 물리적 경로명을 사용 할 수 없다.
    SAS Program
    /* 물리적 경로명은 에러를 발생할 것이다. */
    
    %let work_path = %sysfunc(pathname(WORK));
    
    merge "&work_path\dept.sas7bdat"-"&work_path\emp.sas7bdat" ;

     

    1) 1:1 결합

       1:1 결합은 다수의 SAS 데이터 세트에 존재하는 관측치를 결합하여 새로운 데이터 세트에 하나의 관측치를 생성한다. 1:1 결합을 수행하려면 BY 구문을 지정하지 않은 MERGE 구문을 사용한다. SAS는 MERGE 구문에 나열된 모든 데이터 세트의 첫 번째 관측치를 결합하여 새로운 출력 데이터 세트의 첫 번째 관측치를 생성하고, 나열된 모든 데이터 세트의 두 번째 관측치를 결합하여 새로운 데이터 세트의 두 번째 관측치로 저장하는 방식으로 관측치를 계속 결합한다. 1:1 결합에서, 새로운 데이터 세트의 관측치 개수는 MERGE 구문에 나열된 데이터 세트 중에서 관측치 수가 가장 많은 데이터 세트의 관측치 숫자와 동일하다.

    경고 : 1:1 결합으로 데이터 세트를 결합 주의하라.
    1:1 결합은 때때로 원하지 않는 결과를 산출 있으므로, 1:1결합을 사용하기 전에 데이터 세트의 샘플을 사용하여 프로그램을 충분히 테스트하자.

     

    2) 가로 대응 결합(Match-Merging)

       가로 대응 결합은 BY 문에 지정된 공통 변수의 값을 기준으로 다수의 SAS 데이터 세트에 존재하는 관측치를 결합하여 새로운 데이터 세트에 관측치를 생성한다. 새로운 데이터 세트의 관측치 개수는 모든 데이터 세트에 존재하는 각각의 BY 그룹 중에서 최대 관측치 개수를 소유한 BY 그룹에 대한 관측치 개수의 합이 된다. 가로 대응 결합을 수행하기 위하여, MERGE 구문 뒤에 바로 BY 구문을 지정해야 한다. BY 구문에 사용되는 변수는 모든 데이터 세트에 존재해야 하며, MERGE 구문에는 하나의 BY 구문을 사용할 수 있다. MERGE 구문에 나열된 데이터 세트는 BY 구문에 나열된 변수를 기준으로 정렬되거나 적당한 인덱스가 존재해야 한다. 가로 대응 결합에 대한 예제는 예제2 참조.

    참고 : MERGE 구문은 다대다(many-to-many) 가로 대응 결합에서 카테시안 결합을 수행하지 않는다. 대신에 양쪽 데이터 세트의 BY 그룹을 기준으로 관측치가 존재 하는 동안에는 1:1(one-to-one) 결합을 수행한다. 한쪽 데이터 세트(A)에서 BY 그룹의 모든 관측치가 결합에 사용되고, 다른 데이터 세트(B)에는 아직 사용되지 않은 관측치가 남아 있을 때에, 다른 데이터 세트(B) BY 그룹에 대한 모든 관측치가 결합 때까지 데이터 세트(A) 마지막 관측치를 기준으로 1:(one-to-many) 결합을 수행한다.

     


    4. 비교 사항

    • MERGE 구문은 두 개 이상의 데이터 세트의 관측치를 결합한다. UPDATE 구문은 단지 2개의 데이터 세트 관측치를 결합한다. UPDATE 구문은 MASTER 데이터 세트의 선택된 관측치의 값을 변경 또는 갱신 한다. 또한, UPDATE 구문은 관측치를 추가 할 수도 있다.
    • UPDATE 구문과 유사하게 MODIFY 구문은 MASTER 데이터 세터의 선택된 관측치의 값을 변경 또는 갱신하여 두 개 데이터 세트로부터 관측치를 결합한다.
    • 두 개 이상의 SET 구문을 사용하여 관측치를 결합한 결과는 BY 구문 없이 MERGE 구문을 사용하여 결합된 결과와 유사하다. 다수의 SET 구문을 통한 결합에서 데이터 세트의 관측치 개수가 서로 같지 않으면 모든 데이터 세트에서 관측치의 개수가 가장 적은 데이터 세트를 기준으로 프로그램 처리는 중지된다. 대조적으로, MERGE 구문에서는 모든 데이터 세트에서 관측치가 모두 결합 될 때까지 계속 프로그램을 실행한다.

     


    5. 관련 구문

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

     

    • SAS Language Reference: Concepts에서 Reading, Combining , Modifying and SAS Data Sets

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

     


    6. 예 제

    예제1 : 1:1 결합

    데이터 세트의 관측치를 새로운 데이터 세트의 관측치로 결합한다.

     

    SAS Program
    data benefits.qtr1;
       merge benefits.jan benefits.feb;
    run;

     

    예제2 : 가로 대응 결합

    다음 예제는 BY 구문에 지정된 변수의 값을 기준으로 데이터 세트의 관측치를 새로운 데이터 세트의 관측치로 결합하는 방법을 보여준다.

     

    SAS Program
    data inventry;
       merge stock orders;
       by partnum;
    run;

     

    예제3 : 데이터 세트 리스트를 사용한 데이터 결합

    다음 예제는 MERGE 구문에서 결합되는 데이터 세트를 정의하기 위하여 데이터 리스트를 사용한다.

     

    SAS Program
    data d008; job=3; emp=19; run;
    data d009; job=3; sal=50; run;
    data d010; job=4; emp=97; run;
    data d011; job=4; sal=15; run;
    
    data comb;
    merge d008-d011;
    by job;
    run;
    proc print data=comb;
    run;


     


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

     

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

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

    【SAS Statement】 MODIFY 구문  (0) 2022.02.03
    【SAS Statement】 MISSING 구문  (0) 2022.02.03
    [SAS Statement] LOSTCARD 구문  (0) 2022.02.03
    [SAS Statement] LOCK 구문  (0) 2022.02.03
    【SAS Statement】 LIST 구문  (0) 2022.02.03

    댓글