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
'Источник:  SPSS AnswerNet

'Код решения:  100006745
'Разбиение окна результатов на небольшие файлы

'Вопрос. Я использую SPSS For Windows 8.0. Мне приходится регулярно запускать несколько файлов синтаксиса
'(иногда - с использованием Production Mode). Все результаты помещаются в один и тот же файл (окно результатов)
'который становится невообразимо большого размера. Есть способы разбить выдачу на несколько небольших файлов?

'Ответ. Да. В конец каждого файла синтаксиса вы можете вставить вызов скрипта,
'который заставит SPSS сохранять содержимое окна результатов. Вам потребуется
'для каждого файла результатов заранее указать его имя (и, если хотите, путь). Просто сохраните
'обозначенную часть этого файла в файл скрипта (.SBS) и вызывайте этот скрипт из файла
'синтаксиса, как показано в примере ниже. Если синтаксис и вызываемый им скрипт находятся в одной
'директории, полный путь к скрипту можно не указывать, хотя в примере он и указан. Чаще придётся указывать
'полный путь к сохраняемому файлу результатов (.SPO), иначе, если вы этого не сделаете,
'файл будет записан в директорию SPSS.

'Как вариант - при использовании Production Mode с множеством файлов синтаксиса
'можно в конце каждого файла вызывать скрипт с именем файла в качестве аргумента,
'таким же как вызывающий файл синтаксиса, но только с расширением .SPO.

'Вам может потребоваться не только сохранить результаы, но и распечатать их. Найдите в коде скрипта
'следующую пару строк:

'Можете удалить символ комментария ' со следующей строки, чтобы распечатать результаты:
'objOutputDoc.PrintDoc 

'Если вы последуете инструкции и снимете комментарий в начале второй строки,
'ваши результаты будут не только сохранены в файлы, но и распечатаны.

'***** Сохраните этот кусок в файл синтаксиса "SaveClose.SPS" *****.

'*Пример использования скрипта для сохранения результатов с указанным именем.
'*Добавтье команду SCRIPT в конец каждого файла синтаксиса.
'*Можно использовать с SPSS Production job чтобы сохранять разные по смыслу результаты в разные файлы.

'*Требует наличия SPSS 8.0.

'*Пример синтаксиса... (используйте тут свой собственный синтаксис).

'Get 
'FILE='C:\\Program Files\\SPSS\\Cars.sav'. 
'DESCRIPTIVES 
'VARIABLES=mpg engine horse weight accel Year origin cylinder filter_$ 
'/STATISTICS=MEAN STDDEV MIN MAX . 
'EXECUTE . 

'*Далее синтаксис вызывает скрипт и передаёт ему в качестве параметра имя файла.
'*Скрипт открывает новое окно результатов и сохраняет ранее полученные результаты.

'SCRIPT file="c:\\program files\\spss\\scripts\\SaveClose.sbs" '/("SaveClose.spo") . 

'***** Конец примера синтаксиса *****.

'Сохраните этот кусок в файл скрипта "SaveClose.SBS"

'Описание
'Этот скрипт демонстрирует работу с аргументом, переданным ему из синтаксиса при вызове командой SCRIPT.
'Чтобы запустить этот синтаксис, откройте файл 'SaveClose.sps' и выполните синтаксис.
'Скрипт сохраняет рабочее окно результатов с именем файла, указанным в качестве аргумента в директорию SPSS.
'Требования: скрипт должен быть запущен из синтаксиса 'SaveClose.sps'.

Option Explicit 

Sub Main 
'ограничим максимальное число открытых окон
'Const MAX_WINDOWS As Integer = 10 
'Следующий объект будем использовать для сохранения открытого окна результатов
'и создания нового окна
Dim objOutputDoc As ISpssOutputDoc 
Dim strParam As String 

Dim i As Integer 
Dim objDocuments As ISpssDocuments 

Set objDocuments = objSpssApp.Documents 

strParam = objSpssApp.ScriptParameter(0) 
If objDocuments.OutputDocCount > 0 And strParam <> "" Then 
Set objOutputDoc = objSpssApp.GetDesignatedOutputDoc 
'Можете удалить символ комментария ' со следующей строки, чтобы распечатать результаты:
'objOutputDoc.PrintDoc 
'проверим, указал ли пользователь путь
If InStr(strParam, "\\") > 0 Then 
objOutputDoc.SaveAs strParam 
Else 'если путь не указан, используем директорию SPSS
objOutputDoc.SaveAs objSpssApp.GetSPSSPath & strParam 
End If 
End If 

'создаём новое окно и делаем его видимым
'objSpssApp.NewOutputDoc.Visible = True 
'или просто создаём новое окно (например, для Production Mode)
objSpssApp.NewOutputDoc 
'и закрываем старые ...
'но только если оно не является рабочим (designated),
'ну и также возможен контроль на максимальное число открытых окон (параметр MAX_WINDOWS)
'If objDocuments.OutputDocCount < MAX_WINDOWS Then Exit Sub 
For i = objDocuments.OutputDocCount - 1 To 0 Step -1 
Set objOutputDoc = objDocuments.GetOutputDoc(i) 
If Not objOutputDoc.Designated Then 
objOutputDoc.Close 
End If 
Next 
End Sub 

'Конец скрипта