SAS, как получить сводные данные в одном и том же наборе данных

У меня есть набор данных, который выглядит так:

id,colour
12,blue
12,green
12,yellow
13,blue
14,black
15,blue
15,green

В том же наборе данных я хотел бы иметь подсчет каждого идентификатора. В конечном итоге я хочу исключить идентификаторы, которые имеют более одного

В SQL я бы использовал оконную функцию SUM OVER() или самостоятельно присоединился к таблице с подсчетом каждого идентификатора.

Как лучше всего это сделать в SAS?

id,colour,num
12,blue,3
12,green,3
12,yellow,3
13,blue,1
14,black,1
15,blue,2
15,green,2

Мой конечный результат будет выглядеть так после исключения повторяющихся идентификаторов:

id,colour
13,blue
14,black

person shecode    schedule 13.04.2015    source источник


Ответы (1)


Используйте PROC SORT в SAS 9.3+, чтобы получить набор уникальных наблюдений по ключевым переменным.

proc sort data=have out=duprec nouniquekey uniqueout=want;
by id;
run;

В SAS SQL вы можете выполнить повторное слияние напрямую, что не поддерживается в других версиях SQL. Вы можете дополнительно ограничить запрос с помощью предложения HAVING, чтобы получить окончательный результат напрямую.

proc sql;
create table want3 as
select *
from have
group by id
having count(*)=1;
quit;
person Reeza    schedule 13.04.2015
comment
NOUNIQUEKEY — одно из моих любимых дополнений версии 9.3+. Супер удобно. - person Joe; 14.04.2015
comment
Звучит здорово, но, к сожалению, у меня нет 9.3, у меня 9.2. - person shecode; 14.04.2015
comment
отлично, я вижу, что сейчас делает предложение SQL, которое, как вы говорите, не поддерживается в других версиях SQL - person shecode; 17.04.2015