首先这个是我的Code:
data base;
infile 'C:\Users\mayan\Documents\Statistics 224\Final_Data\*.txt' delimiter='@';
input stud $ semester $ course $ score GPA $;
Abb_Course = substr(course,1,4);
School_Year= substr(semester,2,2);
run;
data base;
set base;
if substr(GPA,1,1)='A' then new_GPA=4;
else if substr(GPA,1,2)='A+' then new_GPA=4.33;
else if substr(GPA,1,2)='A-' then new_GPA=3.66;
else if substr(GPA,1,2)='B+' then new_GPA=3.33;
else if substr(GPA,1,2)='B' then new_GPA=3;
else if substr(GPA,1,2)='B-' then new_GPA=2.66;
else if substr(GPA,1,2)='C+' then new_GPA=2.33;
else if substr(GPA,1,2)='C' then new_GPA=2;
else if substr(GPA,1,2)='C-' then new_GPA=1.66;
else if substr(GPA,1,2)='D+' then new_GPA=1.33;
else if substr(GPA,1,2)='D' then new_GPA=1;
else if substr(GPA,1,2)='D-' then new_GPA=0.66;
else if substr(GPA,1,2)='E' then new_GPA=0;
else new_GPA=.;
run;
data base;
set base;
if substr(semester,1,1)='1' then Semester_Season='Fall';
else if substr(semester,1,1)='2' then Semester_Season='Spr';
else if substr(semester,1,1)='3' then Semester_Season='Sum';
else if substr(semester,1,1)='5' then Semester_Season='Win';
else Semester_Season=.;
run;
data base;
set base;
if substr(semester,1,1)='1' then Semester_Order='1';
else if substr(semester,1,1)='2' then Semester_Order='3';
else if substr(semester,1,1)='3' then Semester_Order='4';
else if substr(semester,1,1)='5' then Semester_Order='2';
else Semester_Order=.;
run;
proc sort data=base;
by stud School_Year Semester_Order;
run;
proc sql;
create table base1
as select stud,School_Year,Semester_Season,mean(new_GPA) as mean_GPA,
sum(score) as sum_score,
count(*) as num_course from base
group by stud,semester,School_Year,Semester_Season;
quit;
proc print data=base1;
run;
最后打出来的表如下:
如何才能在每行的最后加上一个Cumulative GPA (学期累计成绩),如图第一个就是那个学期成绩,第二个就是两个学期的平均成绩[(3.47571+3.33167)/2],第三个就是3个学期的平均成绩。而且一定要按学生(学生号是第一列)区分。
我大概猜到是不是应该用一个loop?但是不知道怎么下手,请高手帮忙 ORZ