«Уплотнение» данных множественного ответа за счёт удаления «пустых» переменных
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 | * "Уплотнение" данных множественного ответа за счёт удаления "пустых" переменных. Решение AnswerNet 100006487 ВОПРОС: Имеется массив данных с большим числом пропусков. Например, есть 10 переменных множественного ответа, которые могут быть заполнены в "шахматном порядке". При этом каждый из респондентов в общей сложности использовал максимум 4 из этих 10 переменных. Просто удалить последние переменные нельзя, поскольку ответы могут содержаться, например, в первой, пятой и десятой переменных. Требуется "уплотнить" данные так, чтобы все ответы находились в первых 4 переменных. Как это сделать? ОТВЕТ: Решить эту задачу можно и без преобразования данных, но здесь показан вариант решения с преобразованием. Сначала данные "вытягиваются" в длинный столбец за счёт того, что каждое наблюдение становится десятью наблюдениями (по числу переменных множественного ответа). Затем удаляются пропущенные наблюдения. Затем данные возвращаются к нормальному виду, но занимают теперь максимум 4 переменные. Попробуйте выполнить пример синтаксиса и увидите, что именно он делает. Решение от 29.04.1999. * Пример данных *. DATA LIST /x1 TO x10 1-10. BEGIN DATA 1 4 6 3 5 2 2 1 1 3 2 468 359 1 END DATA. LIST. * Пронумеруем наблюдения *. COMPUTE id = $CASENUM. * Переструктурируем из десяти переменных в одну *. VECTOR x = x1 TO x10. LOOP rec = 1 TO 10. COMPUTE y = x(rec). XSAVE OUTFILE = 'tmp.sav' /KEEP id rec y. END LOOP. EXECUTE. GET FILE 'tmp.sav'. LIST. * Уберём пустые наблюдения и перенумеруем их по-новому в пределах каждого ID *. SELECT IF NOT(SYSMIS(y)). COMPUTE rec = 1. IF (id = LAG(ID)) rec = LAG(rec) + 1. LIST. * Переструктурируем из одной переменной в четыре *. VECTOR x(4). COMPUTE x(rec) = y. AGGREGATE OUTFILE = * /BREAK id /x1 TO x4 = MAX(x1 TO x4). LIST. * ГОТОВО! *. |