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?!").