全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
36081 13
2013-10-24


  我现在有组数据,类似
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


二维码

扫码加我 拉你入群

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

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

全部回复
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;
二维码

扫码加我 拉你入群

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

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

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)这句话又是什么意思呢。谢谢你!
二维码

扫码加我 拉你入群

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

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

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;
二维码

扫码加我 拉你入群

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

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

2013-10-24 19:26:11
wwang111 发表于 2013-10-24 17:10
如果在数据集中只使用lag函数,以stockcode00001和00002为例,会出现00001的最后一条记录lag到了00002的第一 ...
谢谢!学习了!
二维码

扫码加我 拉你入群

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

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

2014-3-4 15:23:44
wwang111 发表于 2013-10-24 17:10
如果在数据集中只使用lag函数,以stockcode00001和00002为例,会出现00001的最后一条记录lag到了00002的第一 ...
学习了,thx
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群