楼主: greeceya
3095 7

如何计算分组占总体的比重? [推广有奖]

  • 0关注
  • 0粉丝

初中生

19%

还不是VIP/贵宾

-

威望
0
论坛币
4 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
95 点
帖子
9
精华
0
在线时间
7 小时
注册时间
2014-1-13
最后登录
2019-12-13

楼主
greeceya 发表于 2014-1-15 17:27:02 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
数据集:

年龄   性别   体重   分数
21      女      50      90
21      女      48      92
23      女      46      88
27      男      60      89
24      男      62      96
19      女      52      66
28      女      67      86
31      男      65      92
33      女      57      79
35      男      57      83
26      女      63      78
25      男      59      90
26      女      66      95

目标:
求出
15-20岁   男   总分数占全体总分数之比
15-20岁   女   总分数占全体总分数之比
21-25岁   男   总分数占全体总分数之比
21-25岁   女   总分数占全体总分数之比
26-30岁   男   总分数占全体总分数之比
26-30岁   女   总分数占全体总分数之比
31-35岁   男   总分数占全体总分数之比
31-35岁   女   总分数占全体总分数之比

谢谢赐教!

二维码

扫码加我 拉你入群

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

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

关键词:数据集 如何

沙发
zhengbo8 发表于 2014-1-15 20:20:03
  1. data a;
  2.         input age sex $ weight score;
  3. datalines;
  4. 21      女      50      90
  5. 21      女      48      92
  6. 23      女      46      88
  7. 27      男      60      89
  8. 24      男      62      96
  9. 19      女      52      66
  10. 28      女      67      86
  11. 31      男      65      92
  12. 33      女      57      79
  13. 35      男      57      83
  14. 26      女      63      78
  15. 25      男      59      90
  16. 26      女      66      95
  17. ;

  18. proc format;
  19.         value age 15-20 ='15-20'
  20.                   21-25 ='21-25'
  21.                   26-30 ='26-30'
  22.                   31-35 ='31-35';
  23. ;
  24. data a;
  25.         set a;
  26.         format age age.;
  27. run;

  28. quit;

  29. proc means data=a noprint;
  30.         class age sex;
  31.         output out=a sum=score;
  32. run;


  33. data result(keep=age sex percent_100);
  34.         set a;
  35.         retain sums;
  36.         if _type_=0 then sums=score;
  37.         if _type_=3 then percent_100=input(score/sums*100,5.2);
  38.         if _type_=3;
  39. run;
复制代码
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
jingju11 + 3 + 3 + 2 讲解的真是透彻,开卷有益。
admin_kefu + 100 热心帮助其他会员

总评分: 论坛币 + 100  学术水平 + 3  热心指数 + 3  信用等级 + 2   查看全部评分

藤椅
greeceya 发表于 2014-1-16 11:08:21
谢谢!程序太好了。

另外,1、自动生成的_type_是什么含义?
          2、为何proc means求和出现很多缺失值?

板凳
zhengbo8 发表于 2014-1-16 18:53:44
_type_:
0:整个数据集的mean操作
1:对age子集进行mean操作
2:对sex子集进行mean操作
3:对age、sex的交叉子集进行mean操作

缺失值是指不存在,在这里表示没意义。

报纸
zhengbo8 发表于 2014-1-16 18:55:13
你可以查阅一下帮助文档,很详细。

地板
greeceya 发表于 2014-1-17 15:14:07
谢谢!不过我一向不怎么会用帮助,比如这个type,找到的都是type选项,比如在proc means里面的,咋也找不到_type_这个自动变量的信息。用索引的话找不到,用搜索就搜到一大堆,看了几个也没看到。

好苦闷。

7
mycpcw 发表于 2014-1-22 10:56:25

8
yongyitian 发表于 2014-1-26 10:57:20
  1. data class;
  2. input age   gender $  weight   score;
  3. datalines;
  4. 21      F      50      90
  5. 21      F      48      92
  6. 23      F      46      88
  7. 27      M      60      89
  8. 24      M      62      96
  9. 19      F      52      66
  10. 28      F      67      86
  11. 31      M      65      92
  12. 33      F      57      79
  13. 35      M      57      83
  14. 26      F      63      78
  15. 25      M      59      90
  16. 26      F      66      95
  17. ;run;

  18. /* using SQL */
  19. proc sql;
  20.     create table wanted as
  21.     select a.age_group, gender, count(*) as n,
  22.            avg(a.score) as Mean_score format=5.2,
  23.            sum(a.score) as sum_score format=6.2,
  24.            sum(a.score)/a.total_score*100 as Percent_of_total format=5.2
  25.     from (select *, case when 15 <= age <= 20 then "15-20"
  26.                          when 21 <= age <= 25 then "21-25"
  27.                          when 26 <= age <= 30 then "26-30"
  28.                          when 31 <= age <= 35 then "31-35"
  29.                     end as Age_group, sum(score) as total_score
  30.           from class) as a
  31.     group by a.age_group, gender;
  32. quit;

  33. /* using hash */
  34. data _null_; /* by using hash object */
  35.     length age_group $8.;
  36.        retain total_score;
  37.     if _n_ = 1 then do;
  38.     declare hash h(ordered: 'Y');
  39.         h.definekey ('age_group', 'gender');
  40.         h.definedata('age_group', 'gender', 'sum_score', 'percent_score');
  41.         h.definedone();
  42.     declare hiter hi('h');
  43.     end;
  44.     do until(last);
  45.       set class end = last;
  46.         if 15 <= age <= 20 then age_group = "15-20";
  47.         if 21 <= age <= 25 then age_group = "21-25";
  48.         if 26 <= age <= 30 then age_group = "26-30";
  49.         if 31 <= age <= 35 then age_group = "31-35";
  50.            rc = h.find();
  51.         if rc ^= 0 then do;
  52.            sum_score = score;
  53.            h.add();     
  54.            end;
  55.         if rc = 0 then do;
  56.              sum_score ++ score;
  57.              h.replace();
  58.            end;
  59.            total_score ++ score;
  60.         if last then do;
  61.            rc = hi.first();
  62.            do while(rc=0);
  63.                percent_score=sum_score/total_score*100;
  64.                rc1 = h.replace();
  65.                rc = hi.next();
  66.             end;
  67.         end;
  68.     end;
  69.     rc = h.output(dataset: 'aaa');
  70. run;
复制代码

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

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