2015-09-10 3 views
0

Как выбрать ВСЕ ROWS и где A ROW существует более одного раза, (на основе ID) просто взять один (не имеет значения, какой из них).SELECT DISTINCT ON в SAS PROC SQL

Так у меня есть:

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 будет мой выбор.

Большое спасибо заранее

+0

ли * есть * быть сделано с помощью SQL? SQL не подходит для такого рода задач. SAS предоставляет другие способы сделать это намного проще. –

ответ

2

Самый удобный способ сделать это будет с использованием Proc Сортировать:

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

В противном случае, если это разрешено, то решение @ Reeza приятно. Если вы должны использовать Proc SQL, затем undomented функция может потребоваться быть реализованы: монотонная():

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

SAS шаг данных ответа, используя первый/последний обработка

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

Ваш предыдущий ответ SQL работал красиво, поскольку я новичок в SQL, не могли бы вы объяснить мне, почему функция 'MAX()' в String работает в сочетании с 'GROUP BY'? Фактически это дало мне отличное решение и улучшение для моего проекта! Благодаря!! –

0

С Proc SQL:

proc sql; 

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