Словари данных и частотные распределения из множества .sav-файлов в папке — в Excel
Этот код Python интегрирован в синтаксис SPSS.
Что он делает?
Он определяет, в какой папке находится текущий файл синтаксиса, делает эту папку рабочей, и начинает открывать все .sav-файлы в этой папке по очереди. Для каждого файла он выполняет команду DISPLAY DICTIONARY и сохраняет ее выдачу на лист Dict в Excel-файл, расположенный в этой же папке.
Затем с помощью процедуры Custom Tables он строит частотные таблицы для всех переменных в файле и тоже выводит их в Excel, на лист Ctab. Затем файл данных закрывается и цикл повторяется.
NB! Существующий Excel-файл удаляется перед началом работы (по умолчанию это output.xlsx).
NB! Частотные таблицы строятся с помощью Custom Tables, если вы хотите оставить синтаксис как есть, вам нужен модуль Custom Tables.
Автор - Антон Митюшин, mitanton@yandex.ru.
1 2 3 4 5 6 7 8 | * Encoding: UTF-8. SET OVARS=BOTH ONUMBERS=BOTH TVARS=BOTH TNUMBERS=BOTH. SET PRINTBACK ON. SET UNICODE ON. OUTPUT CLOSE ALL. BEGIN PROGRAM Python3. |
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 | import os import spss, SpssClient mask=".sav" output_filename = "output" # Укажите желаемое имя выходного Excel-файла def Ctab (): """ Данная функция строит синтаксис процедуры Custom Tables """ nl="\n" tb=" "*4 varsForProc = "" varsForTables = "" tblCat="[C][COUNT F40.0, UCOUNT F40.0, COLPCT.COUNT PCT40.1, COLPCT.VALIDN PCT40.1]+" for i in range(spss.GetVariableCount()): varsForProc+=(tb*3)+spss.GetVariableName(i)+nl varsForTables+=(tb*3)+spss.GetVariableName(i)+tblCat+nl varsForTables=varsForTables.replace(nl+tblCat+nl,nl+"") varsForTables=varsForTables[:len(varsForTables)-2] ct="CTABLES" + nl + \ "/TABLE" + nl + \ varsForTables + nl + \ "/CATEGORIES VARIABLES=" + nl + \ varsForProc + nl + \ "[OTHERNM, MISSING] EMPTY=INCLUDE TOTAL=YES POSITION=AFTER." return ct def treatFolder (path, ext, func): """ Данная функция перебирает все .sav-файлы в папке и для каждого вызывает функцию с синтаксисом. Обратите внимание, функция с синтаксисом SpssCmd передается сюда как параметр. """ files = sorted(os.listdir(path)) for file in files: if file.endswith(ext): func(file) def SpssCmd(file): """ Эта функция управляет содержанием и порядком выполнения синтаксиса для каждого файла данных. В ней также используется фрагмент синтаксиса, возвращаемый процедурой Ctab. """ spss.Submit("GET FILE = '" + file + "'.") spss.Submit("OUTPUT NEW NAME=Dict.") spss.Submit("DISPLAY DICTIONARY.") spss.Submit("OUTPUT EXPORT /XLSX DOCUMENTFILE='%s.xlsx' OPERATION=MODIFYSHEET SHEET='Dict'." % output_filename) spss.Submit("OUTPUT CLOSE *.") spss.Submit("OUTPUT NEW NAME=Ctab.") spss.Submit(Ctab()) spss.Submit("OUTPUT EXPORT /XLSX DOCUMENTFILE='%s.xlsx' OPERATION=MODIFYSHEET SHEET='Ctab' LOCATION=LASTROW." % output_filename) spss.Submit("OUTPUT CLOSE *.") spss.Submit("DATASET CLOSE *.") # Выше мы просто определили нужные функции. Непосредственно они начинают выполняться здесь. SpssClient.StartClient() sDoc = SpssClient.GetDesignatedSyntaxDoc() filePath=sDoc.GetDocumentPath() # Тут получаем папку, где располагается текущий файл синтаксиса spss.Submit("CD '"+filePath+"'.") # ... делаем эту папку рабочей spss.Submit("HOST COMMAND = 'DEL %s.xlsx'." % output_filename) # Удаляем Excel-файл, если он существует path=os.path.dirname(filePath) treatFolder(path, mask, SpssCmd) SpssClient.StopClient() |
77 | END PROGRAM.
|
Related pages
...