我正在使用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;
编辑您的问题,并提供样品数据和预期结果。 –