sadece sadece dört sorunuz varsa hızlı çözümün muhtemelen sadece koşullu ifadeler kullanmak olacaktır: bir arama/cevap tablosu kullanılarak daha genel çözüm için if Q1 = 1 then answer + 1;
:
verileri hukuka aktarılması, birleştirme Tabloya cevap verin, öğrenciyi özetler.
data broad_data;
infile datalines missover;
input Student $ Q1 Q2 Q3 Q4;
datalines;
A 1 3 2 3
B 2 3 2 2
C 1 2 1 2
D 3 3 1 2
;
data answers;
infile datalines missover;
input question $ correct_answer ;
datalines;
Q1 1
Q2 2
Q3 2
Q4 2
;
data long_data;
set broad_data;
length question $10 answer 8;
array long[*] Q1--Q4;
do i = 1 to dim(long);
question = vname(long[i]);
answer = long[i];
output;
end;
keep Student question answer;
run;
proc sort data = long_data; by question student; run;
data long_data_answers;
merge long_data
answers
;
by question;
run;
proc sort data = long_data_answers; by student; run;
data result;
do i = 1 by 1 until (last.student);
set long_data_answers;
by student;
count = sum(count, answer eq correct_answer);
end;
result = count/i;
keep student result;
format result fract8.;
run;
sql isterseniz/tek bir deyimde son iki datasteps + türlü birleştirebilirsiniz kodunuzu sıkıştırmak istiyorum.
proc sql;
create table result as
select student, sum(answer eq correct_answer)/count(*) as result format fract8.
from long_data a
inner join answers b
on a.question eq b.question
group by student
;
quit;
Dizi çözümünün bir hayranıyım - ancak bu durumda, karşılaştırmayı döndüren özel bir işlev oluşturmayı düşünebilirim. – Reeza