2014-02-14 4 views
1

Как удалить дубликаты в шаге данных SAS.как удалить дубликаты на этапе SAS шаг

data uscpi; 
     input year month cpi; 
    datalines; 
    1990 6 129.9 
    1990 7 130.4 
    1990 8 131.6 
    1990 9 132.7 
    1991 4 135.2 
    1991 5 135.6 
    1991 6 136.0 
    1991 7 136.2 
    ; 
    run; 

PROC SORT DATA = uscpi OUT = uscpi_dist NODUPKEY; 
BY year ; 
RUN; 

Я могу с proc шагом, но как удалить его на шаге данных. Заранее спасибо

+1

Вот способ сделать это с хэш-объектов: http://stackoverflow.com/a/5705176/17743 – cmjohns

+0

Какие из них вы хотите держать? Просто делать это на «год» будет случайным образом удалять записи. Я не думаю, что это то, что вы хотите? – Victor

ответ

6

Вы можете использовать автоматические переменные first. & last., созданные SAS при использовании обработки by-group. Они дают больше контроля над тем, какую строку вы считаете дублирующей. Пожалуйста, прочитайте инструкцию по understand by group processing in a Data Step

data uscpi_dedupedByYear; 
set uscpi_sorted; 
by year; 
if first.year; /*only keep the first occurence of each distinct year. */ 
/*if last.year; */ /*only keep the last occurence of each distinct year*/ 

run; 

Многое зависит от того, кто сортируется ваш входной набор данных. Например: если ваш входной набор данных отсортирован по году & месяца, и вы используете if first.year;, то вы можете видеть, что он хранит только самый ранний месяц в любой год. Однако, если ваш набор данных отсортирован по year & descending month, то if first.year; сохраняет в прошлом месяце в любом году.

Это поведение явно отличается от того, как работает nodupkey.

+0

Благодарим вас за ответ. – santosh315345

-1

Вы можете установить флаг и дель которые имеют 0.

data nodupsdataset; 
set work.sorteddataset; 
by store_nbr; 
if first.store_nbr 
then flag = 1; 
else 
flag=0; 
if flag=0 then delete; 

run; 
Смежные вопросы