楼主: tj0412ymy
1110 5

[问答] SQL问题讨论 [推广有奖]

  • 2关注
  • 48粉丝

已卖:4314份资源

副教授

65%

还不是VIP/贵宾

-

威望
0
论坛币
11512 个
通用积分
12.7575
学术水平
72 点
热心指数
91 点
信用等级
64 点
经验
29292 点
帖子
545
精华
0
在线时间
1203 小时
注册时间
2009-3-10
最后登录
2024-2-15

楼主
tj0412ymy 发表于 2012-1-10 17:30:06 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

month_id

user_id

x

y

11

1

1

11

10

1

3

13

9

1

5

15

11

2

2

12

10

2

4

14

9

2

6

16

11

3

0

0

10

3

0

0

9

3

0

0

以上数据结构,use_id唯一确定一个人,month_id是月份,现在要算每个ID11月份的x+y的和除以(x+y)的三个月的均值,如果x+y=0,最后也是0

最后要求的结果如下:如何用SQL语句实现?

use_id

z

1

0.75

2

0.777778

3

0

二维码

扫码加我 拉你入群

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

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

关键词:sql month sql语句 mont 数据结构 如何

对SAS和统计方面感兴趣的朋友,请加SAS学习和认证讨论群:169157207。欢迎在群上讨论!

沙发
tj0412ymy 发表于 2012-1-10 17:30:45
  1. data  test;
  2. input month_id         user_id        x        y;
  3. cards;
  4. 11         1        1        11
  5. 10 1        3        13
  6. 9         1        5        15
  7. 11         2        2        12
  8. 10         2        4        14
  9. 9         2        6        16
  10. 11         3        0        0
  11. 10         3        0        0
  12. 9         3        0        0
  13. ;
  14. run;

  15. proc sql;
  16. select a.user_id, case when(b.mean=0) then 0 else (a.x+a.y)/b.mean end as z
  17. from test as a, (select user_id, mean(x+y) as mean from test group by user_id) as b
  18. where a.month_id=11 and a.user_id=b.user_id
  19. ;
  20. quit;
复制代码
对SAS和统计方面感兴趣的朋友,请加SAS学习和认证讨论群:169157207。欢迎在群上讨论!

藤椅
tj0412ymy 发表于 2012-1-10 17:31:06
  1. proc sql;
  2. select user_id, case when(month_id=11 and mean(x+y)>0) then (x+y)/mean(x+y)  else 0 end as z
  3. from test
  4. group by user_id
  5. having month_id=11
  6. ;
  7. quit;
复制代码
对SAS和统计方面感兴趣的朋友,请加SAS学习和认证讨论群:169157207。欢迎在群上讨论!

板凳
tj0412ymy 发表于 2012-1-10 17:32:02
先给出两种解决方法,欢迎讨论和赐教!
对SAS和统计方面感兴趣的朋友,请加SAS学习和认证讨论群:169157207。欢迎在群上讨论!

报纸
tj0412ymy 发表于 2012-1-10 18:10:22
  1. proc sql;
  2. select
  3. user_id,
  4. max(case when month_id=11 then x+y else 0 end )/(case when sum(x+y)=0 then 1 else sum(x+y)/3 end) as z
  5. from test
  6. group by user_id
  7. ;
  8. quit;
复制代码
对SAS和统计方面感兴趣的朋友,请加SAS学习和认证讨论群:169157207。欢迎在群上讨论!

地板
shenliang_111 发表于 2012-1-11 10:41:15
  1. /*顺便给出datastep的方法*/
  2. data result(keep=user_id z);
  3.     sum=0;
  4.     do _n_=1 by 1 until(last.user_id);
  5.        set  test;
  6.            by user_id;
  7.            sum=sum+(x+y);
  8.         end;
  9.         mean_x_y=sum/_n_;
  10.         do _n_=1 to _n_;
  11.            set test;
  12.          if month_id=11 then do;
  13.              if x+y=0 then z=0;
  14.          else z=(x+y)/mean_x_y;
  15.                  output;
  16.           end;
  17.         end;
  18. run;
  19. /*sql*/
  20. proc sql;
  21. create table result2 as
  22. select distinct user_id,case when(mean_x_y eq 0) then 0 else (x+y)/mean_x_y end as z
  23. from
  24. (select *,mean(x+y) as mean_x_y from test
  25. group by user_id) a
  26. where month_id=11;
  27. quit;
复制代码

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-28 19:54