시계열이나 역학(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 |