楼主: 战士1009
35358 13

[问答] 求教SAS中LAG函数的使用 [推广有奖]

  • 0关注
  • 1粉丝

博士生

82%

还不是VIP/贵宾

-

威望
0
论坛币
3692 个
通用积分
86.8503
学术水平
2 点
热心指数
13 点
信用等级
1 点
经验
4171 点
帖子
149
精华
0
在线时间
527 小时
注册时间
2011-4-13
最后登录
2024-4-16

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币


  我现在有组数据,类似
stockcodetimeprice
000001

2007

15

000001

2006

16

000001

2005

17

000002

2007

18

000002

2006

19

000002

2005

20

000003

2007

21

000003

2006

22

000003

2005

23

000004

2007

24

000004

2006

25

000004

2005

26

000005

2007

27

000005

2006

28

000005

2005

29


想做出以下这种格式,请问该如何编写语言呢,求教论坛里的高手解答,谢谢!
stockcodetimepricelagprice
000001

2007

15

000001

2006

16

15

000001

2005

17

16

000002

2007

18

000002

2006

19

18

000002

2005

20

19

000003

2007

21

000003

2006

22

21

000003

2005

23

22

000004

2007

24

000004

2006

25

24

000004

2005

26

25

000005

2007

27

000005

2006

28

27

000005

2005

29

28


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:lag Price Stock Rice code 如何

回帖推荐

wwang111 发表于4楼  查看完整内容

如果在数据集中只使用lag函数,以stockcode00001和00002为例,会出现00001的最后一条记录lag到了00002的第一条记录,这样就需要把每组stockcode的第一条记录的lagprice的值重置为空,重置的时候用first.stockcode来选择每一组stockcode的第一条记录,call missing就是把lagprice的值重置为空值.如果需要用first.,那么数据集是需要事先经过排序,set数据集的by语句后面跟的变量就是排序(proc sort)时候by的变量,如果数据集中stockco ...
沙发
wwang111 发表于 2013-10-24 16:17:08 |只看作者 |坛友微信交流群
data test;
input stockcode $ time price;
cards;
000001        2007 15
000001        2006 16
000001        2005 17
000002        2007 18
000002        2006 19
000002        2005 20
000003        2007 21
000003        2006 22
000003        2005 23
000004        2007 24
000004        2006 25
000004        2005 26
000005        2007 27
000005        2006 28
000005        2005 29
;

data wanted;
set test;
by notsorted stockcode;
lagprice=lag(price);
if first.stockcode then call missing(lagprice);
run;
已有 3 人评分论坛币 学术水平 热心指数 收起 理由
齐一 + 5 + 1 + 1 热心帮助其他会员
meowlac + 1 + 1 精彩帖子
战士1009 + 1 谢谢谢谢!

总评分: 论坛币 + 5  学术水平 + 2  热心指数 + 3   查看全部评分

只有一个罗纳尔多

使用道具

藤椅
战士1009 在职认证  发表于 2013-10-24 16:53:12 |只看作者 |坛友微信交流群
wwang111 发表于 2013-10-24 16:17
data test;
input stockcode $ time price;
cards;
可否告知一下各个语句的意思呢,刚开始接触SAS,还不太会。为什么要加一个 by notsorted stockcode呢,我原来直接写了by stockcode,就出现了没有排序问题。if first.stockcode then call missing(lagprice)这句话又是什么意思呢。谢谢你!

使用道具

板凳
wwang111 发表于 2013-10-24 17:10:08 |只看作者 |坛友微信交流群
如果在数据集中只使用lag函数,以stockcode00001和00002为例,会出现00001的最后一条记录lag到了00002的第一条记录,这样就需要把每组stockcode的第一条记录的lagprice的值重置为空,重置的时候用first.stockcode来选择每一组stockcode的第一条记录,call missing就是把lagprice的值重置为空值.如果需要用first.,那么数据集是需要事先经过排序,set数据集的by语句后面跟的变量就是排序(proc sort)时候by的变量,如果数据集中stockcode的顺序是一组接着一组,(例如,不会出现第一条是00001,第二条是00002,第三条又是00001),就没必要事先排序,所以就加了一个notsorted选项.

如果需要事先排序,程序如下:
proc sort data=test;
by stockcode;
run;
data wanted;
set test;
by stockcode;
lagprice=lag(price);
if first.stockcode then call missing(lagprice);
run;
只有一个罗纳尔多

使用道具

报纸
战士1009 在职认证  发表于 2013-10-24 19:26:11 |只看作者 |坛友微信交流群
wwang111 发表于 2013-10-24 17:10
如果在数据集中只使用lag函数,以stockcode00001和00002为例,会出现00001的最后一条记录lag到了00002的第一 ...
谢谢!学习了!

使用道具

地板
mzyoung 在职认证  发表于 2014-3-4 15:23:44 |只看作者 |坛友微信交流群
wwang111 发表于 2013-10-24 17:10
如果在数据集中只使用lag函数,以stockcode00001和00002为例,会出现00001的最后一条记录lag到了00002的第一 ...
学习了,thx

使用道具

7
jy1st 发表于 2014-5-17 00:25:32 |只看作者 |坛友微信交流群
正好需要,学习了

使用道具

战士1009 发表于 2013-10-24 16:53
可否告知一下各个语句的意思呢,刚开始接触SAS,还不太会。为什么要加一个 by notsorted stockcode呢,我 ...
if first.stockcode then call missing(lagprice) 意思是如果是第一只股票,就没有值。

使用道具

9
Bel-esprit 发表于 2014-10-13 21:00:22 |只看作者 |坛友微信交流群
data test;
input stockcode $ year price;
cards;
000001        2007 15
000001        2006 16
000001        2005 17
000002        2007 18
000002        2006 19
000002        2005 20
000003        2007 21
000003        2006 22
000003        2005 23
000004        2007 24
000004        2006 25
000004        2005 26
000005        2007 27
000005        2006 28
000005        2005 29
;
run;
proc sort data=test;
by stockcode descending year price;
run;
proc expand  data=test out=new;
by stockcode;
convert price=lag_price/transformout=(lag 1);
run;
已有 1 人评分学术水平 热心指数 收起 理由
xncdww + 1 + 1 好的意见建议

总评分: 学术水平 + 1  热心指数 + 1   查看全部评分

使用道具

10
limanxue 发表于 2015-9-10 11:17:36 |只看作者 |坛友微信交流群
棒!!大体明白了一点~

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-20 01:44