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
*ВОПРОС: Как составить синтаксис, который бы исполнял те или иные команды в зависимости
от имени файла данных?

*ОТВЕТ. Автор: rlevesque@videotron.ca. 

*Попробуйте следующий подход:.
set mprint=on.

* Создадим 3 файла данных для примера.
DATA LIST LIST /x1(F8) x2(F8).
BEGIN DATA.
2 1 
1 2 
5 3 
END DATA.
SAVE OUTFILE='C:\\temp\\std_data.sav'.

DATA LIST LIST /y1(F8) y2(F8).
BEGIN DATA.
5 2 
4 3 
4 3 
END DATA.
SAVE OUTFILE='C:\\temp\\XXdata.sav'.

DATA LIST LIST /z1(F8) z2(F8).
BEGIN DATA.
8 3 
8 1 
5 2
5 6
END DATA.
SAVE OUTFILE='C:\\temp\\XYdata.sav'.

****** Определим макрос.
DEFINE !doit (filenam=!TOKENS(1))
get file=!QUOTE(!CONCAT('C:\\temp\\',!filenam,'.sav')).

!IF ((!filenam !NE 'XXdata') !AND (!filenam !NE 'XYdata')) !THEN
/*выполняем стандартный анализ (с переменными X1,X2).
FREQ VAR=x1 x2.
!IFEND 

!IF (!filenam !EQ 'XXdata') !THEN
/*выполняем нестандартный анализ (с переменными: Y1,Y2).
FREQ VAR=y1 y2.
!IFEND 

!IF (!filenam !EQ 'XYdata') !THEN
*выполняем нестандартный анализ (с переменными: Z1,Z2).
FREQ VAR=z1 z2.
!IFEND

!ENDDEFINE.

* Вызов макроса.
!doit filenam=std_data.
!doit filenam=XXdata.
!doit filenam=XYdata.