SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 680|回复: 5
打印 上一主题 下一主题

继续求助,关于同一数据集中求同比问题

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2010-8-31 14:31:51 | 只看该作者

继续求助,关于同一数据集中求同比问题

请教一个问题,有一个较大的数据集,如:
地名     年份   生产方式代码  美元值
北京     2006     1             5000
北京     2006     2                       3456
北京     2006     3                       1234
北京     2006     4                       2122
北京     2007      1                      4445
北京     2007      3                      4445
北京     2007      6                      4445
北京     2007      7                      4445
如上的这个数据集,求它同种生产方式下增长比率,对于之前一年没有的生产方式那么增长率为0,实在有点不知道如何下手,请高手指点
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2010-8-31 14:55:15 | 只看该作者

Re: 继续求助,关于同一数据集中求同比问题

data one;
  input area $ year type cost;
  cards;
bj 2006 1 5000
bj 2006 2 3456
bj 2006 3 1234
bj 2006 4 2122
bj 2007 1 4445
bj 2007 3 4445
bj 2007 6 4445
bj 2007 7 4445
;
run;

proc sort;by area type year;run;

data two;
set one;
by area type year;
lastcost=lag1(cost);
if first.type then pct=.;
else pct=put(((cost-lastcost)/lastcost)*100,5.1);
run;

不知道是不是你想要的。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2010-8-31 15:19:52 | 只看该作者

Re: 继续求助,关于同一数据集中求同比问题

用retain 再给你弄下,可能效果更好些。
data one;
  input area $ year type cost;
  cards;
bj 2006 1 5000
bj 2006 2 3456
bj 2006 3 1234
bj 2006 4 2122
bj 2007 1 4445
bj 2007 3 4445
bj 2007 6 4445
bj 2007 7 4445
;
run;

proc sort;by area type year;run;

data three;
set one;
by area type year;
retain lastcost;
if first.type then do;lastcost=cost;pct=0;end;
else do;pct=(cost-lastcost)/lastcost;lastcost=cost;end;
drop lastcost;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2010-8-31 16:05:42 | 只看该作者

Re: 继续求助,关于同一数据集中求同比问题

能不能解释一下上边语句的含义呢,就是if 后面的,有点不大明白。我的意思就是比如北京2006年生产方式2下的的同比就是2005年生产方式2下的美元与2006年生产方式2下的美元比较,但是要用语句去判断地点相同,年份加上1,生产方式相同,就是这个判断不会
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2010-8-31 16:21:27 | 只看该作者

Re: 继续求助,关于同一数据集中求同比问题

data one;
input area $ year type cost;
cards;
bj 2006 1 5000
bj 2006 2 3456
bj 2006 3 1234
bj 2006 4 2122
bj 2007 1 4445
bj 2007 3 4445
bj 2007 6 4445
bj 2007 7 4445
;
run;

proc sort;by area type year;run;

data three;
set one;
by area type year;
retain lastcost;
if first.type then do;lastcost=cost;pct=0;end;/**同一个地区,一个生产方式如果第一次开始使用,增长率设为0 **/
else do;pct=(cost-lastcost)/lastcost;lastcost=cost;end;/**同一个地区,一个生产方式如果之前使用过,增长率=(该年的美元值-上一年的美元值)/上一年的美元值 **/
drop lastcost;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2010-8-31 16:29:52 | 只看该作者

Re: 继续求助,关于同一数据集中求同比问题

我试一下,谢谢了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-3 23:49 , Processed in 0.098311 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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