2017-10-09 53 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;