2017-10-09 50 views
1

我正在使用proc sql查詢來提取5個主題的標識和標記。我想創建一個新列作爲該ID的最大標記。我試圖使用下面的查詢。但它給語法錯誤。使用proc找到最多10個變量sql

proc sql; 
select id, m1, m2,m3,m4,m5, max(m1-m5) as max_marks from data1; 
quit; 
+0

編輯您的問題,並提供樣品數據和預期結果。 –

回答

1

我認爲你可以使用largest()

proc sql; 
    select id, m1, m2, m3, m4, m5, 
      largest(m1, m2, m3, m4, m5) as max_marks 
    from data1; 
quit; 

如果不proc sql,你絕對可以用數據中進行此操作。

+0

在SAS中,'LARGEST()'函數需要另一個參數。 'MAX(m1,m2,m3)'與'LARGEST(1,m1,m2,m3)'相同。 – Tom

0

正如@Gordon指出的那樣,如果您發佈了語法錯誤,則會更容易。你的文章中的語法是正確的,但是它正在做的是從m1中減去m5,並取這1個值的最大值,顯然不是想要的。

要使用快捷鍵-獲得跨變量的最大值,則需要添加關鍵字of

max(of m1-m5)

*注意:此方法僅適用於數據的步驟,不使用proc sql *

0

你傳遞一個變量列表的函數的語法是錯誤的。要將變量列表傳遞給SAS中的函數,您需要使用of關鍵字。 MAX(of m1-m5)

您的代碼實際上是計算M1和M5之間,因爲MAX(差)只有一個參數SAS認爲這是對SQL聚合函數MAX()調用,而不是調用SAS功能MAX(,)尋找的最大值兩個或更多數字。

但是您不能在PROC SQL中使用變量列表,因此您需要列出各個變量。

proc sql; 
select id,m1,m2,m3,m4,m5 
    , max(m1,m2,m3,m4,m5) as max_marks 
from data1 
; 
quit;