sas数据集的操作主要是基于变量之间的,不是观测之间的。那么,如果我们需要进行观测之间的处理就需要用到lag和dif函数了。
一般我们很容易认为lag就是返回当前参数的上一个观测值,实则不然。lag函数返回的是上一个lag函数运行时的参数,即lag(arguments)=上一次lag函数执行时的arguments。lag函数的一般形式为:lag(变量)、lag2(变量)、lag3(变量)、……
data example;
input year arg;
lag_arg=lag(arg);
lag_arg2=lag2(arg);
cards;
2017 1
2018 2
2019 3
2020 4
2021 5
;
proc print;
run;
输出结果如下:
obs | year | arg | lag_arg | lag_arg2 |
---|---|---|---|---|
1 | 2017 | 1 | . | . |
2 | 2018 | 2 | 1 | . |
3 | 2019 | 3 | 2 | 1 |
4 | 2020 | 4 | 3 | 2 |
5 | 2021 | 5 | 4 | 3 |
在不加任何条件的情况下,dif(x)=x-lag(x),类似地,dif2(x)=x-lag2(x)……;一般形式:dif(变量)、dif2(变量)、dif3(变量)……
data example;
input x;
dif_x=dif(x);
datalines;
5
2
9
8
;
proc print;
run;
输出结果如下:
obs | x | dif_x |
---|---|---|
1 | 5 | . |
2 | 2 | -3 |
3 | 9 | 7 |
4 | 8 | -1 |