全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3040 4
2013-05-29
各位前辈:我需要将每个公司每个年份每个季度的“纯”季度现金流计算出来,但已有数据是该年累计数,所以需要分年份相减,数据截取如下:(mm是我自己计算的,源数据不包含它)
yearqtrcfymm

1998

2

1998

4

58.108

1999

2

2000

2

51.801

51.801

2000

4

153.092

94.984

2001

2

2001

4

32.285

-120.807

2002

2

-22.213

-22.213

2002

4

16.39

-15.895

2003

2

3.525

3.525

2003

4

61.607

45.217

2004

1

34.095

34.095

2004

2

56.601

-5.006

2004

3

79.195

22.594

2004

4

74.889

-4.306

2005

1

22.519

22.519

2005

2

18.656

-56.233

2005

3

29.594

10.938

2005

4

50.717

21.123

2006

1

19.307

19.307

2006

2

72.25

21.533

2006

3

104.285

32.035

2006

4

143.792

39.507

程序如下:
data tt4 (keep=code year qtr cfy mm );
set aa;
by code year qtr;
if first.year then mm=cfy;
else mm=cfy-lag(cfy);
run;


可以看到,第一、三、四季度的数据都没问题,可是不知道为什么第二季度的值,不是按照cfy-lag(cfy)计算,而减的是上一年度最后一个季度的值。请问我的程序是哪里错了,为什么会这样啊???谢谢~~~~
二维码

扫码加我 拉你入群

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

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

全部回复
2013-5-29 11:45:52
因为这里的条件关系,所以在else mm=cfy-lag(cfy)中,lag返回的是上一组的最后一条记录,你得先取个新变量,然后再进行计算。。。
data tt4 (keep=code year qtr cfy mm );
set aa;
by code year qtr;
lag_cfy=lag(cfy);
if first.year then mm=cfy;
else mm=cfy-lag_cfy;/*改成mm=sum(cfy,-lag_cfy)会好些,要不然会有缺失值*/
run;
二维码

扫码加我 拉你入群

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

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

2013-5-29 12:01:47
mm=cfy-lag(cfy);
if first.year then mm=cfy;
这样试试
二维码

扫码加我 拉你入群

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

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

2013-5-29 13:07:36
boe 发表于 2013-5-29 12:01
mm=cfy-lag(cfy);
if first.year then mm=cfy;
这样试试
这样还是有点小问题,不过借鉴这个思路很容易就解决我想解决的问题了,谢谢。
二维码

扫码加我 拉你入群

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

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

2013-5-29 13:11:16
可~乐 发表于 2013-5-29 11:45
因为这里的条件关系,所以在else mm=cfy-lag(cfy)中,lag返回的是上一组的最后一条记录,你得先取个新变量, ...
谢谢。个人认为SAS的lag存储是一个很神奇的东西,我一直以为它是一开始就“定”死的,因为我曾经碰到这个问题https://bbs.pinggu.org/thread-2421598-1-1.html。可以麻烦你帮忙看下吗?
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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