2016-12-13 9 views
0

У меня есть таблица, которая будет загружена в базу данных оракула. Мне нужно удалить повторяющиеся значения без изменения порядка данных. Существует 5 возможных записей для каждой группы. 1. Пустые строки необходимо удалить. 2. Дублированные имена должны быть удалены, поэтому появляются только разные имена. 3. Данные не могут быть переупорядочены.Удаление повторяющихся записей в SAS

1 Commingled Data 
2 Social Security 
3 
4 
5 SSA 1996 
1 Commingled Data 
2 Social Security 
3 
4 
5 SSA 1997 
1 Commingled Data 
2 Social Security 
3 
4 
5 SSA -1998 
1 Commingled Data 
2 Statistical Administrative 
3 
4 
5 StARS 2000 
1 Federal 
2 Treasury 
3 Internal 
4 1099 
5 Master File - TY 1997 (1099/IRMF) 
1 Federal 
2 Treasury 
3 Internal 
4 1099 
5 Master File - TY 1998 (1099/IRMF) 
1 State 
2 Wage 
3 Indiana 
4 
5 Indiana - 1990Q1-2005Q2 
1 Federal 
2 Treasury 
3 Internal 
4 1040 
5 TY 2003 (1040/IMF) 1% File 
1 Federal 
2 Treasury 
3 Internal 
4 1040 
5 TY 2003 (1040/IMF) Cycles 1-39 
+0

Что такое «повторный ряд»? Каков ваш результат? И что вы пытаетесь? – Joe

+0

Повторяемая строка, как правило, строка 1, строка 1 - это сбитые данные, федерация также повторяет строку 2, также повторяется, а иногда и строка 3 тоже. Я пытаюсь использовать функцию first.last, также coalescec и selfjoin и со смещением. – user601828

+0

Можете ли вы: первый шаг => сделать a Выбрать отдельный, чтобы выбрать только отдельные переменные, а затем второй шаг => удалить строку, если все переменные отсутствуют? –

ответ

1

Это прекрасный вариант использования для объекта HASH. Если вы используете multidata:'n' и метод ref, он проверяет, находится ли запись уже в хеш-таблице, а если нет, добавьте ее, но не добавьте дубликаты.

Здесь я добавляю rownum, чтобы иметь возможность вернуться к исходному упорядоченному заказу, так как хеш-таблицы являются бинарными деревьями и не имеют естественного порядка, если вы не навязываете его.

data have; 
input @1 line $50.; 
datalines; 
1 Commingled Data 
2 Social Security 
3 
4 
5 SSA 1996 
1 Commingled Data 
2 Social Security 
3 
4 
5 SSA 1997 
1 Commingled Data 
2 Social Security 
3 
4 
5 SSA -1998 
1 Commingled Data 
2 Statistical Administrative 
3 
4 
5 StARS 2000 
1 Federal 
2 Treasury 
3 Internal 
4 1099 
5 Master File - TY 1997 (1099/IRMF) 
1 Federal 
2 Treasury 
3 Internal 
4 1099 
5 Master File - TY 1998 (1099/IRMF) 
1 State 
2 Wage 
3 Indiana 
4 
5 Indiana - 1990Q1-2005Q2 
1 Federal 
2 Treasury 
3 Internal 
4 1040 
5 TY 2003 (1040/IMF) 1% File 
1 Federal 
2 Treasury 
3 Internal 
4 1040 
5 TY 2003 (1040/IMF) Cycles 1-39 
;;;; 
run; 

data _null_; 
    set have end=eof; 
    rownum = _n_; 
    if _n_=1 then do; 
    declare hash h(ordered:'n', multidata:'n'); 
    h.defineKey('line'); 
    h.defineData('line', 'rownum'); 
    h.defineDone(); 
    end; 
    if not missing(substr(line,3)) then rc = h.ref(); 
    if eof then do; 
    h.output(dataset:'want'); 
    end; 
run; 

proc sort data=want; 
    by rownum; 
run; 
+0

Джо, спасибо! Никто не мог решить эту проблему. Ты удивительный. еще раз спасибо – user601828