我正在使用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;
我正在使用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;
我認爲你可以使用largest()
:
proc sql;
select id, m1, m2, m3, m4, m5,
largest(m1, m2, m3, m4, m5) as max_marks
from data1;
quit;
如果不proc sql
,你絕對可以用數據中進行此操作。
在SAS中,'LARGEST()'函數需要另一個參數。 'MAX(m1,m2,m3)'與'LARGEST(1,m1,m2,m3)'相同。 – Tom
正如@Gordon指出的那樣,如果您發佈了語法錯誤,則會更容易。你的文章中的語法是正確的,但是它正在做的是從m1中減去m5,並取這1個值的最大值,顯然不是想要的。
要使用快捷鍵-
獲得跨變量的最大值,則需要添加關鍵字of
。
max(of m1-m5)
*注意:此方法僅適用於數據的步驟,不使用proc sql
*
你傳遞一個變量列表的函數的語法是錯誤的。要將變量列表傳遞給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;
編輯您的問題,並提供樣品數據和預期結果。 –