Biostat/SAS Macro

SAS - LAG 과 LEAD

카이집사

시계열이나 역학(epidemiology) 은 시간 흐름에 따라 혹은 여러 연령대에 거쳐서 계산이 되어야 하는 경우가 있다. 이때 이 전 단계(혹은 시점) 자료를 사용하게 되면 LAG 기능이라 하고, 이후 단계(혹은 시점)의 자료를 현시점에서 사용하게 되면 LEAD 라는 용어를 보통 사용한다. 

SAS 에서는 LAG 함수가 있어 LAG 를 쉽게 구현할 수 있다. SAS DATA STEP 에서 

lagqx = lag(qx);  

를 사용하게 되면, 변수 LAGQX  의 현재 시점(N번째) 위치에 이전 (N-1 번째) QX 자료를 저장하게 된다. 따라서 LAGQX 의 첫번째 자료는 MISSING(.) 이 발생하게 된다. 

반면, LEAD 기능을 나타내는 SAS 명령어는 별도로 없다. 따라서 아래와 같이 약간의 프로그래밍이 요구된다. 

data rawdata1;
  _N_+1;
  if _N_ <= k then do;
     set rawdata point=_N_;
     leadsx = sx;
  end;
  else leadsx = .;
  set rawdata nobs=k;
run

_N_+1 은 2부터 (자료 수 + 1) 까지의 숫자 sequence 를 생성시킨다. 

k 는 NOBS 에 의해서 변수의 행을 계산한 것이고, POINT 는 숫자 시퀀스가 행의 수 (k) 보다 작거나 같을 경우의 행을 가르킨다. 

위의 프로그램은 rawdata 의 전체를 행의 수는 그대로 두고 2번째 행부터 자료를 1행이 맞추는 등 한줄을 올려서 기록하고, 그 중 한 줄 아래있던 SX 변수를 LEADSX 변수의 현재 행에 저장한다. 그리고 마지막 줄은 MISSING(.) 처리가 되게끔 저장한다. 

그 후에 마지막으로 RAWDATA 를 한번더 SET 문으로 엎어서 동일변수들, 즉 LEADSX 를 제외한 모든 변수들을 원래 RAWDATA 에 맞게끔 저장하는 일종의 트릭을 쓴 것이다. 

아무 간단한 SAS DATASET 을 가지고 위에서 dataset 명과 변수명을 조정하여 실행시키면, 그 의미를 쉽게 이해할 수 있다. 

'Biostat > SAS Macro' 카테고리의 다른 글

SAS MACRO - SYMGET vs. CALL SYMPUT  (0) 2023.11.13
SAS - INTNX  (0) 2023.11.13
SAS Macro 인용함수 %BQUOTE, %NRBQUOTE  (0) 2023.10.26
SAS Macro 매크로 인용함수 %STR, %NRSTR  (0) 2023.10.26
SAS Macro 매크로 변수값 출력 %PUT  (0) 2023.10.23