* Устранить дубликаты, сохранив максимум информации.
*(ВОПРОС) Здравствуйте. Имеется массив данных такого вида:
ID LastName FirstName Gender
123 Google A F
123 Google F
123 F
124 Robin Justin M
124 Robin Justin
333 Excite John
333 M
То есть, имеются дублирующие друг друга записи, при этом в некоторых из них имеются
пропуски в данных. Меня интересует вопрос, как избавиться от дубликатов, при этом
"не выплеснув с водой ребёнка", то есть, не выкинув наблюдения с полной информацией.
И, возможно, более сложная задача - собрать из разрозненных данных по одному и тому же
ID максимально полную информацию (как в случае с ID 333).
То есть, требуется получить в итоге файл такого вида:
ID LastName FirstName Gender
123 Google A F
124 Robin Justin M
333 Excite John M
*(ОТВЕТ) Размещён в SPSSX-L 16.01.2002, автор: rlevesque@videotron.ca.
* Посетите мой сайт, посвящённый SPSS http://www.spsstools.net
*** NB! Всегда работайте с КОПИЕЙ исходного файла данных!.
DATA LIST FIXED /id 1-3(F) lastname 4-9(A) firstnam 10-15(A) gender 16-16 (A).
BEGIN DATA
123GoogleA F
123Google F
123 F
124Robin JustinM
124Robin Justin
333ExciteJohn
333 John M
END DATA.
LIST.
SORT CASES BY id.
DO IF $CASENUM>1.
PRESERVE.
SET ERRORS=no.
DO REPEAT varname=ALL.
* В зависимости от того, буде ли очередная переменная строковой или числовой,
одна из следующих двух строк будет давать ошибку. Но зато другая будет делать то,
что нужно. Ошибки мы скрываем (команда set errors=no выше).
IF id=LAG(id) And RTRIM(varname)="" varname=LAG(varname).
IF id=LAG(id) And MISSING(varname) varname=LAG(varname).
END REPEAT PRINT.
END IF.
RESTORE.
* После выполнения синтаксиса, приведённого выше, последнее наблюдение
для каждого ID содержит всю доступную по этому ID информацию.
Оставляем только его.
MATCH FILES FILE=* /BY id /LAST=last.
SELECT IF last.
LIST.