我正在使用proc sql查询来提取5个主题的id和标记。我想创建一个新列作为该id的最大标记。我试图使用以下查询。但它给出了语法错误。
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
,您绝对可以通过数据步骤执行此操作。
答案 1 :(得分:0)
正如@Gordon指出的那样,如果你发布你得到的语法错误会更容易。帖子中的语法是正确的,但它正在做的是从m1中减去m5并取出该值的最大值,显然不是想要的。
要使用快捷键-
获取变量的最大值,您需要添加关键字of
。
max(of m1-m5)
*请注意,此方法仅适用于数据步骤,不使用proc sql
*
答案 2 :(得分:0)
将变量列表传递给函数的语法是错误的。要将变量列表传递给SAS中的函数,您需要使用of
关键字。 MAX(of m1-m5)
。
您的代码实际上是在计算M1和M5之间的差异,因为MAX()只有一个参数,SAS认为这是对SQL聚合函数MAX()
的调用,而不是对SAS函数的调用{{1找到两个或多个数字的最大值。
但您无法在PROC SQL中使用变量列表,因此您需要列出各个变量。
MAX(,)