|
9#

楼主 |
发表于 2011-4-23 21:51:18
|
只看该作者
Re: 统计学生选择题回答正确的个数
[quote="天性爱好者":13qd3ko5]有谁还能帮忙找一下前面那段程序统计出错的原因在哪里呀?我都试过好几遍了,id 为 03 的 q2 列始终没统计出来,想知道!!
代码重新粘贴一下:
[code:13qd3ko5]
data a;
infile cards dsd;
input id$ q1$ q2$ q3$@@;
cards;
01, a ,"b, c", b
02,"a c", c, c
03, A, "c , b", b
04, C, B, B,
;
run;
data b(drop=i);
num=0;
set a;
array q(3);
array crt(3) $_temporary_('(a|A)','(b|B) *,? *(c|C)|(c|C) *,? *(B|b)','(B|b)');
do i=1 to 3;
if prxmatch('m/'||crt(i)||'/i',q(i)) then num+1;
end;
run;
[/code:13qd3ko5][/quote:13qd3ko5]
主要问题在这段 [color=#FF0000:13qd3ko5]'(b|B) *,? *(c|C)[b:13qd3ko5]|[/b:13qd3ko5](c|C) *,? *(B|b)' [/color:13qd3ko5] 里面,我试了如果匹配组()里面还含有含有匹配组的话,会出错,如: '[color=#FF0000:13qd3ko5]( [/color:13qd3ko5](b|B) *,? *(c|C)[b:13qd3ko5]|[/b:13qd3ko5](c|C) *,? *(B|b) [color=#FF0000:13qd3ko5])[/color:13qd3ko5]' ,但是最外面如果没有加上匹配组时,这段里面只有前面部分[color=#FF0000:13qd3ko5] (b|B) *,? *(c|C) [/color:13qd3ko5]有效,所以 id 为 01 的 q2列[color=#FF0000:13qd3ko5]"b, c"[/color:13qd3ko5]能够统计出来,而 id 为 03 的 q2列[color=#FF0000:13qd3ko5]"c , b"[/color:13qd3ko5]就不会统计出来,不知道有没有谁可以在这段 '(b|B) *,? *(c|C)[b:13qd3ko5]|[/b:13qd3ko5](c|C) *,? *(B|b)' 的基础之上解决此问题。 |
|