我对PROC SQL比较陌生。我已经搜索了SO和其他地方,但没有找到任何能解决我的问题的东西。
我正在处理学生转学成绩信息。学生(超出您的期望)多次上课。我正在尝试从数据集中提取他们获得的最佳成绩以及他们获得该最佳成绩的学期。我能够用min(grade)语句提取最佳成绩。但是,我很难得到这个名词。以下是我所拥有的。它返回所有术语,而不是与最低成绩相关的术语。
proc sql;
create table MATH_2413_trm as
select ID as ID, Math_TRNS_2413_Term as Math_TRNS_2413_Term
from work.Engr2
group by ID
having min(Math_TRNS_2413_Best_Grade)
order by ID;
quit;
我要去哪里错了?
谢谢你, 布莱恩
答案 0 :(得分:0)
方法1:改为使用PROC Summary。
proc summary data=engr2 noprint;
id TERM;
class id;
var math_trns_2413_term;
output out=want min=Math_TRNS_2413_Term minID=minTermID;
run;
方法2:使用双PROC SORT,它首先进行排序,以便使最高等级位于最高位置,然后使用NODUPKEY选项仅保留每个ID的第一条记录。
proc sort data=engr2;
by id descending math_trns_2413_term;
run;
proc sort data=engr2 out=max_grades nodupkey;
by id;
run;
这假设您的term变量称为'term'。
答案 1 :(得分:0)
正如@Reeza解释的那样,最好在proc摘要中进行操作。您与sql代码很接近,只是在hading子句中错过了grade = min(grade)。
COPY