SAS笔记(3)LAG和DIFF函数
在实际的应⽤中,我们会想查看当前观测的上⼀个观测值,在上⼀篇博客中我们使⽤了RETAIN语句来记录上⼀条观测,其实SAS还提供了⼀个很好⽤的函数LAG。当我们使⽤函数时,⼀定要明确该函数的返回值是什么。之前我⼀直认为LAG就是滞后⼀阶,返回当前观测的上⼀个值,实际上这种理解是错误的。
LAG返回的是上⼀次LAGE函数运⾏时的实参,即LAG(argument)=上⼀次LAG函数执⾏时的argument.
1. LAG函数
1.1 ⽤LAG计算差值
DATA COMPARE;
INPUT X;
LAST_X = LAG(X);
DIFF_X = X - LAST_X;
DATALINES;
4
2
9
6
;
PROC PRINT DATA=COMPARE NOOBS;
TITLE "Demonstration the LAG Function";
RUN;
在这个例⼦中,LAG的确返回的是当前数据的上⼀个值,但是这只是表象,记住:LAG返回的是上⼀次LAGE函数运⾏时的实参,即
LAG(argument)=上⼀次LAG函数执⾏时的argument。具体地,第⼀个X的值是4,但是在此之前LAG函数并没有执⾏过,那么它的实参当然是空,所以LAG(4)=.;接着X=2,上⼀次运⾏LAG时,LAG的实参是4,所以LAG(2)=4;接着X=9,上⼀次LAG运⾏时的实参是2,所以LAG(9)=2,依次类推。也许你觉得这两种理解对结果没有影响,那么我们来看看下⼀个例⼦:
DATA LAG2;
INPUT X;
IF X > 2 THEN LAG_X = LAG(X);
DATALINES;
1
3
.
diff函数5
2
7
;
PROC PRINT DATA=LAG2;
TITLE "Listing of LAG1 Data Set";
RUN;
注意,为什么LAG(3)是空呢,3的上⼀个值不是1吗,LAG(3)滞后⼀阶不是1吗?所以,记住:LAG返回的是上⼀次LAGE函数运⾏时的实参,即LAG(argument)=上⼀次LAG函数执⾏时的argument。在这个例⼦中,因为只⽤当X>2时才会调⽤LAG,所以第⼀次调⽤LAG时,X=3;当X=5时,第⼆次调⽤LAG,此时LAG(5)=3。
1.2 LAG2 LAG3等等
根据LAG可以推测出LAG2 LAG3的⽤法了:
DATA LAG_N;
INPUT X;
LAG_X = LAG(X);
LAG2_X = LAG2(X);
LAG3_X = LAG3(X);
DATALINES;
1
2
3
4
5
;
PROC PRINT DATA=LAG_N;
TITLE "Demonstrating the LAGn Family of Functions";
RUN;
2. DIFF函数
在没有判断语句的前提下,相当于⼀阶差分DIF(X)=X-LAG(X) DATA COMPARE;
INPUT X;
DIFF_X = DIF(X);
DATALINES;
4
2
9
6
;
PROC PRINT DATA=COMPARE NOOBS;
TITLE "Demonstration the DIF Function";
RUN;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。