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
146
147
148
149
150
151
152
153
'Экспорт словаря (метаданных) SPSS в текстовый файл.

'Скрипт позволяет экспортировать всю информацию из словаря открытого файла данных SPSS
'в текстовые файлы.

'ТРЕБОВАНИЯ: Файл данных SPSS должен быть открыт в редакторе данных
'
'НАЗНАЧЕНИЕ:
'После использования данного скрипта созданные текстовые файлы вы можете импортировать в
'MS Access или MS Excel.
'Вы можете создать базу данных ваших переменных и их форматов в Access. Это особенно полезно,
'если у вас большие файлы со множеством переменных. Можно создавать специальные отчёты/списки
'переменных по установленному формату (например, кодировочные таблицы).
'
'АВТОРЫ:
'Имя: Jean-Francois Allaire, Исследовательский центр Philippe Pinel Монреаля
'E-Mail: jfallaire@ssss.gouv.qc.ca
'Скрипт объединяет и развивает скрипты, перечисленные ниже.
'Скрипт: Экспорт переменных и меток значений в текстовые файлы.SBS (прислал для публикации на сайте spsstools Wouter Egberink)
'Скрипт: Экспорт имён и меток значений в текстовый файл.SBS (Raynald Levesque)
'Скрипт: Отобразить число переменных и наблюдений в файле данных.SBS (Raynald Levesque)
'
'ДАТА: 18.07.2002
'Перевод: А. Балабанов, 09.11.2008
'Проверено: SPSS 13.0.
'
'РЕЗУЛЬТАТ: Словарь данных сохраняется в 4 текстовых файлах в папке 'C:\\'. См. ниже
'         описание каждого из файлов. Поля в текстовых файлах разделяются символом ";".
'
'ОПИСАНИЕ ТЕКСТОВЫХ ФАЙЛОВ (ПОЛЯ):
'
'Файл:Fileinfo.txt
' ИмяФайлаSPSS ; ЧислоНаблюдений ; ЧислоПеременных
'
'Файл:valuelabel.txt
' ИмяПеременной ; Значение ; МеткаЗначения;
'
'Файл:variablesinfo.txt
' ИмяФайлаSPSS ; ПорядковыйНомерПеременной ; ИмяПеременной ; МеткаПеременной ; ТипПеременной ; ШиринаПеременной ; ШиринаДробнойЧасти ; 
' ЧислоОпределённыхПропущенныхЗначений ; ПропущенноеЗначение1 ; ПропущенноеЗначение2 ; ПропущенноеЗначение3
'
'Файл:Dictionary.txt
' ИмяФайлаSPSS ; ПорядковыйНомерПеременной ; ИмяПеременной ; МеткаПеременной ; ТипПеременной ; ШиринаПеременной ; ШиринаДробнойЧасти ; 
' ЧислоОпределённыхПропущенныхЗначений ; ПропущенноеЗначение1 ; ПропущенноеЗначение2 ; ПропущенноеЗначение3 ; Значение1 ; МеткаЗначения1 ; Значение2 ; МеткаЗначения2;
' Значение3 ; МеткаЗначения3 ; и т.д...
'
'Возвращаемые значения для формата переменных:
'1	SpssPrintFormatA
'2	SpssPrintFormatAhex
'3	SpssPrintFormatComma
'4	SpssPrintFormatDollar
'5	SpssPrintFormatF
'6	SpssPrintFormatIb
'7	SpssPrintFormatPibhex
'8	SpssPrintFormatP
'9	SpssPrintFormatPib
'10	SpssPrintFormatPk
'11	SpssPrintFormatRb
'12	SpssPrintFormatRbhex
'15	SpssPrintFormatZ
'16	SpssPrintFormatN
'17	SpssPrintFormatE
'20	SpssPrintFormatDate
'21	SpssPrintFormatTime
'22	SpssPrintFormatDatetime
'22	SpssPrintFormatDatetime
'23	SpssPrintFormatAdate
'24	SpssPrintFormatJdate
'25	SpssPrintFormatDtime
'26	SpssPrintFormatWkday
'27	SpssPrintFormatMonth
'28	SpssPrintFormatMoyr
'29	SpssPrintFormatQyr
'30	SpssPrintFormatWkyr
'31	SpssPrintFormatPct
'32	SpssPrintFormatDot
'33	SpssPrintFormatCca
'34	SpssPrintFormatCcb
'35	SpssPrintFormatCcc
'36	SpssPrintFormatCcd
'37	SpssPrintFormatCce
'38	SpssPrintFormatEdate
'39	SpssPrintFormatSdate
'*****************************************************************************

Option Explicit
Sub Main
Dim objSPSSInfo As ISpssInfo,ValueLabels()
Dim objDataDoc As ISpssDataDoc
Dim LongValString As String, K As Long,I As Long,J As Long
Dim NumVars As Long             'Число переменных
Dim VarName As String           'Имя переменной
Dim VarLabel As String          'Метка переменной
Dim NumVals As Long             'Число меток значений
Dim ValName As String           'Значение
Dim ValLabel As String          'Метка значения
Dim strDataName As String		'Имя файла данных
Dim lngNumCases As Long			'Число наблюдений
Dim vrtVarType As Variant       'Тип переменной
Dim vrtVarWidth As Variant      'Ширина переменной
Dim vrtVarFract As Variant      'Ширина дробной части переменной
Dim vrtMissingCounts As Variant 'Число определённых пропущенных значений
Dim vrtMissingValues As Variant 'Определённые пропущенные значения

Set objSPSSInfo = objSpssApp.SpssInfo
Set objDataDoc = objSpssApp.Documents.GetDataDoc(0)

strDataName = objDataDoc.GetBannerText  	'Имя файла данных
lngNumCases = objDataDoc.GetNumberOfCases 	'Число наблюдений

objDataDoc.GetVariableFormats(vrtVarType, vrtVarWidth, vrtVarFract) 'Формат переменной
objDataDoc.GetVariableMissingValues(vrtMissingCounts, vrtMissingValues) 'Пропущенные значения

Open "C:\\temp\\variablesinfo.txt" For Output As #1
Open "C:\\temp\\valuelabel.txt" For Output As #2
Open "C:\\temp\\Dictionary.txt" For Output As #3
Open "C:\\temp\\Fileinfo.txt" For Output As #4


NumVars=objSPSSInfo.NumVariables-1

 'Вывод информации о файле
  Print #4, strDataName & ";" & lngNumCases & ";" & NumVars+1

For I=0 To NumVars
  VarName= objSPSSInfo.VariableAt(I)
  VarLabel= objSPSSInfo.VariableLabelAt(I)
  If Len(VarLabel)=0 Then
      VarLabel=VarName
  End If
  'Вывод информации о переменной
  Print #1, strDataName & ";" & I+1 & ";" & VarName & ";" & VarLabel & ";" & vrtVarType(I) & ";" & vrtVarWidth(I) & ";" & vrtVarFract(I)& ";" & vrtMissingCounts(I) & ";" & vrtMissingValues(I, 0) & ";" & vrtMissingValues(I, 1) & ";" & vrtMissingValues(I, 2)
  LongValString = CStr(strDataName) & ";" & CStr(I+1) & ";" & CStr(VarName) & ";" & CStr(VarLabel) & ";" & CStr(vrtVarType(I)) & ";" &  CStr(vrtVarWidth(I)) & ";" & CStr(vrtVarFract(I)) & ";" & CStr(vrtMissingCounts(I)) & ";" & CStr(vrtMissingValues(I,0)) & ";" & CStr(vrtMissingValues(I,1)) & ";" & CStr(vrtMissingValues(I,2))
  NumVals= objSPSSInfo.NumberOfValueLabels(I)-1
  For K=0 To NumVals
      ValName= objSPSSInfo.ValueAt(I,K)
      ValLabel= objSPSSInfo.ValueLabelAt(I,K)
      If Len(ValLabel)=0 Then
           ValLabel=ValName
      End If
      'Вывод информации о метках значений
      Print #2, VarName & ";" & ValName & ";" & ValLabel
      LongValString = LongValString & ";" & CStr(ValName) & ";" & CStr(ValLabel)
  Next K
 'Вывод полной информации о словаре
  Print #3, LongValString
Next I
Set objSPSSInfo = Nothing
Close #1
Close #2
Close #3
Close #4
End Sub