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