2016-03-10 117 views
0

我知道這很簡單,但我似乎無法弄清楚。在SAS中製作(迭代?)Do循環

我有一個數據集,有50名學生,其中一列叫做測驗分數,每個學生都有一個測驗分數。我需要通過並找到所有學生之間的差異 - 所以學生1分 - 學生2分,學生2分 - 學生3分........到50然後學生2分 - 學生3分,...學生2分 - 學生50分。

我基本上需要結束測試分數的差異矩陣。

我必須使用基於陣列所以它會是這樣的 數據: 學生成績 亞歷杭德羅·91 Atkinsin 87 比爾72 巴特勒94 科爾曼91

data array; 
set testscores; 
array score(50) Score1-Score 50; ?I dont think this is correct 
do i=1 to 50; 
difference= score(i) -score(i+1)?? I really have no idea everything I try isn't working 
end; 
run; 

我要結束了與每個學生之間的差異有所不同

+0

代碼取決於您的數據結構。您需要顯示示例數據。這聽起來像距離矩陣,所以過程距離可能是最簡單的方法。 – Reeza

+0

我同意Reeza,添加一些示例數據將大大提高獲得幫助的機率。 –

回答

0

第一個數據步驟會在統一dis之後的1(a)和100(b)之間生成隨機分數爲50名學生提供幫助。

然後proc距離計算每個學生與所有其他學生的分數之間的差異。爲了這個工作,「學生」應該是一個字符變量。

data scores; 
    a = 1; 
    b = 100; 
    do Student_temp = 1 to 50; 
     Student = compress(put(student_temp, 8.)); 
     u = ranuni(12345); 
     Score = floor(a + (b-a)*u); 
     output; 
    end; 
    drop Student_temp a b u; 
run; 

proc distance data=scores out=Diff method=Euclid; 
    var interval(score); 
    id Student; 
run;