Чтение файла сложной структуры
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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | Решение SPSS AnswerNet. Код решения: 100000681 ПО: SPSS Base Тема: Файл со сложной структурой наблюдения без идентификатора типа записи Описание: Вопрос. У меня есть файл сложной структуры без обозначения, к какому типу записи относится та или иная строка. Я, впрочем, заранее сообразил обозначить специальной комбинацией символов те строки, с которых начинается новое наблюдение. Есть способ прочесть файл такого типа в SPSS? Ответ. Да, есть. Посмотрите следующий пример программы и измените его так, чтобы он подходил под ваши данные. Тут есть важные соображения. Основное - то, что в файле нет информации о типе записей. Заключение о типе записей возможно сделать на основе следующих признаков: (А) в файле есть способ выделить начало нового наблюдения (в данном случае - символы /// в первых трёх столбцах); (B) в файле есть постоянное число заголовочных записей (одна в данном примере, но можно легко изменить, чтобы допускать большее число записей); (C) Есть одна или несколько подчинённых записей одной и той же структуры. Если существует более одного типа подчинённой записи, считайте, что нам не повезло. ********************************************************************. * Этот пример экспортирует сложный файл данных следующей структуры: * * Новое наблюдение начинается со спец. метки (в данном случае - с ///). * * Первая запись каждого наблюдения - заголовочная, содержит общую информацию об объекте.* * Последующие записи, по три значения в ряд, относятся к этому же объекту. * * Их количество наперёд неизвестно. Задача - сконструировать одну запись в * * файле SPSS на каждое наблюдение * ********************************************************************. INPUT PROGRAM. NUMERIC ID. VECTOR DATA(30). DATA LIST /#S 1-3 (A). /************************/ DO IF (#S = '///'). /* Начинаются данные, относящиеся к новому объекту */ + COMPUTE #COUNT=0. /* Инициализируем счётчик */ + DATA LIST /ID 1-3 H1 TO H10 5-24. /* Читаем заголовочную запись для данного объекта */ + ELSE. /* Это либо заголовочная, либо подчинённая запись */ + COMPUTE #COUNT = #COUNT+1. /* Увеличиваем счётчик */ + LEAVE ID H1 TO H10. /* Сохраняем информацию о заголовочной записи */ + REREAD. /************************/ + DATA LIST /#M1 TO #M3 1-12. /* Читаем подчинённую запись */ + VECTOR #M= #M1 TO #M3. /* Используя векторы, */ + Compute #Offset = (#COUNT-1)*3. /* формируем цикл для распределения */ + LOOP #X=1 to 3. /* информации */ + COMPUTE DATA(#Offset +#X) = #M(#X). /* в соответствующие переменные */ + END LOOP. /************************/ END IF. END INPUT PROGRAM. BEGIN DATA. /// 001 11121314151617181910 111 112 113 121 122 123 131 132 133 141 142 143 151 152 153 161 162 163 /// 002 21222324252627282920 211 212 213 221 222 223 231 232 233 241 242 243 /// 003 31323334353637383930 311 312 313 321 322 323 331 332 333 341 342 343 351 352 353 361 362 363 371 372 373 381 382 383 391 392 393 301 302 303 END DATA. SELECT IF (NOT (SYSMIS(ID))). AGGREGATE OUTFILE= * / BREAK = ID / HEADER1 TO HEADER10 = FIRST(H1 TO H10) / DATA1 TO DATA30 = MAX ( DATA1 TO DATA30). FORMATS ALL (F3.0). LIST. *Примерная выдача SPSS: THE VARIABLES ARE LISTED IN THE FOLLOWING ORDER: LINE 1: ID HEADER1 HEADER2 HEADER3 HEADER4 HEADER5 HEADER6 HEADER7 HEADER8 HEADER9 HEADER10 DATA1 DATA2 DATA3 DATA4 DATA5 DATA6 LINE 2: DATA7 DATA8 DATA9 DATA10 DATA11 DATA12 DATA13 DATA14 DATA15 DATA16 DATA17 DATA18 DATA19 DATA20 DATA21 DATA22 DATA23 LINE 3: DATA24 DATA25 DATA26 DATA27 DATA28 DATA29 DATA30 ID: 1 11 12 13 14 15 16 17 18 19 10 111 112 113 121 122 123 DATA7: 131 132 133 141 142 143 151 152 153 161 162 163 . . . . . DATA24: . . . . . . . ID: 2 21 22 23 24 25 26 27 28 29 20 211 212 213 221 222 223 DATA7: 231 232 233 241 242 243 . . . . . . . . . . . DATA24: . . . . . . . ID: 3 31 32 33 34 35 36 37 38 39 30 311 312 313 321 322 323 DATA7: 331 332 333 341 342 343 351 352 353 361 362 363 371 372 373 381 382 DATA24: 383 391 392 393 301 302 303 Number of cases read: 3 Number of cases listed: 3 |