楼主: tanshiyu
1877 8

请教个SAS编程问题 [推广有奖]

  • 0关注
  • 0粉丝

高中生

65%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
124 点
帖子
13
精华
0
在线时间
43 小时
注册时间
2012-11-24
最后登录
2015-4-23

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
大家好!请教个问题:知道若干支股票在近几年的营业额,想求这几支股票的营业额在这几年的平均增长率,具体地有下面的数据,程序该怎么写呢?
Stkcd        发布日期     营业额
0020472005-06-30

6.46E+08

0020472004-12-31

1.29E+09

0020472003-12-31

8.96E+08

0020472002-12-31

8.85E+08

0020482004-12-31

2.65E+08

0020482003-12-31

2.33E+08

0020482002-12-31

1.5E+08

0020492004-12-31

1.39E+08

0020492003-12-31

1.2E+08

0020492002-12-31

98444650

0020502005-06-30

3.02E+08

0020502004-12-31

3.64E+08

0020502003-12-31

2.13E+08

0020502002-12-31

1.34E+08

6000002005-09-30

1.57E+10

6000002004-12-31

1.68E+10

6000002003-12-31

1.2E+10

6000002002-12-31

8.16E+09

6000012005-09-30

1.57E+10

6000012004-12-31

1.95E+10

6000012003-12-31

1.27E+10

6000012002-12-31

7.88E+09

6000032006-09-30

5.31E+08

6000032005-12-31

6.26E+08

6000032004-12-31

5.77E+08

6000032003-12-31

5.58E+08

6000042004-12-31

1.54E+09

6000042003-12-31

1.06E+09

6000042002-12-31

9.4E+08

6000052005-06-30

2.15E+10

6000052004-12-31

2.41E+10

6000052003-12-31

6.81E+09

6000052002-12-31

6.76E+09

6000062006-06-30

4.89E+09

6000062005-12-31

8.8E+09

6000062004-12-31

6.1E+09

6000062003-12-31

5.85E+09

6000072005-09-30

5.75E+08

6000072004-12-31

7.11E+08

6000072003-12-31

6.47E+08

6000072002-12-31

6.52E+08

6000082005-09-30

3.45E+08

6000082004-12-31

3.13E+08

6000082003-12-31

2.34E+08

6000082002-12-31

2.03E+08

6000092005-09-30

1.95E+09

6000092004-12-31

2.35E+09

6000092003-12-31

1.78E+09

6000092002-12-31

1.7E+09

6000102005-09-30

1.45E+10

6000102004-12-31

1.62E+10

6000102003-12-31

1.07E+10

6000102002-12-31

6.4E+09

6000112005-09-30

2.91E+10

6000112004-12-31

3.03E+10

6000112003-12-31

2.35E+10

6000112002-12-31

1.87E+10

6000122005-09-30

1.14E+09

6000122004-12-31

1.24E+09

6000122003-12-31

8.97E+08

6000122002-12-31

7.52E+08



二维码

扫码加我 拉你入群

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

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

关键词:sas编程问题 SAS编程 stkcd 营业额 近几年 002047 002050 营业额 增长率

沙发
chenys625 发表于 2013-2-16 09:43:58 |只看作者 |坛友微信交流群
Using LAG Function will solve your problem.

使用道具

藤椅
tanshiyu 发表于 2013-2-16 10:09:29 |只看作者 |坛友微信交流群
chenys625 发表于 2013-2-16 09:43
Using LAG Function will solve your problem.
谢谢,能不能说详细些,刚刚接触sas很多东西都不懂。

使用道具

板凳
a6566792 在职认证  发表于 2013-2-16 11:14:48 |只看作者 |坛友微信交流群
tanshiyu 发表于 2013-2-16 10:09
谢谢,能不能说详细些,刚刚接触sas很多东西都不懂。
lag ()你可以看SAS字典,提取上一观测值为你所用。另外dif()或许也能帮到你

使用道具

报纸
chenys625 发表于 2013-2-16 11:17:16 |只看作者 |坛友微信交流群
a6566792 发表于 2013-2-16 11:14
lag ()你可以看SAS字典,提取上一观测值为你所用。另外dif()或许也能帮到你
dif()/lag(); 应该就是你想要的了

使用道具

地板
yongyitian 发表于 2013-2-17 01:38:43 |只看作者 |坛友微信交流群
是不是这样
data test;
input Stkcd  $ date  $10.  value;
year = substr(date,1,4);
datalines;
002047 2005-06-30 6.46E+08
002047 2004-12-31 1.29E+09
002047 2003-12-31 8.96E+08
002047 2002-12-31 8.85E+08
002048 2004-12-31 2.65E+08
002048 2003-12-31 2.33E+08
002048 2002-12-31 1.5E+08
002049 2004-12-31 1.39E+08
002049 2003-12-31 1.2E+08
002049 2002-12-31 98444650
002050 2005-06-30 3.02E+08
002050 2004-12-31 3.64E+08
002050 2003-12-31 2.13E+08
002050 2002-12-31 1.34E+08
600000 2005-09-30 1.57E+10
600000 2004-12-31 1.68E+10
600000 2003-12-31 1.2E+10
600000 2002-12-31 8.16E+09
600001 2005-09-30 1.57E+10
600001 2004-12-31 1.95E+10
600001 2003-12-31 1.27E+10
600001 2002-12-31 7.88E+09
600003 2006-09-30 5.31E+08
600003 2005-12-31 6.26E+08
600003 2004-12-31 5.77E+08
600003 2003-12-31 5.58E+08
600004 2004-12-31 1.54E+09
600004 2003-12-31 1.06E+09
600004 2002-12-31 9.4E+08
600005 2005-06-30 2.15E+10
600005 2004-12-31 2.41E+10
600005 2003-12-31 6.81E+09
600005 2002-12-31 6.76E+09
600006 2006-06-30 4.89E+09
600006 2005-12-31 8.8E+09
600006 2004-12-31 6.1E+09
600006 2003-12-31 5.85E+09
600007 2005-09-30 5.75E+08
600007 2004-12-31 7.11E+08
600007 2003-12-31 6.47E+08
600007 2002-12-31 6.52E+08
600008 2005-09-30 3.45E+08
600008 2004-12-31 3.13E+08
600008 2003-12-31 2.34E+08
600008 2002-12-31 2.03E+08
600009 2005-09-30 1.95E+09
600009 2004-12-31 2.35E+09
600009 2003-12-31 1.78E+09
600009 2002-12-31 1.7E+09
600010 2005-09-30 1.45E+10
600010 2004-12-31 1.62E+10
600010 2003-12-31 1.07E+10
600010 2002-12-31 6.4E+09
600011 2005-09-30 2.91E+10
600011 2004-12-31 3.03E+10
600011 2003-12-31 2.35E+10
600011 2002-12-31 1.87E+10
600012 2005-09-30 1.14E+09
600012 2004-12-31 1.24E+09
600012 2003-12-31 8.97E+08
600012 2002-12-31 7.52E+08
;

proc sort data=test out=testSort;
   by stkcd year;
run;

data test_1;
    set testsort;
    if first.stkcd then year_rate = 0;
        else year_rate = (value - lag(value))/lag(value);
        by stkcd;
run;

proc sql;
    select stkcd, sum(year_rate)/(count(stkcd)-1) as avgl_rate
        from test_1
        group by stkcd;
quit;

使用道具

7
tanshiyu 发表于 2013-2-17 16:37:06 |只看作者 |坛友微信交流群
yongyitian 发表于 2013-2-17 01:38
是不是这样
data test;
input Stkcd  $ date  $10.  value;
谢谢你,学习了,基本思路是对的,不过lag函数直接放在if语句中会出问题,会导致每个stkcd前两个值都是缺失值,我查了下资料http://r97846001.blog.ntu.edu.tw/2011/06/18/saslag/comment-page-1
最后我写的代码是这样的:

data sales;
set sales;
   by Stkcd date;
   lag_sales=lag(G02030);
   dif_sales=dif(G02030);
if first.Stkcd then do;
          lag_sales=.  ;
         dif_sales=.  ;
     end;
     growth=dif_sales/lag_sales;
run;


data sales;
set sales;
if         growth='.' then delete;
run;

proc means data=sales;
by         Stkcd;
output out=Avegrowth mean(growth)=salesgrowth;
proc print data=Avegrowth;
run;

使用道具

8
tanshiyu 发表于 2013-2-17 16:38:17 |只看作者 |坛友微信交流群
chenys625 发表于 2013-2-16 11:17
dif()/lag(); 应该就是你想要的了
谢谢提示

使用道具

9
tanshiyu 发表于 2013-2-17 16:38:40 |只看作者 |坛友微信交流群
a6566792 发表于 2013-2-16 11:14
lag ()你可以看SAS字典,提取上一观测值为你所用。另外dif()或许也能帮到你
谢谢,学习了

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 12:31