Замена пропусков средним значением с дополнительными условиями
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 | * Замена пропусков при выполнении дополнительных условий. * ВОПРОС. Необходимо заменить пропущенные значения в 20 переменных: bdifu1 - bdifu20 средними значениями по респондентам соответствующего пола (sex). Но сделать это нужно лишь в том случае, если соответствующее значение переменной bmiss не превосходит 20. * Автор ответа: rlevesque@videotron.ca. * Создадим пример данных для демонстрации решения. NEW file. INPUT PROGRAM. SET SEED=7654321. VECTOR bdifu(20F8.3). LOOP id=1 TO 50. LEAVE id. * около 50% значений переменной bmiss будут менее 20 единиц. COMPUTE bmiss=UNIFORM(40). COMPUTE sex=(UNIFORM(1)<.5). LOOP #id=1 TO 20. * около 10% значений переменных bdiful будут пропущенными значениями. IF (UNIFORM(1)<.9) bdifu(#id)=TRUNC(UNIFORM(5)+.5). END LOOP. END CASE. END LOOP. END FILE. END INPUT PROGRAM. EXECUTE. * Начало решения. SORT CASES BY sex. aggregate outfile=bdifu.sav /presorted /break=sex /mbdifu1 to mbdifu20=mean(bdifu1 to bdifu20). match files file= * /table=bdifu.sav /by sex. do if (bmiss lt 20). + do repeat orig = bdifu1 to bdifu20 /copy=mbdifu1 to mbdifu20. + if (missing (orig)) orig=copy. + end repeat. end if. EXECUTE. |
Related pages
...