SAS中文论坛

标题: 继续求助,关于同一数据集中求同比问题 [打印本页]

作者: shiyiming    时间: 2010-8-31 14:31
标题: 继续求助,关于同一数据集中求同比问题
请教一个问题,有一个较大的数据集,如:
地名     年份   生产方式代码  美元值
北京     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,实在有点不知道如何下手,请高手指点
作者: shiyiming    时间: 2010-8-31 14:55
标题: 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;

不知道是不是你想要的。
作者: shiyiming    时间: 2010-8-31 15:19
标题: 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;
作者: shiyiming    时间: 2010-8-31 16:05
标题: Re: 继续求助,关于同一数据集中求同比问题
能不能解释一下上边语句的含义呢,就是if 后面的,有点不大明白。我的意思就是比如北京2006年生产方式2下的的同比就是2005年生产方式2下的美元与2006年生产方式2下的美元比较,但是要用语句去判断地点相同,年份加上1,生产方式相同,就是这个判断不会
作者: shiyiming    时间: 2010-8-31 16:21
标题: 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;
作者: shiyiming    时间: 2010-8-31 16:29
标题: Re: 继续求助,关于同一数据集中求同比问题
我试一下,谢谢了




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2