Заполнение пропусков значениями из предыдущих строк с учётом ID
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 63 64 65 66 67 68 69 70 | * Заполнение пропусков значениями из строк с тем же ID. *(Вопрос) Предположим, данные выглядят следующим образом. Переменная PAR_ID - код родителя, переменная CH_ID - код ребенка. Но переменная CH_ID, заканчивающаяся на 00, означает, что эта запись целиком о родителе. PAR_ID CH_ID VAR1 VAR2 X001 X00100 2 1 X001 X00102 . . X001 X00103 . . X002 X00200 1 . X002 X00201 . . X003 X00300 3 2 X003 X00302 . . X003 X00303 . . Мне интересно, нет ли у кого скрипта, или модификации скрипта FillInTheGaps (см. выше в списке), который бы приписал записям детей данные их родителей (в переменные VAR1 и VAR2), но не приписывал бы детям данные чужих родителей. Например, детям X00102, X00103 следует в переменную VAR2 записать значение 1 (от родителя X001), но для X00201 записывать это значение уже не надо, т.к. это ребенок другого родителя, к которому предыдущие данные не имеют отношения. Исправленный набор данных должен выглядеть следующим образом: PAR_ID CH_ID VAR1 VAR2 X001 X00100 2 1 X001 X00102 2 1 X001 X00103 2 1 X002 X00200 1 . X002 X00201 1 . X003 X00300 3 2 X003 X00302 3 2 X003 X00303 3 2 * (Ответ) Размещен в новостной группе 18.02.2002. Автор: Ray. * Введем в SPSS пример данных, приведённый выше. DATA LIST LIST /PAR_ID (A4) CH_ID(A6) VAR1 VAR2 (2F8.0). BEGIN DATA X001 X00100 2 1 X001 X00102 . . X001 X00103 . . X002 X00200 1 . X002 X00201 . . X003 X00300 3 2 X003 X00302 . . X003 X00303 . . END DATA. LIST. SET ERRORS=no. DO IF $CASENUM>1. DO IF par_id = LAG(par_id). DO REPEAT v=ch_id TO var2. * Следующие 2 строчки предназначены для обработки переменных разных типов: * строковых и числовых. Если переменная, для которой заменяются значения, * числовая, первая строка дает ошибку, но срабатывает вторая. Если переменная строковая, * то наоборот. Вывод сообщений об ошибках временно отключен. IF LEN(RTRIM(v))=0 v=LAG(v). IF MISSING(v) v=LAG(v). END REPEAT PRINT. END IF. END IF. SET ERRORS=yes. LIST. |
Related pages
...