본문 바로가기
SAS/SAS 함수

【SAS 함수】 244. LAG

by 기서무나구물 2021. 10. 3.

포스팅 목차

    o LAG

     


    큐에 저장한 값을 반환한다. 즉, n-th 이전 시차 값을 해당 시점의 관측치 값으로 반환하여 사용한다.

    Category: Special

     


    문 법


    LAG
     <n>(argument)

    Arguments

     

    Required Argument

     

         argument

           수치형 또는 문자형 상수, 변수, 표현식 중 하나를 지정한다.

     

    Optional Argument

     

         n

            시차값 (지연값, 과거값, lagged values) 의 개수를 지정한다.

     


    상세 내용

     

    The Basics

    아직 길이가 할당되지 않은 문자 변수에 LAG 함수가 값을 반환하는 경우 기본적으로 변수에는 인수에 사용된 변수와 동일한 길이가 할당된다.

    LAG1, LAG2, ... LAGn 등으로 사용되는 Lag 함수는 큐(대기열, queue)에서 이전 시점에서 저장한 관측치 값을 반환한다. LAG1와 LAG는 동일한 값을 반환한다. LAGn 함수는 큐에 값을 저장하고, 이전 작업에서 큐에 저장한 값을 반환한다. LAGn 함수가 프로그램안에서 출현할 때마다 각각 해당 시점의 큐값을 생성한다.

    개별 LAG1, LAG2, ... LAGn 의 발생 시점에 해당 큐는 n개의 결측치 값으로 초기화된다. 여기서 n은 큐(대기열)의 길이를 나타낸다.(예를 들어 LAG2 큐는 2개의 결측치 값으로 초기화 된다.) 각 LAGn이 실행 될 때, 해당 큐의 맨 위에 있는 값이 반환되고 해당 위치의 값을 제거 한 후 나머지 값들이 하나씩 위쪽으로 이동하며 인수의 새로운 값이 큐의 맨 아래의 위치에 배치된다. 따라서 LAGn이 발생할 때마다 처음 n번의 실행에 대하여 결측치 값이 반환되고, 그 이후에는 인수의 시차된 값(지연값, 과거값, lagged values)이 반환된다. (LAG2 는 2개 시점 이전의 값을 반환한다.)

     

    Note : 이 함수가 실행된 경우에만 큐의 맨 아래에 현재 시점의 값을 저장하고, 큐의 맨 위에 저장되어 있는 값을 n시차 이전의 값으로 반환한다. 조건문에서 실행되는 LAGn 함수는 조건을 만족하는 관측치에 대해서만 값을 저장하고 반환한다.

     

    만약 LAGn 함수의 인수가 배열의 이름이라면, 배열 내의 각 변수에 대해 별도의 큐가 유지된다.

     


    LAG 함수의 메모리 제한

    LAG 함수가 컴파일될 때 SAS는 LAG 함수에 나열된 변수의 값을 유지하기 위하여 큐에 메모리를 할당한다. 예를 들어, 함수 LAG100(x)의 변수가 8바이트 길이의 수치인 경우, 필요한 메모리의 양은 8의 100배인 800바이트이다. 따라서 LAG 함수에서 사용 가능한 메모리의 양은 SAS가 할당하는 메모리를 기준으로 설정되며, 운영 환경에 따라 달라 질 수 있다.

     


    관련 함수

    함수명 함수 내용
    DIF 현재 위치에 존재하는 관측치의 값과 n번째 lag에 위치한 관측치 값과의 차이를 계산한다.
    DATDIF 두 날짜 사이의 차이를 계산한다.
    LAG 큐에 저장한 값을 반환한다. 즉, n-th 이전 시차 값을 계산한다.
    RETAIN 구문
    INPUT 구문 또는 할당문에 의해 생성된 변수의 값이 데이터 스텝의 반복이 새롭게 시작할 때마다 초기화되는 것(기본 수행 작업)을 방지하여서, 데이터 스텝의 현재 반복에서 다음 반복까지 변수의 값이 유지되도록 한다.
    YRDIF 사용자가 지정한 2개 날짜(date) 사이의 년도 차이를 계산한다.

     


    예 제

     

    예 제 1 :

    첫 번째 Lag와 2번째 Lag값을 반환한다.

    SAS Statements
    data lag1;
         input X @@;
         Y = lag1(x);
         Z = lag2(x);
    datalines;
    1 2 3 4 5 6
    ;

     

    Results
     OBS    X    Y    Z
    
      1     1    .    .
      2     2    1    .
      3     3    2    1
      4     4    3    2
      5     5    4    3
      6     6    5    4

     


    예 제 2 :

    lag값이 조건문에 사용될 경우에는 예측하지 못한 결과값이 나올수 있다.
    a와 c변수의 값을 보면 조건문안에 사용된 변수 a의 경우 예측하지 못한 값이 나온다. (lag함수는 큐에 있는 값을 호출하기 때문)

    SAS Statements
    data lag2;
         input x @@;
         if mod(x,2)=0 then a=lag(x);
         b=lag(x);
         if mod(x,2)=0 then c=b;
         label a='(WRONG) a' c='(RIGHT) c';
    datalines;
    1 2 3 4 5 6 7 8
    ;

     

    Results
    x a b c
    1 . . .
    2 . 1 1
    3 . 2 .
    4 2 3 3
    5 . 4 .
    6 4 5 5
    7 . 6 .
    8 6 7 7

     


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

     

    엑셀(EXCEL)과 SAS 함수(SAS Function) 비교 리스트 링크

     

    SAS 데이터 스텝 구문 리스트(SAS Data Step Statement)
    반응형

    'SAS > SAS 함수' 카테고리의 다른 글

    [SAS 함수] 246. LBOUND  (0) 2021.10.03
    【SAS 함수】 245. LARGEST  (0) 2021.10.03
    [SAS 함수] 243. KVERIFY  (0) 2021.10.03
    【SAS 함수】 242. KURTOSIS  (0) 2021.10.03
    [SAS 함수] 241. KUPDATEB  (0) 2021.10.03

    댓글