楼主: priss111
3053 14

[原创博文] 请教各位老师:请问下面一段程序用循环怎么生成?谢谢! [推广有奖]

  • 0关注
  • 5粉丝

已卖:9份资源

副教授

16%

还不是VIP/贵宾

-

威望
0
论坛币
153 个
通用积分
47.5396
学术水平
11 点
热心指数
14 点
信用等级
10 点
经验
14935 点
帖子
472
精华
0
在线时间
808 小时
注册时间
2008-3-30
最后登录
2025-3-17

楼主
priss111 发表于 2011-4-18 22:35:15 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
请教各位老师:能不能用循环生成下面的结果(我写的程序很繁琐)?谢谢!
想根据group变量依次求出quality(大 中 小)变量的累加和,
最终结果如下:

                           
                                               Obs    quality    group    tot_number
                                                1       大         1        489
                                                2       小         1        136
                                                3       中         1        718
                                                4       大         2        355
                                                5       小         2         10
                                                6       中         2        319
                                                7       大         3       1114
                                                8       小         3         36
                                                9       中         3       1811



data onetwo;
input number quality$;
cards;
103 大
39 大
37 中
21 中
3 大
6 大
2 中
7 中
8 中
2 大
20 大
5 中
16 大
20 中
1 中
10 中
9 中
2 中
0 大
1 中
1 中
2 中
6 大
2 中
10 中
2 中
5 大
3 中
7 大
0 大
5 大
4 中
5 大
1 大
19 中
1 中
8 中
3 大
0 大
1 大
20 中
3 小
10 中
0 大
5 大
5 中
15 大
22 大
20 大
13 中
9 中
10 中
8 中
4 中
1 中
12 中
5 大
12 中
5 中
20 大
31 中
1 小
10 小
4 中
2 大
8 中
3 大
4 大
1 大
11 大
1 大
1 大
5 中
8 中
4 中
2 大
3 中
10 中
5 中
10 中
1 大
0 中
2 小
5 中
10 大
3 中
1 中
5 中
14 中
10 大
1 中
3 中
5 中
6 中
7 中
3 中
4 中
0 中
4 中
3 中
10 中
27 中
1 中
3 中
10 中
2 中
2 中
25 中
2 小
3 中
20 中
3 中
2 中
2 大
3 中
17 大
22 中
7 中
10 大
2 中
5 中
10 中
4 大
13 中
16 大
3 中
6 中
3 小
5 中
9 小
1 小
3 大
2 中
1 中
3 中
3 大
3 中
4 小
3 中
80 大
9 小
4 中
1 中
3 小
2 小
10 中
6 大
1 中
8 大
1 中
1 大
0 小
1 大
5 大
16 中
1 中
1 中
13 中
3 大
20 中
5 大
36 大
3 中
14 中
3 中
5 小
1 中
6 中
3 大
12 大
35 大
2 中
4 中
10 大
15 中
3 大
7 中
8 中
3 大
2 中
1 中
36 中
23 大
0 中
2 中
8 中
5 中
4 中
1 中
6 中
4 大
5 中
5 中
4 中
10 大
8 大
4 中
4 中
2 中
3 大
4 中
10 大
4 小
11 大
4 中
3 中
3 中
3 中
3 中
3 中
1 中
3 中
3 大
2 中
3 中
6 小
8 中
10 中
2 小
1 大
2 大
6 中
10 大
5 中
1 大
16 大
3 中
1 大
6 大
6 中
3 大
2 中
3 大
0 中
10 大
1 大
4 大
15 大
3 大
5 大
10 大
0 大
3 中
30 中
1 大
3 中
2 中
1 大
4 中
1 大
7 中
2 大
10 大
3 大
3 中
4 大
6 大
20 大
2 小
5 中
6 中
20 大
4 大
1 大
4 中
0 中
0 中
4 大
1 中
3 大
9 大
8 中
1 中
1 大
9 中
12 中
2 中
5 中
2 中
20 小
20 中
1 大
4 中
2 小
201 大
1 大
8 中
1 中
1 中
1 大
1 中
4 中
2 中
8 小
10 中
5 大
7 大
1 大
1 中
100 中
1 大
17 中
2 大
12 中
17 大
2 小
2 中
5 大
1 大
1 大
6 大
2 中
8 小
18 大
12 大
2 大
2 大
63 大
18 中
20 大
15 大
10 大
3 中
9 大
5 大
3 中
2 小
2 大
5 中
1 中
2 中
3 中
3 中
6 小
2 中
6 大
1 中
12 大
2 中
1 大
2 大
6 中
2 大
1 大
4 大
1 大
3 大
4 大
3 中
2 小
12 中
5 大
4 中
4 大
2 大
2 大
2 中
1 大
10 大
1 大
22 中
17 大
11 大
3 大
1 大
151 中
3 中
100 中
8 中
2 中
2 大
5 中
1 大
16 大
1 大
10 大
9 中
4 大
7 中
2 小
1 中
3 中
11 大
1 大
3 中
2 大
1 大
9 中
2 大
1 中
4 小
2 大
8 中
2 中
17 中
3 中
1 中
6 大
1 大
3 大
5 中
1 大
6 小
1 大
10 中
20 大
11 中
2 中
4 大
5 大
51 中
7 大
1 大
2 大
20 中
79 中
3 大
50 中
9 小
4 中
8 中
17 大
15 中
4 中
1 大
3 中
105 中
10 中
4 大
18 大
5 大
4 中
2 中
0 中
0 中
47 大
6 大
9 中
3 中
3 中
36 中
4 中
5 大
9 大
2 中
112 中
3 中
10 大
1 中
1 大
5 小
30 中
5 中
4 大
20 大
3 中
2 中
8 大
3 中
30 中
1 中
14 大
1 中
9 中
2 中
6 中
76 中
32 中
11 中
1 中
30 中
32 中
29 中
5 大
1 大
2 大
4 中
2 中
5 小
42 大
2 大
2 大
5 大
7 中
29 大
6 中
18 大
3 大
1 大
12 大
44 中
1 大
7 大
10 大
12 大
2 中
5 大
65 中
21 中
48 大
8 中
5 大
3 大
3 中
41 中
1 中
9 小
8 小
11 大
9 大
0 中
8 大
11 大
6 大
4 中
23 中
8 大
10 大
37 中
1 大
16 中
8 大
2 大
5 大
16 小
10 大
1 中
63 中
5 大
;
run;

data b;
set onetwo;
if number<10 then group=1;
if 10<=number<=15 then group=2;
if number>15 then group=3;
run;

proc freq data=b;
tables group*quality;run;

proc sort data=b;
by quality;run;

  data d;
  set b;
  if group=1;
  proc sort data=d;
  by quality;
  data d1;
  set d;
  by quality;
if first.quality then tot_number=0;
tot_number+number;
drop number;
if last.quality then output;run;

data e;
  set b;
  if group=2;
  proc sort data=e;
  by quality;
  data e1;
  set e;
  by quality;
if first.quality then tot_number=0;
tot_number+number;
drop number;
if last.quality then output;run;

data f;
  set b;
  if group=3;
  proc sort data=f;
  by quality;
  data f1;
  set f;
  by quality;
if first.quality then tot_number=0;
tot_number+number;
drop number;
if last.quality then output;run;

data total;
set d1 e1 f1;
run;
二维码

扫码加我 拉你入群

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

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

关键词:quality Number Group cards Input 程序

回帖推荐

hopewell 发表于5楼  查看完整内容

本帖被以下文库推荐

沙发
楚韵荆风 学生认证  发表于 2011-4-18 22:41:54
还是用R的角标运算函数which()简单
共享是一种彼此的快乐

藤椅
priss111 发表于 2011-4-18 22:48:37
2# 楚韵荆风


那麻烦能不能把Rcode贴出来啊
谢谢!

板凳
楚韵荆风 学生认证  发表于 2011-4-18 22:59:30
1# priss111

你先把你的数据保存到一个txt文档里面命名为11.txt,然后执行下面程序
共享是一种彼此的快乐

报纸
hopewell 发表于 2011-4-18 23:06:03
  1. proc sql;
  2.     create table temp as
  3.         select quality,
  4.                case when number<10 then 1
  5.                     when 10<=number<=15 then 2
  6.                     else 3
  7.                end as group,
  8.                sum(number) as tot_number
  9.             from onetwo
  10.             group by group, quality
  11.             order by group, quality;
  12. quit;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
priss111 + 1 + 1 + 1 谢谢!! 太神奇了... 太漂亮的code...

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

观钓颇逾垂钓趣 种花何问看花谁

地板
priss111 发表于 2011-4-18 23:15:24
5# hopewell

谢谢!!!

这程序写的漂亮极了...
赞...

请问您用什么编辑器?
而且显示程序的行数1,2,...12

7
priss111 发表于 2011-4-18 23:25:11
4# 楚韵荆风

谢谢!!
txt文本下载不了
不知是怎么回事儿.

8
priss111 发表于 2011-4-18 23:33:26
4# 楚韵荆风
现在看到了
谢谢!
但我想的结果是
                                
                                               Obs    quality    group   tot_number
                                                1       大         1        489
                                                2       小         1        136
                                                3       中         1        718
                                                4       大         2        355
                                                5       小         2         10
                                                6       中         2        319
                                                7       大         3       1114
                                                8       小         3         36
                                                9       中         3       1811

下面这个要根据(group 分别分层)

  quality  sum
1      大 1958
2      中 2848
3      小  182

9
feifeichen 发表于 2011-4-19 12:28:20
建议用freq过程,里面有out输出

10
楚韵荆风 学生认证  发表于 2011-4-19 20:32:23
8# priss111

是这样么?
>  data=read.table("11.txt",head=TRUE)
>  class=unique(data$group)
>  n=length(class);summ=rep(0,n);
>  for(k in 1:n)
+  { summ[k]=sum(data$tot_number[which(data$group==class)]) }
>  data.frame(group=class,sum=summ)
  group  sum
1     1 1343
2     2  684
3     3 2961
共享是一种彼此的快乐

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

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