2014-01-30 4 views
0

enter image description here Мне нужно удалить наблюдения с повторяющимися парами (то есть исходное наблюдение и это дубликат). У меня более сотни столбцов, но иногда для данного ID я получаю пару разных Load_Date и пару столбцов Контактора. Нижеприведенный код, который я использую для удаления всех случаев, когда у меня есть повторяющиеся пары, как описано выше enter image description here:PROC SQL для удаления повторяющихся пар наблюдений?

Не могли бы вы сообщить мне, правильно ли я делаю это? Из описанных данных мне нужно сохранить записи только для значений ID и C. Я проверял свой вывод, и похоже, что он работал, но не уверен, потому что я новичок в proc sql. Благодаря!

+0

Вы хотите полностью удалить дубликаты, или вы хотите сохранить один из них? – FrankPl

+0

Я хочу полностью удалить дубликаты, но здесь мы говорим не только о том, чтобы сохранить один из дубликатов. Я хочу удалить пару наблюдений с дубликатом и оригинальным. – user2993827

+0

Любые конкретные причины, по которым вы хотите использовать PROC SQL для этого? – Joe

ответ

3

Решение SAS, при условии, что вы хотите только удалить дубликаты записей ID.

proc sort data=have; 
by ID; 
run; 

data want; 
set have; 
by ID; 
if first.ID and last.ID; 
run; 

Это удаляет записи, идентичные идентификатору. Если VAR1 и VAR2 также актуальны, вы можете добавить их также в сортировку; FIRST и LAST должны быть самой правой переменной в операторе by.

+0

К сожалению, этот код не дает мне ID и C в качестве вывода. – user2993827

+0

Вышло из утверждения 'by', извините - попробуйте сейчас. – Joe

1

И решение proc SQL. Тот же вывод, но один шаг и отсутствие явной сортировки.

proc sql; 
    create table WANT as 
    SELECT * 
    FROM have 
    GROUP BY ID 
    /* Put your criteria here, can use any COUNT DISTINCT*/ 
    HAVING COUNT(*)=1 
;quit;