Использование шаблонного DATA LIST, который находится вне основного синтаксиса
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 | *(Вопрос) Имеются несколько файлов данных в формате ASCII, заданных через дескрипторы (посредством инструкции FILE HANDLE). Мне требуется путём использования INCLUDE задать каждому из них одну и ту же структуру (таблицу данных) при импорте в SPSS. Т.е. логично, если б это выглядело как-то так, например: file handle show1 /name='c:\\temp\\file1.txt'. include file='c:\\temp\\data_list.sps'. *тут вставляются разные процедуры обработки. file handle show2 /name='c:\\temp\\file2.txt'. include file='c:\\temp\\data_list.sps'. *Приведённые выше команды, разумеется, не работают, т.к. команде DATA LIST из файла data_list.sps нужно каждый раз явно указывать, к какому файлу применять действие этой команды. Например, DATA LIST FILE=SHOW. Это работает. Но data_list.sps с командой DATA LIST - это стандартный файл у нас на работе, и изменять его я не могу. * (Ответ) Автор: rlevesque@videotron.ca, 22.12.2001. * Запишем для примера первый файл данных. DATA LIST /str 1-4(A). BEGIN DATA 1 1 1 2 1 3 END DATA. WRITE OUTFILE='c:\\temp\\file1.txt' /str. EXECUTE. * Запишем для примера второй файл данных. DATA LIST /str 1-4(A). BEGIN DATA 2 1 2 2 2 3 END DATA. WRITE OUTFILE='c:\\temp\\file2.txt' /str. EXECUTE. * Запишем пример стандартной таблицы данных (инструкция DATA LIST). DATA LIST /str 1-80(A). BEGIN DATA * Это комментарий. DATA LIST LIST /filenb casenb. * Ещё один комментарий. COMPUTE casenb=casenb*2. END DATA. WRITE OUTFILE='c:\\temp\\data_list.sps' /str. EXECUTE. SET MPRINT=no. */////////////////////. DEFINE !doit (fname=!TOKENS(1) /fpath=!TOKENS(1)) /* Читаем файл с таблицей данных */ DATA LIST FIXED FILE='c:\\temp\\data_list.sps' /line 1-80(A). LIST. * "Перезаписываем" файл "data list.sps", вставляя в инструкцию DATA LIST имя нужного файла. DO IF $CASENUM=1. WRITE OUTFILE='c:\\temp\\syntax.sps' /'FILE HANDLE ' !QUOTE(!fname) ' /NAME=' !QUOTE(!fpath) '.'. END IF. DO IF UPCASE(SUBSTR(line,1,9))='DATA LIST'. STRING newline(A80). COMPUTE newline=CONCAT('DATA LIST FILE=',!QUOTE(!fname),SUBSTR(line,10)). WRITE OUTFILE='c:\\temp\\syntax.sps' /newline. ELSE. WRITE OUTFILE='c:\\temp\\syntax.sps' /line. END IF. EXECUTE. INCLUDE FILE='c:\\temp\\syntax.sps'. /* тут можно поместить какие-то процедуры */. EXECUTE. !ENDDEFINE. *//////////////////. SET MPRINT=yes. !doit fname=show fpath='c:\\temp\\file1.txt'. !doit fname=show2 fpath='c:\\temp\\file2.txt'. |