SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 649|回复: 2
打印 上一主题 下一主题

Lag的问题

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2009-11-24 11:59:53 | 只看该作者

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

请问如何实现呢?比较弱的一个问题,呵呵,初学,还请指教,谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2009-11-24 12:55:50 | 只看该作者

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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2009-11-24 13:19:35 | 只看该作者

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]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-6 04:36 , Processed in 0.073568 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表