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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
* (Вопрос) Как добавить сноску внизу каждой таблицы, которая бы содержала число наблюдений, принятых к обработке (действительных наблюдений, valid cases)?

* (Ответ) Размещён в SPSSX-L. Автор: rlevesque@videotron.ca, 04.01.2002.

******************************.
* Сначала «простое» решение.
******************************.

SET MPRINT=ON.

DATA LIST LIST /id(F8) var1(F8).
BEGIN DATA.
1 10
2 15 
3 10 
4 20
5 25
6 15
7 25
8  
9  
END DATA.
LIST.

SAVE OUTFILE='c:\\temp\\data.sav'.

COMPUTE nvalid=(NMISS(var1)=0).
COMPUTE aggrv = 1 .
AGGREGATE
  /OUTFILE*
  /BREAK=nvalid
  /aggrv_1 = SUM(aggrv).

DO IF nvalid=1.
WRITE OUTFILE 'c:\\temp\\data.sps'
  /"DEFINE !sum_1()'Число действительных наблюдений ="aggrv_1"'!ENDDEFINE.".
END IF.
EXE.

GET FILE='c:\\temp\\data.sav'.
INCLUDE 'c:\\temp\\data.sps'.

 *General Tables.
  TABLES
  /FORMAT BLANK MISSING('.')
  /GBASE=CASES
  /FTOTAL= $t000001 "Total"
  /TABLE=var1 + $t000001  BY (STATISTICS)
  /STATISTICS
  count( var1( F5.0 ))
  cpct( var1( PCT5.1 ) 'Col %')
  /SORT=D var1
  /caption=!sum_1 .

***END OF JOB.

**################.
Следующий вариант – обобщение (почти тот же синтаксис, но оформленный как макрос).
**################.

DATA LIST LIST /id(F8) var1(F8) var22(F8).
BEGIN DATA.
1 10 1
2 15 2 
3 10 4 
4 20 .
5 25 5
6 15 4
7 25 .
8 .  5
9 . . 
END DATA.
LIST.

SAVE OUTFILE='c:\\temp\\data.sav'.

*/////////////////.
* Первый параметр namemac нужен для того, чтобы дать имя макросу, который будет содержать нужную подпись. – А.Б.
DEFINE !getval(namemac=!TOKENS(1)
	/vars=!CMDEND)
COMPUTE nvalid=(NMISS(!vars)=0).
COMPUTE aggrv = 1 .
AGGREGATE
  /OUTFILE*
  /BREAK=nvalid
  /aggrv_1 = SUM(aggrv).

DO IF nvalid=1.
!LET !tmp=!QUOTE(!CONCAT('DEFINE !',!namemac,'()'))
WRITE OUTFILE 'c:\\temp\\data.sps'
  /!tmp "'Число действительных наблюдений ="aggrv_1"'!ENDDEFINE.".
END IF.
EXE.

GET FILE='c:\\temp\\data.sav'.
INCLUDE FILE='c:\\temp\\data.sps'.
!ENDDEFINE.
*/////////////////.


*******************.
*** Пример 1 *****.
*******************.

GET FILE='c:\\temp\\data.sav'.
* Вызовем макрос, который создаст ещё один макрос nb1, который будет содержать подпись.
!getval namemac=nb1 vars=var1.
* Загрузим файл данных заново.
GET FILE='c:\\temp\\data.sav'.

  TABLES
  /FORMAT BLANK MISSING('.')
  /GBASE=CASES
  /FTOTAL= $t000001 "Итого"
  /TABLE=var1 + $t000001  BY (STATISTICS)
  /STATISTICS
  count( var1( F5.0 ) 'Частота')
  cpct( var1( PCT5.1 ) '% по столбцу')
  /SORT=D var1
  /caption=!nb1.


*******************.
*** Пример 2 *****.
*******************.


GET FILE='c:\\temp\\data.sav'.
* Вызовем макрос, который создаст подпись с числом действительных наблюдений одновременно для переменных var1 и var22.
!getval namemac=nb2 vars=var1,var22.
* Загрузим файл данных заново.
GET FILE='c:\\temp\\data.sav'.

  TABLES
  /FORMAT BLANK MISSING('.')
  /GBASE=CASES
  /FTOTAL= $t000001 "Итого"
  /TABLE=var1 + $t000001  BY (STATISTICS)
  /STATISTICS
  count( var1( F5.0 ) 'Частота') 
  cpct( var1( PCT5.1 ) '% по столбцу')
  /SORT=D var1
  /caption=!nb2.

* Разумеется, команда TABLES может быть заменена любой подходящей командой.