楼主: lqwoailuo
2332 21

请教一个sas问题? [推广有奖]

11
Actree 发表于 2013-12-3 22:21:11
lqwoailuo 发表于 2013-12-3 14:53
应该用宏套宏实现吧?

12
yongyitian 发表于 2013-12-4 08:55:38
lqwoailuo 发表于 2013-12-3 13:52
朋友,你创建a2为正确数据集,a1为另一个数据集,二者比较。如果我还有一些数据集(假设为a3,a4,a5),也 ...
先 merge 到一起, 然后再计算

data a;
   merge a1 a2 a3 a4 a5;
   by Q_no;
run;

data b;
   set a;
  /*  calculation */
run;

13
lqwoailuo 发表于 2013-12-4 15:25:11

14
lqwoailuo 发表于 2013-12-4 20:03:21
yongyitian 发表于 2013-12-4 08:55
先 merge 到一起, 然后再计算

data a;
朋友,谢谢您的答复。把数据集合并后,想要让它们与正确的比较后结果一块出来,是不是需要编个循环还是怎么弄?我自己没想明白,希望您能给解惑一下。

15
yongyitian 发表于 2013-12-5 13:09:45
lqwoailuo 发表于 2013-12-4 20:03
朋友,谢谢您的答复。把数据集合并后,想要让它们与正确的比较后结果一块出来,是不是需要编个循环还是怎 ...
  1. data b;
  2. merge a0 a1 a2 a3;
  3. by q_no;
  4. run;

  5. data b1;
  6. array answer{3} $ ans1-ans3;
  7. array s{3} s1-s3;
  8. set b;
  9. total_score = 0;
  10. do i = 1 to 3;
  11. if answer[i] = correct_answer then s[i] = 10;
  12. else s[i] = 0;
  13. total_score = total_score + s[i];
  14. end;
  15. total_s1 + s1;
  16. total_s2 + s2;
  17. total_33 + s3;
  18. run;
复制代码

已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
webgu + 80 + 60 + 1 + 1 + 1 热心帮助其他会员

总评分: 经验 + 80  论坛币 + 60  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

16
shenliang_111 发表于 2013-12-5 15:44:59
  1. data a1;
  2. input question $;
  3. q_no = scan(question, 1, '.');
  4. answer = scan(question, 2, '.');
  5. drop question;
  6. datalines;
  7. 1.A
  8. 2.B
  9. 3.C
  10. 4.A
  11. 5.D
  12. 6.A
  13. 7.C
  14. 8.BC
  15. 9.ABCD
  16. 10.BCD
  17. ; run;
  18. data a2;
  19. input question $;
  20. Q_no = scan(question, 1, '.');
  21. Correct_answer = scan(question, 2, '.');
  22. drop question;
  23. datalines;
  24. 1.A
  25. 2.B
  26. 3.C
  27. 4.D
  28. 5.D
  29. 6.A
  30. 7.C
  31. 8.BC
  32. 9.ABC
  33. 10.BC
  34. ; run;
  35. proc sql;
  36. select  sum(a1.answer eq a2.Correct_answer)*10 as total_score,sum(a1.answer ne a2.Correct_answer) as error
  37. from a1
  38. left  join  a2
  39. on a1.q_no=a2.Q_no;
  40. quit;
复制代码

17
lqwoailuo 发表于 2013-12-5 15:46:43
yongyitian 发表于 2013-12-5 13:09
谢谢您。

18
lqwoailuo 发表于 2013-12-5 15:47:19
shenliang_111 发表于 2013-12-5 15:44
谢谢。

19
shenliang_111 发表于 2013-12-5 17:00:31
  1. *HASH OBJECT
  2. data RESULT;
  3.   length  Correct_answer $16;
  4.   if _n_=1 then do;
  5.    declare hash e(dataset: 'a2(rename=(Q_no=q_no))');  
  6.    e.definekey('q_no');
  7.    e.definedata('Correct_answer');
  8.    e.definedone();
  9.    call missing(Correct_answer);
  10.   end;
  11.   set a1 end=last;
  12.   drop rc;
  13.   rc=e.find();
  14.   if rc=0  then do; if answer eq Correct_answer then nn+1;else mm+1; end;
  15.   else mmm+1;
  16.   if last then do; nn=nn*10; output;end;
  17.   keep mm nn;
  18. run;

  19. PROC PRINT DATA=RESULT;
  20. RUN;
复制代码

20
A072560 发表于 2013-12-5 17:23:54
我说呢,怎么这么眼熟

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

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