楼主: muyexi
8475 18

[原创博文] 求助!!对不同列分类求和。。。 [推广有奖]

  • 0关注
  • 0粉丝

小学生

0%

还不是VIP/贵宾

-

威望
0
论坛币
31 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
61 点
帖子
10
精华
0
在线时间
39 小时
注册时间
2009-10-21
最后登录
2010-5-17

楼主
muyexi 发表于 2010-3-3 17:52:28 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
若数据如下,怎样根据不同的日期和型号把数量加起来输出呢?

交易号          日期              时间          型号       数量
RX000152   03/11/2009  11:27:53  AP3965    5
RX000170   04/11/2009  05:55:50  AT3600    6
RX000189   06/11/2009   09:07:45  AT3600   3
RX000179   03/11/2009  12:32:28  AP3965    5
RX000141   01/11/2009  08:49:26  AT3600    2
RX000149   02/11/2009  11:54:23  AP3965    1
RX000215   04/11/2009  14:09:49  AP3965    1
RX000230   09/11/2009   19:28:32  AP3965   2


我最后想得到的是这样的
                                             

        日期             AP3965的数量      AT3600 的数量  
   01/11/2009               0                      2
   02/11/2009              1                                  0
   03/11/2009             10                        0
   04/11/2009              1                         6
  06/11/2009                0                        3



已经想了3天啦做不出来,请教各位啦!!!

二维码

扫码加我 拉你入群

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

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

关键词:型号

回帖推荐

sdu0632 发表于7楼  查看完整内容

Proc means data test; input code $ date $ time $ type $ number; datalines; RX000152 03/11/2009 11:27:53 AP3965 5 RX000170 04/11/2009 05:55:50 AT3600 6 RX000189 06/11/2009 09:07:45 AT3600 3 RX000179 03/11/2009 12:32:28 AP3965 5 RX000141 01/11/2009 08:49:26 AT3600 2 RX000149 02/11/2009 11:54:23 AP3965 1 RX000215 04/11/2009 14:09:49 AP3965 ...

funnyxuke 发表于6楼  查看完整内容

data test; input code $ date $ time $ type $ number; datalines; RX000152 03/11/2009 11:27:53 AP3965 5 RX000170 04/11/2009 05:55:50 AT3600 6 RX000189 06/11/2009 09:07:45 AT3600 3 RX000179 03/11/2009 12:32:28 AP3965 5 RX000141 01/11/2009 08:49:26 AT3600 2 RX000149 02/11/2009 11:54:23 AP3965 1 RX000215 04/11/2009 14:09:49 AP3965 1 RX000230 ...

soporaeternus 发表于10楼  查看完整内容

...感觉这个办法真的很傻......

本帖被以下文库推荐

沙发
zhaozyuan 发表于 2010-3-3 18:09:18
用SQL语句,交叉查询

藤椅
muyexi 发表于 2010-3-3 18:11:52
2# zhaozyuan

能不能再多告诉我点。。sql 从来没用过,我是sas菜鸟

板凳
naver 发表于 2010-3-3 18:13:07
你用什么软件做?

报纸
muyexi 发表于 2010-3-3 21:11:17
4# naver

SAS的9.1版做的啊

地板
funnyxuke 发表于 2010-3-3 21:45:44
data test;
input code $ date $ time $ type $ number;
datalines;
RX000152   03/11/2009  11:27:53  AP3965    5
RX000170   04/11/2009  05:55:50  AT3600    6
RX000189   06/11/2009   09:07:45  AT3600   3
RX000179   03/11/2009  12:32:28  AP3965    5
RX000141   01/11/2009  08:49:26  AT3600    2
RX000149   02/11/2009  11:54:23  AP3965    1
RX000215   04/11/2009  14:09:49  AP3965    1
RX000230   09/11/2009   19:28:32  AP3965   2
;
run;

proc sql;
create table test1 as
select code, date, type, sum(number) as sum
from test
group by code, date, type
order by code, date, type;
quit;

proc transpose data=test1 out=test2;
by code date;
var sum;
id type;
run;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

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

7
sdu0632 发表于 2010-3-4 06:19:41
Proc means

data test;
input code $ date $ time $ type $ number;
datalines;
RX000152   03/11/2009  11:27:53  AP3965    5
RX000170   04/11/2009  05:55:50  AT3600    6
RX000189   06/11/2009   09:07:45  AT3600   3
RX000179   03/11/2009  12:32:28  AP3965    5
RX000141   01/11/2009  08:49:26  AT3600    2
RX000149   02/11/2009  11:54:23  AP3965    1
RX000215   04/11/2009  14:09:49  AP3965    1
RX000230   09/11/2009   19:28:32  AP3965   2
;
run;

proc means data=test; class date type; var number; output out=test1
sum(number)=num_sum; ways 2; run;

proc transpose data=test1 out=test2;
by date;
var num_sum;
id type;
run;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

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

8
soporaeternus 发表于 2010-3-4 09:06:45
单纯SQL也能做,但是变量名不如transpose控制的这样好......
Let them be hard, but never unjust

9
sdu0632 发表于 2010-3-4 09:09:33
楼上写下code, 让我们学习下啊。

10
soporaeternus 发表于 2010-3-4 10:14:13
  1. data test;
  2. input code $ date:mmddyy10. time:time8. type $ number;
  3. format date yymmdd10. time time8.;
  4. datalines;
  5. RX000152 03/11/2009 11:27:53  AP3965    5
  6. RX000170 04/11/2009 05:55:50  AT3600    6
  7. RX000189 06/11/2009 09:07:45  AT3600   3
  8. RX000179 03/11/2009 12:32:28  AP3965    5
  9. RX000141 01/11/2009 08:49:26  AT3600    2
  10. RX000149 02/11/2009 11:54:23  AP3965    1
  11. RX000215 04/11/2009 14:09:49  AP3965    1
  12. RX000230 09/11/2009 19:28:32  AP3965   2
  13. ;
  14. run;

  15. proc sql;
  16.         select distinct type into:Typ_Lst separated by '|' from test;
  17. quit;
  18. %let Typ_Cnt=%eval(%sysfunc(count(&Typ_Lst,|))+1);
  19. %put &Typ_Lst &Typ_Cnt;

  20. %MACRO T;
  21.         proc sql;
  22.                 create table Rst as
  23.                         select
  24.                                         date
  25.                                         %do i=1 %to &Typ_Cnt %by 1;
  26.                                                 ,sum(case when compress(type)="%scan(&Typ_Lst,&i,|)" then number else 0 end )
  27.                                                         as %scan(&Typ_Lst,&i,|)_Cnt label="%scan(&Typ_Lst,&i,|)的数量"
  28.                                         %end;
  29.                         from        test
  30.                         group by date
  31.                         order by date
  32.                 ;
  33.         quit;       
  34. %MEND T;
  35. %T;
复制代码
...感觉这个办法真的很傻......
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

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

Let them be hard, but never unjust

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

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