Как дедуплицировать наблюдения, сохраняя при этом наибольшее количество информации в SAS - PullRequest
0 голосов
/ 22 февраля 2019

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

   A          B        C      D  
 Entry 1   Florida     .     54
 Entry 1      .        .     54
 Entry 1   Florida     .     54
 Entry 1   Florida    New     .
 Entry 1   Florida    New    54

Как вы заметите, столбец A всегда заполняется.Я хочу дедуплицировать их, чтобы я возвращал только

    A         B        C       D
  Entry 1   Florida    New       54

Любые предложения о том, как это сделать в SAS?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Предположим, что в этом случае вся информация имеет одинаковый вес, и ваш первичный ключ - A. Мы посчитаем количество пропущенных значений для A и оставим только строку с наименьшим количеством пропущенных значений.Строка с наименьшим количеством пропущенных значений дает максимальный объем информации для каждого значения первичного ключа A.

proc sort data=have;
    by A;
run;

data count_info;
    set have;
    by A;

    info_count = cmiss(of _ALL_);
run;

proc sort data=count_info;
    by A info_count;
run;

data want;
    set count_info;
    by A info_count;

    if(first.A);
run;
0 голосов
/ 23 февраля 2019

Это даст последнее не пропущенное значение для каждого уровня A.

data have;
   input (A  B  C)(&$) D;
   cards; 
 Entry 1   Florida     .     54
 Entry 1      .        .     54
 Entry 1   Florida     .     54
 Entry 1   Florida    New     .
 Entry 1   Florida    New    54
 ;;;;
   run;
proc print;
   run;
data want;
   update have(obs=0) have;
   by a;
   run;
proc print;
   run;

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...