Замена пропусков случайными значениями той же переменной
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 | * Знает ли кто-нибудь способ заменить пропущенные значения случайно отобранными значениями из валидной части выборки? Например, если наблюдение №X содержит пропущенное значение по переменной var1, я бы хотел случайным образом отобрать другое наблюдение из той же переменной среди имеющих валидные значения, и заменить им пропуск. Так я хотел бы поступить со всеми пропущенными значениями в данной переменной. > Заранее благодарен! > -- > Jeff Wayman *************************************************** * (файл с примером не прилагается - А.Б.). *****. fre postnum/format notable. *** в некотором файле 17363 наблюдений имеют валидные значения по переменной postnum. if postnum >0 x1=$casenum. execute. *** Используем системную переменную $casenum для сохранения исходной сортировки наблюдений. RANK VARIABLES=x1 (A) /RANK /PRINT=YES /TIES=LOW . ** Создана переменная rx1. if sysmis(postnum) rx1=trunc(1+uniform(17362)). execute. ** сопоставляем пропущенному значению некоторое другое значение на основе ранга. sort cases by rx1(a) x1(d). execute. ** нужным образом отсортировали наблюдения. compute postadd=postnum. *** копируем результат в новую переменную на всякий случай. if sysmis(postadd) postadd=lag(postadd). execute. *Такой вариант работает даже в случае, если рандомизация даёт одинаковые ранги в rx1. *Автор: Smik (из usenet 25.09.1997, ответ на тему "How do I do this?!"). |