SAS中文论坛

标题: Lag的问题 [打印本页]

作者: shiyiming    时间: 2009-11-24 11:59
标题: Lag的问题
我想求每个name下面的前三个lag,下面是我的程序,但是结果出来总是不对,请帮我看看吧。
[code:2ucwy4ao]
data temp;
        input name $1. ret;

        datalines;
A        1
A        2
A        3
A        4
A        5
B        1
B        2
B        3
B        4
B        5
C        1
C        2
C        3
C        4
C        5
;
proc sort data=temp; by name; run;

data temp2;
        set temp;
        by name;
        lag1=lag1(ret);lag2=lag2(ret);lag3=lag3(ret);
        if first.name then do;
        lag1=.;
        lag2=.;
        lag3=.;
        end;
run;
[/code:2ucwy4ao]
输出为:
name        ret        lag1        lag2        lag3
A        1                       
A        2        1               
A        3        2        1       
A        4        3        2        1
A        5        4        3        2
B        1                       
B        2        1        5        4
B        3        2        1        5
B        4        3        2        1
B        5        4        3        2
C        1                       
C        2        1        5        4
C        3        2        1        5
C        4        3        2        1
C        5        4        3        2

也就是说对于B和C来说,lag出现了前一个name的。
我想要的结果是:
name        ret        lag1        lag2        lag3
A        1                       
A        2        1               
A        3        2        1       
A        4        3        2        1
A        5        4        3        2
B        1                       
B        2        1               
B        3        2        1       
B        4        3        2        1
B        5        4        3        2
C        1                       
C        2        1               
C        3        2        1       
C        4        3        2        1
C        5        4        3        2

请问如何实现呢?比较弱的一个问题,呵呵,初学,还请指教,谢谢!
作者: shiyiming    时间: 2009-11-24 12:55
标题: Re: Lag的问题
[code:2toi1s05]data temp;
   input name $1. ret;

   datalines;
A   1
A   2
A   3
A   4
A   5
B   1
B   2
B   3
B   4
B   5
C   1
C   2
C   3
C   4
C   5
;
proc sort data=temp; by name; run;

data temp2;
        set temp;
        by name;
        lag1=lag1(ret); name_lag1=lag1(name);
        lag2=lag2(ret); name_lag2=lag2(name);
        lag3=lag3(ret); name_lag3=lag3(name);
        if name ne name_lag1 then lag1=.;
        if name ne name_lag2 then lag2=.;
        if name ne name_lag3 then lag3=.;
        drop name_lag1-name_lag3;
run;[/code:2toi1s05]
作者: shiyiming    时间: 2009-11-24 13:19
标题: Re: Lag的问题
[code:29ptfwap]data temp2;
   set temp;
   by name;
   lag1=lag1(ret); lag2=lag2(ret); lag3=lag3(ret);
   if (first.name) then n =0;
        n+1;
        array v{3} lag3 lag2 lag1;
        if (n <=3) then
                do i =1 to 4-n;       
                   v[i] =.;
                end;
        drop n i;
run;[/code:29ptfwap]




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2