我们说我的数据如下:
ID_A ID_B ID_C NUM_1
123 124 0 72
123 124 1 90
123 124 1 80
我想在我的数据中添加两列。第一个将选出NUM_1的最大值(按ID_A,ID_B,ID_C分组),第二个将选择与NUM_1的最大值对应的ID_C。
对于这些数据,答案是
ID_A ID_B ID_C NUM_1 MAX_1 MAX_ID
123 124 0 72 72 0
123 124 1 90 90 1
123 124 1 80 90 1
使用类似
的内容PROC SQL;
CREATE TABLE WORK.TEST1 AS
SELECT t1.ID_A,
t1.ID_B,
t1.ID_C,
t1.NUM_1,
/* Max_1 */
(MAX(t1.NUM_1)) FORMAT=13.2 AS MAX_1
FROM WORK.TEST t1
GROUP BY t1.ID_A,
t1.ID_B,
t1.ID_C
HAVING MAX(t1.NUM_1)
ORDER BY t1.ID_A,
t1.ID_B,
t1.ID_C,
t1.NUM_1;
QUIT;
我能够获得最大值,在所需的行中重复,但它没有得到MAX_ID,在我想要的所需行中重复。
我是SAS的新手,但我已经尝试了一段时间才能得到这个,如果其他地方有这个问题我会道歉。
顺便说一句,我正在使用SAS EG,所以如果您知道如何使用数据步骤来实现这一点,我可以接受它。
提前感谢您的帮助。
答案 0 :(得分:3)
在SAS中,您可以使用having
子句,如下所示:
proc sql noprint;
create table tallest as
select name, height
from sashelp.class
having height = max(height)
;
quit;
答案 1 :(得分:1)
另一个SAS选项是将PROC MEANS
与idgroup
一起使用。
proc means data=sashelp.class noprint;
var height;
output out=tallest idgroup(max(height) out (name height)=);
run;
它将高度的最大值与您想要的任何其他值一起(在这种情况下,名称,实际上是一个id变量)。
答案 2 :(得分:0)
可以使用correlated subquery完成此操作。
以下行适用于您的示例数据。如果您的完整数据中存在特殊情况,则可能需要进行调整。它将遵循定义MAX_1
的条款。
(select distinct t2.ID_C from test as t2 where t1.NUM_1 = t2.NUM_1) as MAX_ID