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

【SAS Statement】 DO 반복(Iterative) 구문

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

포스팅 목차

    o DO 반복(Iterative) 구문

     


    1. 목 적 

       DO 반복(Iterative) 구문은 인덱스 변수의 값에 따라서 DO 구문과 END 구문 사이에 작성한 구문을 반복하여서 실행한다. DO 반복 구문은 WHILE이나 UNTIL 절과 함께 사용할 수 있다.

     


    2. 문 법 

    DO index-variable=specification-1 <, . . . specification-n>;
           반복하여 실행되는 SAS 구문 
    END;

    1) index-variable

       DO 그룹의 실행을 제어하기 위한 값을 소유하는 인덱스 변수 이름을 지정한다.

    Tip : 인덱스 변수를 삭제하도록 지정하지 않으면, 인덱스 변수는 출력 데이터 세트에 포함된다.
    경고 : DO 그룹 안에서 인덱스 변수의 변경하는 것을 되도록 피해라. 반복 DO 그룹 안에서 인덱스 변수를 수정하면, 무한 반복 상태가 발생 있다.

     


    2) specification

       다음 형태의 표현식을 지정하라.

    start increment>expression) | UNTIL(expression)>

     

    필요사항 : 반복 DO 구문은 적어도 하나 이상의 지정자(specification) 인수를 지정해야 한다.
    Tip : 옵션 TO BY 절의 순서는 변경 가능하다.
    Tip : 다수의 specification 사용하는 경우에는 DO 그룹이 실행되기 전에 개별 specification 먼저 평가된다.
    • 1) start

       인덱스 변수의 초기값을 지정하는데, DO 그룹은 index-variable와 start의 값이 일치하는 경우에 처음 실행된다. 

    TO stop 또는 BY 증가값을 사용하는 경우에 start는 숫자 또는 숫자를 반환하는 표현식을 지정해야 한다.

     

    제한사항 : TO stop 또는 BY 증가값과 함께 사용 , start 숫자 또는 숫자를 산출하는 표현식이어야 한다.
    상세설명 : TO stop 또는 BY 증가값을 지정하지 않고 DO 반복문을 사용하는 경우에 start 값은 다음 형태로 항목을 나열하여 사용 있다.

    item-1 <, ...item-n>;

     

    • (1) 항목 나열 방식

       DO 반복문에서 TO stop 와 BY 증가값을 지정하지 않고, start의 값을 다음 형태와 같이 항목(item)을 직접 나열하여 사용할 수 있다.

     

    item-1 <, ...item-n>;

       항목 값으로는 수치형 상수 또는 모두 문자형 상수를 지정하거나 또는 동일한 형태의 변수를 지정할 수 있는데, 문자 상수는 인용부호 안에 작성해야 한다. DO 그룹은 항목을 나열한 리스트 안에 있는 개별 항목에 대하여 한 번씩 실행한다. 만약 항목 나열 방식에서 WHILE 조건 또는 UNTIL 조건을 함께 사용하면, 해당 조건은 바로 앞에 있는 항목에만 적용된다.

     


    • 2) TO stop

       인덱스 변수의 종료값을 지정한다. Stop에는 숫자 또는 숫자를 산출하는 표현식을 지정해야 한다.

     

       Start와 stop가 함께 사용하는 경우에는, index-variable의 값이 stop의 값에 전달될 때까지 increment의 값에 따라서 계속 반복 실행된다. start와 increment만 지정하면, SAS 구문이 프로그램을 반목문을 중지시키거나 DO 구문에 지정된 WHILE 또는 UNTIL 표현식이 만족될 때까지 increment의 값에 따라서 계속 반복 실행된다. stop과 increment을 지정하지 않으면, 그룹은 start의 값에 따라서 실행한다.

     

       처리가 완료되기 전에 DO 반복문의 반복 작업을 중지시키려면, index-variable의 값을 수정하여서 해당 값이 stop의 값을 넘어가도록 하거나, LEAVE 구문을 사용하여서 반복문의 실행을 외부에 있는 구문으로 이동시켜야 한다.

     

    제한사항 : Stop 숫자 또는 숫자를 산출하는 표현 식이어야 한다.
    상세설명 : Start stop 함께 사용하는 경우에는, index-variable 값이 stop 값에 전달 때까지 increment 값에 따라서 계속 반복 실행된다.

    단지 start increment 함께 사용하는 경우에는, SAS 구문이 프로그램을 반목문의 밖에서 실행되도록 지시하거나 또는 DO 구문에 지정된 WHILE 또는 UNTIL 표현식이 만족 때까지 increment 값에 따라서 계속 반복 실행된다.

    만약 stop increment 지정되지 않으면, 그룹은 start 값에 따라서 실행한다. Stop 값은 반복문의 번째 실행 전에 평가되어야 한다.
    Tip : DO 그룹 안에서 stop 값을 변경하여도 반복 횟수에 영향을 미치지 않는다.

    처리 완료 전에 DO 반복문의 반복 작업을 중지시키기 위하여,
    index-variable 값을 수정하여서, 값이 stop 값을 넘어가도록 하거나, 반복문의 실행을 외부에 있는 구문으로 보내기 위하여 LEAVE 구문을 사용하라.
    주요기능 : 예제 1 : 반복 DO 구문의 여려 형태 사용하기

     


    • 3) BY increment

       Index-variable의 증감 단위를 지정하기 위하여 숫자 또는 수치형 표현식 지정한다. 만약 increment를 지정하지 않으면, index 변수는 기본적으로 1씩 증가된다.

    상세설명 : Increment 값은 반복문의 실행전에 평가된다. 생성된 increment 값을 DO그룹 안에서 변경하여도 반복 횟수에 영향을 미치지 않는다.

    만약 increment 지정되지 않으면, index 변수는 기본적으로 1 증가된다.

    Increment 양수라면, start 하한값이 되어야 하고, 만약 stop 존재하면 stop 반복문의 상한값이 되어야 한다.
    만약 increment 음수라면, start 상한값이 되어야 하고, 만약 stop 존재하면 stop 반복문의 하한값이 되어야 한다.
    주요기능 : 예제 1 : 반복 DO 구문의 여려 형태 사용하기

     


    • 4) WHILE(expression) | UNTIL(expression)

       지정된 SAS 표현식을 DO 그룹의 실행 전 또는 후에 평가한다. WHILE 표현식은 개별 반복 작업의 실행 전에 표현식을 평가하고, 평가된 표현식이 참일 동안에 그룹 안에 지정한 구문을 반복적으로 실행한다. 반대로 UNTIL 표현식은 개별 반복 작업의 실행 후에 표현식을 평가하고, 평가한 표현식이 참이 될 때까지 그룹 안에 지정한 구문을 반복적으로 실행한다. 항목 나열 방식에서 WHILE 또는 UNTIL 지정자는 구문 안에 존재하는 마지막 항목에만 영향을 미친다.

    제한사항 : 항목 나열 방식에서 WHILE 또는 UNTIL 지정자는 구문 안에 존재하는 마지막 항목에 영향을 미친다.(예제1)
    상세설명 : WHILE 표현식은 개별 반복 작업의 실행 전에 평가되고, 평가된 표현식이 참일 동안에 반복적으로 그룹 안에 존재하는 구문이 반복 실행된다.

    UNTIL 표현식은 개별 반복 작업의 실행 후에 평가되고, 평가된 표현식이 참이 때까지 반복적으로 그룹 안에 존재하는 문장이 반복 실행된다.
    주요기능 : 예제 1 : 반복 DO 구문의 여려 형태 사용하기
    관련사항 상세한 정보는 DO WHILE 구문과 DO UNTIL 구문을 참조하라.

     


    3. 비교 사항

    DO 구문에는 3가지 형태가 있다.

     

    • DO 그룹 처리의 가장 단순한 형태의 DO 구문은 DO와 END 구문 사이의 SAS 문장을 그룹으로 지정하여(DO 그룹) 하나의 단위로 실행한다. 일반적으로 IF-THEN/ELSE 구문에서 사용된다.

     

    • DO UNTIL 구문은 조건식이 참이 될 때까지 반복적으로 DO 반복문 안의 구문을 실행하고, DO 반복문의 개별 반복 후 마지막 부분에서 조건식을 체크한다.

     

    • DO WHILE 구문은 조건식이 참인 동안에 반복적으로 DO 반복문 안의 문장을 실행하고, 개별 DO 반복문이 시작하기 전에 조건식을 체크한다.

     


    4. 관련 구문 

    구문명 구문내용
    ARRAY 구문 배열에서 사용하기 위한 배열 원소를 정의한다.
    배열 참조 구문 배열 구문에서 정의한 배열의 원소를 처리하기 위하여 참조하는 방법을 지정한다.
    DO 구문 그룹 단위로 실행하기 위한 SAS 문장의 그룹을 지정하라.
    DO 반복 구문 인덱스 변수의 값에 따라서 DO 구문과 END 구문 사이에 작성한 구문을 반복하여서 실행한다.
    DO UNTIL 구문 지정한 조건식이 참이 될 때까지 반복적으로 DO 반복문 안의 문장을 실행한다.
    DO WHILE 구문 지정한 조건식이 참일 동안에 반복적으로 DO 반복문 안의 문장을 실행한다.
    GO TO 구문 label 인수에서 지정된 LABEL 구문으로 프로그램을 이동하여서 계속 처리한다.

     


    5. 예 제

     

    예제 1 : DO 반복 구문의 여려 형태 사용하기

    • 다음의 반복 DO 구문은 start의 값으로 항목 나열 방식을 사용한다.
    SAS Statements
    do month='JAN','FEB','MAR';
    
    do count=2,3,5,7,11,13,17;
    
    do i=5;
    
    do i=var1, var2, var3;
    
    do i='01JAN2001'd,'25FEB2001'd,'18APR2001'd;

     

    • 다음의 반복 DO 구문은 start TO stop 방식을 사용한다.
    SAS Statements
    do i=1 to 10;
    
    do i=1 to exit;
    
    do i=1 to x-5;
    
    do i=1 to k-1, k+1 to n;
    
    do i=k+1 to n-1;

     

    • 다음의 반복 DO 구문은 BY increment 방식을 사용한다.
    SAS Statements
    do i=n to 1 by -1;
    
    do i=.1 to .9 by .1, 1 to 10 by 1, 20 to 100 by 10;
    
    do count=2 to 8 by 2;

     

    • 다음의 반복 DO 구문은 WHILE 또는 UNTIL 구문과 함께 사용한다.
    SAS Statements
    do i=1 to 10 while(x<y);
    
    do i=2 to 20 by 2 until((x/3)>y);
    
    do i=10 to 0 by -1 while(month='JAN');

     

    • 다음 예제에서 DO 반복문은 i=1과 i=2 인 경우에 실행된다. WHILE 조건은 i=3 인 경우에만 평가되고, WHILE 조건이 참이라면 실행된다.
    SAS Statements
    DO I=1,2,3 WHILE (condition);

     


    예제 2 : 무한 반복(looping)없이 반복 DO 구문 사용하기

    다음 예제는 DO 그룹을 모두 10 실행한다. 번째 예제는 일반적으로 사용되는 접근 방식을 설명한다.

    SAS Statements
    /* 올바른 코딩 */
    do i=1 to 10;
       ...more SAS statements...
    end;

     

    다음 예제는 일반적으로 추천되지는 않지만, TO BY 인수를 사용하여 위와 동일하게 작성한 프로그램이다.

    SAS Statements
    do i=1 to n by m;
       ...more SAS statements...
       if i=10 then leave;
    end;
    if i=10 then put 'EXITED LOOP';

     


    예제 3 : DO 반복문의 실행 중지

    다음 예제에서, EXIT 변수의 값을 index 변수의 값에 할당하여 반복문이 종료되도록 한다.

     

    SAS Statements
    data iterate1;
       input x;
       exit=10;
       do i=1 to exit;
          y=x*normal(0);
          /* 만약 y>25 면, i의 값이 실행을 중지하도록 변경된다. */         
          if y>25 then i=exit;
          output;
       end;
       datalines;
    5
    000
    2500
    ;

     


     


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

     

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

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

    【SAS Statement】 DROP 구문  (0) 2022.01.28
    【SAS Statement】 DO WHILE 구문  (0) 2022.01.28
    【SAS Statement】 DO 구문  (0) 2022.01.25
    [SAS Statement] DM 구문  (0) 2022.01.25
    【SAS Statement】 DESCRIBE 구문  (0) 2022.01.25

    댓글