2016-03-04 43 views
0

我有一个xls文件,我已经在SAS Studio中导入,它包含76个观察值(每个学生一个),变量作业,'final','exam1','exam2 ','exam3'和'行为'。我想编写一个SAS程序,用他们的“最终”等级的值来更新每个学生的最低考试分数(考试1,考试2或考试3)。我怎样才能编码?更新最低成绩变量与期末考试分数

我知道如何用代码更新变量,但我不”知道如何找到最低等级,然后更新变量

这是我的计划是什么样子至今:

FILENAME FinalG '/home/mrohde0/MyFolder/HWData/HW6/FINAL Grade.xlsx'; 

/** Import the file. **/ 

PROC IMPORT DATAFILE=FinalG 
    OUT=WORK.MYFinalG 
    DBMS=xlsx 
    REPLACE; 
RUN; 

Data 
    proc print data=MyFinalG; 

run; 

回答

0

我已想出的答案,我的问题我贴在下面

data MyAdjGr; /* my adjusted grade */ 
    set work.MyFinalG; 
    if exam1 = min(exam1, exam2, exam3) then exam1 = final; 
    else if exam2 = min(exam1, exam2, exam3) then exam2 = final; 
    else if exam3 = min(exam1, exam2, exam3) then exam3 = final; 
run; 
+0

所有考试成绩都高于最终成绩? – Reeza

0

为检查声明一个数组,您可以使用WHICHN函数查找最低分数的索引。这与上面的代码量相同,所以在代码长度方面没有区别。如果你不得不再增加4个考试,你将需要增加4行,而下面的解决方案只需要修改一行,数组维和变量声明。

data want; 
set have; 
array exams(3) exam1 exam2 exam3; 
lowest_index=whichn(min(of exams(*)), of exams(*)); 
exams(lowest_index) = final; 
*if you want to conditionally assign the lowest value:; 
*if final > exams(lowest_index) then exams(lowest_index)=final; 
run;