Объединение нескольких наблюдений в одно, пример 1
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 | * Объединение нескольких наблюдений в одно, пример 1. * Автор: rlevesque@videotron.ca. * Пусть имеется массив данных, подобный этому:. DATA LIST LIST /id(A2) var1(F8) var2(F8) var3(F8). BEGIN DATA. aa 1 1 9 bb 2 2 4 aa 3 6 9 aa 4 7 8 aa 4 7 2 bb 4 8 3 END DATA. LIST. * Задача - добавить новые переменные (var4 и т.д.) и перенести в них значения из повторяющихся наблюдений с одним и тем же идентификатором id. * При этом возможно ограничение числа объединяемых наблюдений с одним идентификатором (наблюдение сверх этого числа отбрасываются). * Решение предполагает, что все содержательные переменные являются числовыми, так что если есть строки, сделайте автоперекодирование (меню Transform - Automatic Recode). SORT CASES BY id. * Пронумеруем наблюдения в пределах каждого ID. DO IF $casenum=1. COMPUTE recno=1. ELSE. COMPUTE recno=(lag(id)=id)*lag(recno)+1. END IF. * Предположим следует объединять не более 3-х наблюдений с одинаковым ID. SELECT IF (recno<4). * В оставшейся части синтаксиса подправьте названия и количество переменных, которые имеются в вашем файле, а также замените 9 на произведение числа ваших переменных на 3. VECTOR v(9F8.0) /data1=var1 TO var3. LOOP #cnt=1 TO 3. COMPUTE v((recno-1)*3+#cnt)=data1(#cnt). END LOOP. AGGREGATE /OUTFILE=* /BREAK=id /v1 TO v9 = SUM(v1 TO v9). |
Related pages
...