SELECT SAS PROC 中的 DISTINCT ON SQL

SELECT DISTINCT ON in SAS PROC SQL

我如何 select ALL ROWS 并且 A ROW 存在不止一次,(基于 ID)只取一个(哪一个无关紧要)。

所以我有:

ID name val
===========
1 | aa | 32
2 | aa | 32
3 | ad | 32
3 | zy | 11
4 | rr | 21
5 | oi | 44
5 | df | 11

结果应该是

ID name val
===========
1 | aa | 32
2 | aa | 32
3 | zy | 11
4 | rr | 21
5 | df | 11   

5 | df | 11还是5 | oi | 44都没关系

在 Postgres 上,SELECT DISTINCT ON ID 是我的选择。

非常感谢

一个SAS数据步骤答案,使用First/Last处理

data want;
  set have;
  by id;
  if first.id;
 run;

有 proc sql:

proc sql;

select id, max(name) as maxName, val
from work.table
group by id, val;

最方便的方法是使用 Proc Sort:

PROC SORT DATA=HAVE OUT=WANT NODUPKEY;
BY ID;
RUN;

否则,如果它是预排序的,那么@Reeza 的解决方案很好。 如果你必须使用 Proc SQL,那么可能需要实现一个未定义的特性:monotonic():

PROC SQL;
CREATE TABLE WANT AS
SELECT * FROM HAVE
GROUP BY ID
HAVING MONOTONIC()=MIN(MONOTONIC());
QUIT;