楼主: 子墨13
3089 4

分组减法运算 [推广有奖]

  • 3关注
  • 5粉丝

已卖:1份资源

讲师

54%

还不是VIP/贵宾

-

威望
0
论坛币
224 个
通用积分
3.0011
学术水平
6 点
热心指数
12 点
信用等级
5 点
经验
5058 点
帖子
426
精华
0
在线时间
352 小时
注册时间
2010-7-25
最后登录
2022-2-16

楼主
子墨13 在职认证  发表于 2013-5-29 11:28:44 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
各位前辈:我需要将每个公司每个年份每个季度的“纯”季度现金流计算出来,但已有数据是该年累计数,所以需要分年份相减,数据截取如下:(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)计算,而减的是上一年度最后一个季度的值。请问我的程序是哪里错了,为什么会这样啊???谢谢~~~~
二维码

扫码加我 拉你入群

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

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

关键词:First year code Data Then 现金流

回帖推荐

可~乐 发表于2楼  查看完整内容

因为这里的条件关系,所以在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;

boe 发表于3楼  查看完整内容

mm=cfy-lag(cfy); if first.year then mm=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;
已有 1 人评分学术水平 收起 理由
子墨13 + 1 受益匪浅,谢谢

总评分: 学术水平 + 1   查看全部评分

藤椅
boe 发表于 2013-5-29 12:01:47
mm=cfy-lag(cfy);
if first.year then mm=cfy;
这样试试
Gorgeous girl , I love !

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

报纸
子墨13 在职认证  发表于 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。可以麻烦你帮忙看下吗?

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 10:37