Sas 用期末考试分数更新最低分数变量

Sas 用期末考试分数更新最低分数变量,sas,Sas,我在SAS Studio中导入了一个xls文件,它包含76个观察值(每个学生一个),其中包含变量“final”、“exam1”、“exam2”、“exam3”和“act”。我想写一个SAS程序,用每个学生的“最终”分数值更新每个学生的最低考试分数(exam1、exam2或exam3)。我如何编写这个程序 我知道如何用代码更新变量,但我不知道如何找到最低等级,然后更新该变量 到目前为止,我的程序是这样的: FILENAME FinalG '/home/mrohde0/MyFolder/HWData

我在SAS Studio中导入了一个xls文件,它包含76个观察值(每个学生一个),其中包含变量“final”、“exam1”、“exam2”、“exam3”和“act”。我想写一个SAS程序,用每个学生的“最终”分数值更新每个学生的最低考试分数(exam1、exam2或exam3)。我如何编写这个程序

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

到目前为止,我的程序是这样的:

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;

我已经找到了问题的答案。我把它贴在下面

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;

为考试声明一个数组,您可以使用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;

所有的考试分数都比期末分数高会发生什么?