全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3417 14
2012-06-08

各位大侠,现在我在分析一个股市投资者们各年段的投资行为变化,现想将2001年,2002年等 分年段来求出数据。

数据如下:

Date

PBuy

PSell

PNB

Pa

Pb

2001-01-02

1,413,583

1,427,008

-13,425

2,840,591

-0.005

2001-01-03

647,496

740,288

-92,792

1,387,784

-0.067

2001-01-04

1,407,986

1,508,079

-100,093

2,916,065

-0.034

…………

2001-02-09

233,297

336,308

-103,011

569,605

-0.181

2001-02-12

193,783

212,671

-18,888

406,454

-0.046

2001-02-13

164,105

212,513

-48,408

376,618

-0.129

2001-02-14

614,109

684,209

-70,100

1,298,318

-0.054


.....

下略。

我想新建一个变量,然后算出2001-01-02至2001年12月31日之间的PB变量平均值,但是欲把这个平均值放置在PB这行变量的旁边。

想要的结果是这样的。

2001-01-02

1,413,583

1,427,008

-13,425

2,840,591

-0.005

-0.098

2001-01-03

647,496

740,288

-92,792

1,387,784

-0.067

-0.098

2001-01-04

1,407,986

1,508,079

-100,093

2,916,065

-0.034

-0.098

2001-01-05

1,794,895

1,999,919

-205,024

3,794,814

-0.054

-0.098

…….

2001-02-05

360,575

310,955

49,620

671,530

0.074

-0.098

2001-02-06

157,158

182,191

-25,033

339,349

-0.074

-0.098

2001-02-07

225,344

241,530

-16,186

466,874

-0.035

-0.098

2001-02-08

208,356

296,013

-87,657

504,369

-0.174

-0.098


因为我之后还要筛选出前面的日期,所以想达到后面的效果,之后是2002年,2003年。。。。

请教高手,上面的结果要怎样编程呢,万分感谢。


二维码

扫码加我 拉你入群

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

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

全部回复
2012-6-8 16:39:04
请大侠们帮忙啊
二维码

扫码加我 拉你入群

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

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

2012-6-8 17:17:14
看看这行不,假定2001年是前3条记录,2002年是后面四条记录
data a;
  input date :yymmdd10. PBuy PSell PNB Pa Pb 15.5;
  format date yymmdd10.;
  datalines;

2001-01-02 1413583 1427008 -13425 2840591  -0.005
2001-01-03 647496 740288 -92792 1387784 -0.067
2001-01-04 1407986 1508079 -100093 2916065 -0.034
2002-02-09 233297 336308 -103011 569605 -0.181
2002-02-12 193783 212671 -18888 406454  -0.046
2002-02-13 164105 212513 -48408 376618 -0.129
2002-02-14 614109 684209 -70100 1298318 -0.054
;
run;

proc sql noprint;
  create table a3(drop=year) as
    select a.*
           ,year(a.date) as year
           ,mean(pb) as pb_mean
           from a
            group by year ;
quit;
二维码

扫码加我 拉你入群

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

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

2012-6-8 17:18:38
应该没办法一步做到吧?
先求每个年份的平均数,再匹配合并数据集。
菜鸟抛砖:

data table1;
set table;
year=year(date);
proc summary data=table1 nway;
var pb;
class year;
ouput out=table2 mean=meanpb;
data outtable;
drop rc year;
set table1;
if _n_=1 then do;
declare hash h(dataset:'table2');
h.defindkey('year');
h.definedone();
end;
rc=h.find(key:year);
if rc=0 then meanpb=meanpb;
run;
二维码

扫码加我 拉你入群

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

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

2012-6-8 17:25:43
楼上的SQL应该会出错吧
select a1.*,b.meanpb from a1
left join
(select year,mean(pb) as meanpb from a1 group by year) as b
on a1.year=b.year;

二维码

扫码加我 拉你入群

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

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

2012-6-8 17:42:20
蓝莓夹心 发表于 2012-6-8 17:25
楼上的SQL应该会出错吧
select a1.*,b.meanpb from a1
left join
应该不会吧,我那样也可以。跑过没问题啊。
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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