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

【SAS Statement】 Array Reference(배열 참조) 구문

by 기서무나구물 2023. 6. 9.

포스팅 목차

    o Array Reference(배열 참조) 구문

     


    1. 목 적

    배열 참조(Array Reference) 구문은 배열 구문에서 정의한 배열의 원소를 처리하기 위하여 참조하는 방법을 지정한다. 배열을 참조하기 전에 사전에 ARRAY 구문을 사용하여서 데이터 스텝에서 배열을 정의 한 후 배열 참조 구문을 사용하여서 프로그램 내에서 배열을 참조한다.

     

    2. 문 법


    array-name { subscript }

    1) Array-name

    동일 데이터 스텝의 앞부분에서 ARRAY 구문으로 정의한 배열의 이름을 지정한다.

     


    2) {Subscript}

    참조하고자 하는 배열 원소의 위치를 지정하는 첨자를 정의한다. 첨자의 형태는 다음 중의 하나를 사용한다.

     

    (1) {index-variable-1<,…index-variable-n>}

       일반적으로 DO 반복문과 함께 사용되는 인덱스 변수 또는 변수 리스트를 지정한다. 변수의 값은 상수이고, 상수를 직접 지정하는 것도 가능하다. DO 반복문이 실행될 때마다, DO 반복문의 인덱스 변수 값(일반적으로 i 변수를 예제로 사용)은 배열내에서 처리하기 위한 배열 구성 원소(변수)의 해당 위치를 참조하는 첨자로 사용된다. DO 반복문 인덱스 변수의 값이 변경이 되면, 배열 참조의 첨자가 변경된다.

    주요기능  예제 1 : DO 반복문과 함께 사용하기
    Tip : 첨자는 대괄호({}), 중괄호([]), 소괄호(())안에 위치해야 한다.

     

    (2) {*}

       배열에 지정된 배열 원소를 변수 리스트처럼 처리한다.

    Tip :  별표(*)는 INPUT 구문, PUT 구문 또는 일부 SAS 함수와 함께 사용 될 수 있다.
    Tip : 이와 같은 처리 방법은 편리성을 위해 제공되고, 일반적 배열 처리와는 약간 상이하다.
    제한사항 : 임시 배열 원소를 포함하는 배열을 정의 할 때, 별표를 사용하여 배열 원소를 참조 할 수 없다.
    주요기능 : 예제4 : 변수 리스트로 별(*) 참조 사용

     

    (3) Expression-1<,… expression-n>

       SAS 표현식을 사용하여 첨자를 지정한다.

    범위 : 배열 참조를 포함하는 문장이 실행되는 경우에 표현식은 첨자값으로 사용 될 수 있다. 표현식의 결과값은 배열의 하한값과 상한값 사이의 정수값 이어야 한다.
    주요기능 :  예제3 : 첨자 지정하기

     


    3. 범 주

    SAS 구문 (정보 제공 함수)

     


    4. 상세 설명

    • 프로그램 문장에서 배열을 참조하기 위하여, 배열 참조가 사용된다. 배열을 정의하는 ARRAY 구문은 데이터 스텝에서 배열을 참조하기 전에 정의되어야 한다. 배열 정의는 정의한 데이터 스텝 내에서 사용이 가능하다. 만약 다른 데이터 스텝에서 동일한 배열을 사용하기 원한다면, 개별 스텝에서 배열을 재정의해야 한다.
    경고 :  SAS 함수 이름을 배열의 이름으로 사용 할 경우에는 예기하지 못한 결과가 발생된다. 만약 실수로 함수 이름을 배열의 이름으로 사용하였다면, SAS는 데이터 스텝 중에서 함수 이름이 포함된 삽입구 참조를 함수로 처리 하지 않고 배열 참조로 처리한다. 그리고, 경고 메시지를 SAS 로그에 작성한다.

     

    • SAS 함수와 아래의 SAS 문장과 더불어 SAS 표현식을 작성 할 수 있는 곳 어디에서나 배열 참조를 사용 할 수 있다.
      • 할당 문장
      • SUM 구문
      • DO UNTIL
      • DO WHILE
      • IF
      • INPUT
      • PUT
      • SELECT
      • WINDOW

     

    • DIM 함수는 차원의 하한값이 1인 경우에, 배열의 차원에서 배열 원소의 개수를 반환하기 위하여 일반적으로 반복 DO 구문과 함께 사용된다. DIM함수를 사용하면, DO 구문의 상한값을 변경하기 위한 처리 작업 없이 배열 원소의 개수가 자동으로 변경되어 사용이 가능하다. 예를 들어, 아래의 DIM(NEW)은 4의 값을 자동으로 반환하기 때문에, 다음 문장은 배열의 모든 원소를 자동으로 처리한다.
           array new{*} score1-score4;
           do i=1 to dim(new);
              new{i}=new{i}+10;
           end;

     


    5. 비교사항

    • ARRAY 구문은 배열을 정의하고, 반면에 배열 참조는 처리하기 위한 배열 원소에 대한 참조 방법을 지정한다.

     


    6. 관련 구문

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

     


    7. 예제

     

    예제1 : DO 반복문 사용하기

    다음 예제는 DO 반복문의 개별적인 반복에 대한 배열 참조를 위한 첨자로 인덱스 변수 i의 값을 사용하여, 배열의 개별 원소를 처리한다. 만약 배열 원소의 값이 99이면, IF-THEN 구문은 배열 원소의 값을 100으로 변경한다.

    SAS Statements
    array days{7} d1-d7;
       do i=1 to 7;
          if days{i}=99 then days{i}=100;
       end;

     


    예제2 : 단일 문장에서 다수의 배열 참조

    단일 SAS 문장에서 다수의 배열을 참조 할 수 있다. 다음 예제는 먼저 두 개의 배열 DAYS와 HOURS 를 생성한다. DO반복문 안의 문장은 양쪽 배열에 대한 개별 배열 원소를 참조하기 위하여 인덱스 변수 i의 값을 변경하여 사용한다.

    SAS Statements
    array days{7} d1-d7;
    array hours{7} h1-h7;
      do i=1 to 7;
         if days{i}=99 then days{i}=100;
         hours{i}=days{i}*24;
      end;

     


    예제3 : 첨자 지정하기

    다음 예제에서, INPUT 구문은 변수 A1,A2 와 배열 ARR1의 세 번째 원소(A3)를 읽는다.

    SAS Statements
    array arr1{*} a1-a3;
    x=1;
    input a1 a2 arr1{x+2};

     


    예제4 : 변수 리스트로 별표(*) 참조 사용

    SAS Statements
    - array cost{10} cost1-cost10;
      totcost=sum(of cost {*}); 
     
    - array days{7} d1-d7;
      input days {*}; 
     
    - array hours{7}

     


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

     

    SAS 함수(SAS Function) 리스트 링크

     

    MS Bing Image Creator 생성 이미지

    반응형

    댓글