楼主: bananacindy
2829 1

请教一个利用SAS进行问卷评分的程序设计 [推广有奖]

  • 0关注
  • 0粉丝

本科生

93%

还不是VIP/贵宾

-

威望
0
论坛币
757 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
517 点
帖子
50
精华
0
在线时间
169 小时
注册时间
2013-4-20
最后登录
2020-6-5

楼主
bananacindy 发表于 2014-8-1 19:33:26 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
导师分配的活儿,实在不知道怎么整了,所以上来求助。

评分标准如下:例如某一题包括五个小题,正确答案为ABACD。如果答题者回答的字母和顺序都正确(ABACD)算满分。如果字母是正确答案里的字母,但顺序有误,那么每错一个扣一分;比如回答ABAAC,那么最后的A和C就属于这种情况,应扣2分。如果字母不是正确答案里的,那么每错一个扣两分;比如回答ABAEF,那么最后的E和F就属于这种情况,应扣4分。
现在初步的想法是利用find函数,输出答题者回答的每一个字母在正确答案中的位置,与小题号相等的话就知道他答对了,不相等或干脆为0的话就知道他答错了,再区分应该扣1分还是2分即可。例如回答的是ABAAC,那么对于第一个A,用find("ABACD",“A"),输出1的话就能知道他回答正确了。但是这么做有一个问题:对于第二个A,也就是第三小题的这个A,根据正确答案ABACD,其实他是答对了的。但是find函数输出的只能是在正确答案中第一次出现A的位置,也就是1,与3不等,那就会错误判断为他答错了。

苦思良久也不知道怎么解决这个问题,求大神帮助。





二维码

扫码加我 拉你入群

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

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

关键词:程序设计 求大神帮助 正确答案 find ABA 程序设计 SAS 问卷

沙发
yongyitian 发表于 2014-8-4 09:17:51
  1. data test;
  2.   input answer1 $ answer2 $ answer3 $ answer4 $ answer5 $;
  3.   Correct = 'ABACD';
  4.   Ans = compress(cats(answer1, answer2, answer3, answer4, answer5));
  5. datalines;
  6. A B A A C
  7. A B A E F
  8. A B A C D
  9. ; run;

  10. data score;
  11.     set test;
  12.      array answer{5} answer1 - answer5;
  13.       d1_score = 0;
  14.       d2_score = 0;
  15.         do i = 1 to 5;
  16. * method 1;
  17.       if answer[i] ^= substr(correct,i,1) then do;
  18.         if answer[i] in ( 'A', 'B', 'C', 'D') then d1_score = d1_score -1;
  19.         else d1_score  = d1_score -2;;
  20.       end;

  21. * method 2;
  22.      if substr(ans, i, 1) ^= substr(correct, i,1) then do;
  23.        if substr(ans, i, 1) in  ( 'A', 'B', 'C', 'D') then d2_score = d2_score  - 1;
  24.        else d2_score = d2_score - 2;
  25.      end;
  26.    end;
  27.    drop i;
  28. run;
复制代码

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

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