楼主: lidong6
3416 14

大侠们,请求帮助-SAS中有关各年份之间求平均值的问题。 [推广有奖]

  • 0关注
  • 0粉丝

已卖:145份资源

大专生

46%

还不是VIP/贵宾

-

威望
0
论坛币
14 个
通用积分
0
学术水平
1 点
热心指数
1 点
信用等级
0 点
经验
798 点
帖子
28
精华
0
在线时间
49 小时
注册时间
2010-8-27
最后登录
2017-8-12

楼主
lidong6 发表于 2012-6-8 16:38:22 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

各位大侠,现在我在分析一个股市投资者们各年段的投资行为变化,现想将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年。。。。

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


二维码

扫码加我 拉你入群

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

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

关键词:请求帮助 求平均 求帮助 平均值 date

回帖推荐

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

看看这行不,假定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 ...

本帖被以下文库推荐

沙发
lidong6 发表于 2012-6-8 16:39:04
请大侠们帮忙啊

藤椅
sinksought 发表于 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;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

板凳
蓝莓夹心 发表于 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;

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

7
wenzi12345 在职认证  发表于 2012-6-8 17:49:34
option compress=yes mprint;
data initial;
informat date yymmdd10. pbuy  PSell  PNB  Pa  Pb best32.;
input Date  PBuy  PSell  PNB  Pa  Pb;
format date yymmdd10.;
cards;
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  .
2001-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;
    create table c(drop=year) as
    select *,year(date) as Year, avg(pb) as Pb_Avg format=18.4
    from initial
    group by calculated year;
quit:

8
wenzi12345 在职认证  发表于 2012-6-8 17:51:25
wenzi12345 发表于 2012-6-8 17:49
option compress=yes mprint;
data initial;
informat date yymmdd10. pbuy  PSell  PNB  Pa  Pb best32. ...
我这段代码肯定没有问题

9
蓝莓夹心 发表于 2012-6-8 18:06:55
wenzi12345 发表于 2012-6-8 17:51
我这段代码肯定没有问题
额,我没用过calculate 这个关键词,不过问题不是这个上面。

如果一个表有列,a,b,c,d,e,f
group by  a,b ,c ,那么,只能select  a, b, c,各种统计函数如count()sum()之类。出现d,e,f是不合逻辑的

10
wenzi12345 在职认证  发表于 2012-6-8 18:09:36
蓝莓夹心 发表于 2012-6-8 18:06
额,我没用过calculate 这个关键词,不过问题不是这个上面。

如果一个表有列,a,b,c,d,e,f
i don't know what are speeking, why not reasonal?

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

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