* Grades Example -- source code file for grades.sas The exam variables allow match merging of the midterm and final answers with the correct answers in midterm_key and final_key datasets; options linesize=70 nodate pageno=1; data midterms; infile 'c:/datasets/midterms.txt' firstobs=2; input name $ 1-24 sid year @40 (ans1-ans20) ($1.); exam = 'mid'; proc sort; by name sid; data finals; infile 'c:/datasets/finals.txt' firstobs=2; input name $ 1-24 sid year @40 (ans1-ans20) ($1.); exam = 'fin'; proc sort; by name sid; data midterm_key; infile 'c:/datasets/midterm-key.txt'; input (correct_ans1-correct_ans20) ($1.); exam = 'mid'; data final_key; infile 'c:/datasets/final-key.txt'; input (correct_ans1-correct_ans20) ($1.); exam = 'fin'; proc print data=midterms; var name sid year ans1-ans20; title 'Midterm Students and Answers'; proc print data=finals; var name sid year ans1-ans20; title 'Final Exam Students and Answers'; proc print data=midterm_key; title 'Midterm Correct Answers'; proc print data=final_key; title 'Final Correct Answers'; data midterm_scores; merge midterm_key midterms; by exam; retain correct_ans1-correct_ans20; array ans {20} $ ans1-ans20; array correct_ans {20} $ correct_ans1-correct_ans20; score = 0; do i = 1 to 20; score = score + (correct_ans{i} = ans{i}); end; midterm_score = score; drop i exam score ans1-ans20 correct_ans1-correct_ans20; title 'Midterm Scores'; proc print data=midterm_scores; data final_scores; merge final_key finals; by exam; retain correct_ans1-correct_ans20; array ans {20} $ ans1-ans20; array correct_ans {20} $ correct_ans1-correct_ans20; score = 0; do i = 1 to 20; score = score + (correct_ans{i} = ans{i}); end; final_score = score; drop i exam score ans1-ans20 correct_ans1-correct_ans20; title 'Final Scores'; proc print data=final_scores; data course_grades; merge midterm_scores final_scores; by name sid; if midterm_score = . then midterm_score = 0; if final_score = . then final_score = 0; course_score = (midterm_score + final_score) * 100 / 40; if course_score >= 90 then grade = 'A'; else if course_score >= 80 then grade = 'B'; else if course_score >= 70 then grade = 'C'; else if course_score >= 60 then grade = 'D'; else grade = 'F'; proc print data=course_grades; run; quit;