2016-03-04 39 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;