Устранить дубликаты, сохранив максимум информации
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | * Устранить дубликаты, сохранив максимум информации. *(ВОПРОС) Здравствуйте. Имеется массив данных такого вида: 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. |