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'.