'Источник: 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 'Конец скрипта