2014-10-16 3 views
0

У меня есть два набора данных:SAS: Учеб рода nodupkeys ошибка

  • "матерей" - 5,512 наблюдения, где переменная "МАМА" = 1
  • "all_women" - 2,336,750 наблюдения, где переменная "МАМА" = 0

Я объединить два следующим образом:

data combined; 
set mothers all_women; 

Теперь, когда матери уже я n datset all_women, я хочу удалить повторяющиеся записи - при условии, что я сохраню наблюдения, где «MOTHER» = 1.

Я попытался следующие:

proc sort data=combined; by ID DESCENDING MOTHER; run; 

proc sort data=combined nodupkeys; by ID; run; 

пока я теряю некоторые из матерей, потому что я остался только с 5458 наблюдений, где «МАМА» = 1. Что я сделал, чтобы ввести эту ошибку?

+0

Вы подтвердили, что у «матерей» есть 5 512 уникальных идентификаторов? – Jeff

+0

Кажется странным УСТАНОВИТЬ два набора данных вместе и ожидать того же количества записей, что и первый набор данных, я бы ожидал слияния вместо SET в вашем объединенном наборе данных. – Reeza

ответ

2

Вместо использования NODUPKEY используйте FIRST./LAST. обработка.

proc sort data=combined; 
    by ID DESCENDING MOTHER; 
run; 

data want; 
    set combined; 
    by ID descending mother; 
    if not (first.ID) and (mother=0) then delete; 
run; 

Это будет держать любой идентификатор, который имел матери = 0 только (держать 1 запись в каждой), а также будет хранить всю мать = 1 строки.

1

Вы проверили, были ли какие-либо дубликаты идентификаторов в наборе данных матерей? Вторая сортировка proc устранила бы эти строки.

Вы можете проверить так:

proc sort data = mothers nodupkey out = mothers_dedup dupout = mothers_dups; 
    by ID; 
run; 

Если mothers_dups содержит более 0 наблюдений, это могло бы объяснить проблему.

+0

Только что проверено - источником проблемы является то, что в наборе данных матерей имеются дубликаты идентификаторов. Однако мне нужно сохранить эти дубликаты, поскольку они соответствуют множественным рождениям. Есть ли способ устранить дубликаты, где «MOTHER» = 0? – user2568648