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
'(Вопрос) Возможно ли через синтаксис как-то указывать заголовки для процедуры CROSSTABS?
' Мне еженедельно приходится строить множество таблиц, и мне не очень удобно всякий раз вручную
' переписывать заголовки.


'(Ответ) Я написал скрипт и макрос для модификации заголовков в выдаче.
' Скрипт называется 'title.sbs', а макрос - 'title.sps'. Оба файла должны находиться
' в одной и той же директории (<pathname>). Вы можете получить нужное название с помощью
' следующего синтаксиса:

include '<pathname>\\title.sps'.
CROSSTABS что-то BY что-то ещё.
settitle Это нужный заголовок.
dotitle.
CROSSTABS blabla1 BY blabla2.
settitle Это другой заголовок.
dotitle.


'Размещено: http://www.spsstools.ru/Scripts/PivotTables/DefineCustomizedCrosstabTitles.txt (.sbs).
'Перевод: А. Балабанов, 30.12.2008.
'Проверено: SPSS 15.0.0.

'Скрипт рассчитан на то, что в настройках SPSS отключено эхо командного синтаксиса в окно результатов, т.е.
'подразумевается, что текстовый блок, следующий за построенной таблицей, содержит лишь желаемый заголовок,
'напечатанный командой PRINT. В SPSS 15.0.0. наблюдаются проблемы при попытке использования кириллических
'символов в заголовке (вместо кириллических символов вставляются пробелы) - примеч. перев.

'Скрипт подвержен проблемам, связанным с асинхронностью, так что полезно переписать его таким образом, чтобы
'он анализировал всё окно результатов, и запускать его после окончания всех расчётов - примеч. перев.


Скрипт (сохраните как <pathname>\\title.sbs):

==============================================================
Sub Main()
  Dim objOutputDoc As ISpssOutputDoc
  Dim objItems As ISpssItems
  Dim objItem As ISpssItem
  Dim myindex As Long
  Dim lab As String
  Dim objSPSSText As ISpssrtf
  Dim mytitle As String
  Set objOutputDoc = objSpssApp.GetDesignatedOutputDoc
  Set objItems = objOutputDoc.Items()
  myindex=objItems.Count
  Set objItem = objItems.GetItem(myindex-1)
  Set objSPSSText =objItem.ActivateText
  mytitle=objSPSSText.Text
  objItem.Deactivate
  Do
    myindex=myindex-1
    Set objItem = objItems.GetItem(myindex)
    lab=objItem.Label
  Loop Until lab="Title"
  objItem.Label=mytitle
  Set objSPSSText =objItem.ActivateText
  objSPSSText.Text=mytitle
  objItem.Deactivate
  objItem.Selected=False
  Set objItem = objItems.GetItem(objItems.Count-1)
  objItem.Selected=True
  objOutputDoc.Remove
End Sub
==============================================================


Макрос (<pathname>\\title.sps):

==============================================================
define settitle (!POSITIONAL !CMDEND).
Do If $CASENUM EQ 1.
Print /!quote(!1).
End If.
Execute.
!ENDDEFINE.

define dotitle().
script '<укажите здесь путь к файлу>\\title.sbs' .
!ENDDEFINE.
==============================================================



Надеюсь, это поможет.

Oliver Loch


----------------------------------------------------------------------------
Dipl. Stat. Oliver Loch
German AIDS Study Group              Phone:  +49 89 5160 3457
Med. Poliklinik der LMU              Fax:    +49 89 5160 3593
Pettenkoferstr. 8a                   e-mail:
loch@pk-i.med.uni-muenchen.de
D-80336 Muenchen
----------------------------------------------------------------------------