全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1564 5
2014-04-29
首先这个是我的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

二维码

扫码加我 拉你入群

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

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

全部回复
2014-4-29 08:30:13
可以用如下code 计算cumulative GPA:
data base1 (drop= count GPA);
set base1;by stud;
retain count GPA;
if first.stud then do;
count=0;
GPA=0; end;
count+1; GPA+mean_GPA;
Cumulative_GPA=GPA/count;
run;




二维码

扫码加我 拉你入群

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

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

2014-4-29 08:44:43
插入上面的那个code后第一个学生没有问题,但是到了下一个学生后,累计成绩没有清零,如图:
问题
二维码

扫码加我 拉你入群

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

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

2014-4-29 08:45:46
windvally 发表于 2014-4-29 08:44
插入上面的那个code后第一个学生没有问题,但是到了下一个学生后,累计成绩没有清零,如图:
刚才我忘加by stud;语句了,你加上by 语句再试试
二维码

扫码加我 拉你入群

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

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

2014-4-29 08:50:25
啊,成功了,非常感谢!
二维码

扫码加我 拉你入群

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

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

2014-5-2 00:05:29
复制代码


这段code 是否有问题呢? 比如 GPA = ‘A+’ 时,满足了 if substr(GPA,1,1)='A' then new_GPA=4; 下面的 else if 就不执行了。现在跑出来结果应该是 A ,A+, A- 的 GPA 都等于 4 ?下面的 B C D 也有问题(假如所有数据都如code 一样标准,BCD是没错的,因为substr(GPA,1,2)  里面的 2 很关键      )。个人感觉逻辑不够严谨。

如有错误,还请指出,还望不要见怪
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群