*(Вопрос) Я пытаюсь прочитать ASCII-файл, содержащий для каждого наблюдения от 4 до 11 записей. Первые 4 записи содержат ответы на закрытые вопросы, а следующие 7 записей (если они есть), содержат текстовые строки (ответы с вариантом "другое"). Хотя число записей на одно наблюдение может варьироваться, каждая запись содержит в начале идентификатор наблюдения (примерно так, как показано).... 0000001 1 2 3 12 13 12 0000001 2 2 3 09 08 01 0000001 1 1 2 06 14 22 0000001 1 4 7 09 0000002 1 2 3 01 10 11 0000002 3 1 2 01 09 02 0000002 1 1 3 07 15 20 0000002 1 2 1 12 0000002 текст1 0000002 текст 0000002 текст3 0000002 текст4 *(Ответ) Размещён в SPSSX-L 6.11.2001, автор: rlevesque@videotron.ca. * http://www.spsstools.net. NEW FILE. INPUT PROGRAM. STRING mytext(A40). * читаем строку данных в предположении, что она не содержит текста. DATA LIST LIST /id ans1 TO ans6. DO IF MISSING(ans1) & (id=LAG(id)). * Уп-с, наткнулись на текст. Перечитываем эту строчку данных особым порядком. REREAD. DATA LIST LIST /id mytext. END IF. END CASE. END INPUT PROGRAM. BEGIN DATA 0000001 1 2 3 12 13 12 0000001 2 2 3 09 08 01 0000001 1 1 2 06 14 22 0000001 1 4 7 09 0000002 1 2 3 01 10 11 0000002 3 1 2 01 09 02 0000002 1 1 3 07 15 20 0000002 1 2 1 12 0000002 текст1 0000002 текст2 0000002 текст3 0000002 текст4 END DATA. LIST. COMPUTE casenb=$CASENUM. RANK VARIABLES=casenb BY id /RANK INTO recno. VECTOR text(4A40) /ans=ans1 TO ans6 /answ(24F8.0). DO IF recno<5. LOOP cnt=1 TO 6. COMPUTE #idx=cnt + (recno-1) * 6. COMPUTE answ(#idx)=ans(cnt). END LOOP. ELSE. COMPUTE text(recno - 4)=mytext. END IF. EXECUTE. AGGREGATE /OUTFILE=* /BREAK=id /answ1 TO answ22= FIRST(answ1 TO answ22) /text1 TO text4 = MAX(text1 TO text4).