楼主: 2008310148
4766 8

[求助]如何实现分组求和 [推广有奖]

  • 0关注
  • 0粉丝

春香毒

大专生

30%

还不是VIP/贵宾

-

威望
0
论坛币
32 个
通用积分
0.0003
学术水平
0 点
热心指数
2 点
信用等级
0 点
经验
394 点
帖子
68
精华
0
在线时间
5 小时
注册时间
2009-2-27
最后登录
2012-3-7

楼主
2008310148 发表于 2009-4-1 09:56:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

各位高手:

       我有如下数据,想实现分时间组对p求和,该怎么办呢?

  code         time          p              

002001  20050602    3               

002003  20050602    4               

002005  20050603    2

002006  20050603    1

002001  20050603     6

...              ...                ...

想实现的结果如下:

code         time          p         c

002001  20050602    3        3/7

002003  20050602    4        4/7  

002006  20050603    2        2/9

002005  20050603    1        1/9

002001  20050603     6       6/9

...              ...                ...

以上数据的排列没有什么规律,已经保存在数据集中。

然后还希望将这个数据读入矩阵中,第一列为时间,第一行为代码。

                  002001   002003     002005    002006

20050602     3/7          4/7           .                  .

20050603     6/9            .               1/9            2/9

请各位高人不吝赐教,多谢!  

刚才一不小心发错版面了,真晕
二维码

扫码加我 拉你入群

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

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

关键词:如何实现 time code 一不小心 数据读入 分组 求和

回帖推荐

olover 发表于8楼  查看完整内容

data test;input code $ time P;cards;002001  20050602    3002003  20050602    4002005  20050603    2002006  20050603    1002001  20050603    6;run;proc sql; create table new as select a.*, a.p/b.sum as c from test as a left join  (select time, sum(p) as sum from test group by time) as ...

本帖被以下文库推荐

沙发
清风习习 发表于 2009-4-1 10:02:00

用 proc summary

sasbase里有说明

藤椅
2008310148 发表于 2009-4-1 11:49:00
谢谢清风习习,但是proc summary做不到我要的分组求和,是我用的有问题么?

板凳
2008310148 发表于 2009-4-1 11:53:00

这是我用的代码

proc summary data=zhu5 sum;
  var si_pi;
  class time;
  output;
run;

出来的结果:

 

报纸
2008310148 发表于 2009-4-1 12:11:00

因为不会上传图片,所以无法显示

总之就是 对每组数据分别计算了频数,最小值,最大值,均值和标准差

地板
清风习习 发表于 2009-4-1 13:34:00

proc summary data=zhu5 ;

  output out=数据集名字 sum=;
只有上面的两个语句不一样

7
2008310148 发表于 2009-4-1 16:26:00

呵呵,谢啦!试验成功。我今天下午自己想了一个笨办法,跟大家分享一下

data zhu5;
  set hk5.zhu4;/*原数据集名*/
    by time;
    retain p1 0;
      p1=p1+p;
      if first.time then p1=0+p;
 if last.time=1 then com=p1

 if com^=. then output;;/*输出最后一个time的和值*/

 drop code ;
 run;

但是为什么没有人理我关于下半部分的问题,矩阵的导入?

8
olover 发表于 2009-4-2 06:18:00

data test;
input code $ time P;
cards;

002001  20050602    3
002003  20050602    4
002005  20050603    2
002006  20050603    1
002001  20050603    6
;
run;

proc sql;
 create table new as select a.*, a.p/b.sum as c from test as a left join
  (select time, sum(p) as sum from test group by time) as b on a.time = b.time;
quit;


proc sort data = new;
 by time;
run;

proc transpose data = new out = new1(drop = _name_);
 by time;
 var c;
 id code;
run;

[此贴子已经被作者于2009-4-2 6:26:04编辑过]

已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

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

9
爱萌 发表于 2009-4-2 12:48:00
以下是引用olover在2009-4-2 6:18:00的发言:

data test;
input code $ time P;
cards;

002001  20050602    3
002003  20050602    4
002005  20050603    2
002006  20050603    1
002001  20050603    6
;
run;

proc sql;
 create table new as select a.*, a.p/b.sum as c from test as a left join
  (select time, sum(p) as sum from test group by time) as b on a.time = b.time;
quit;


proc sort data = new;
 by time;
run;

proc transpose data = new out = new1(drop = _name_);
 by time;
 var c;
 id code;
run;

高明,有智慧,这是高手一个,谢谢!我学习了!

最恨对我说谎或欺骗我的人

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

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