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
' Определение для каждой переменной макроса, который содержит метку этой переменной
' Автор: Raynald Levesque, 21.06.2000, rlevesque@videotron.ca

' Условия		: в редакторе данных открыт набор данных
' Результаты	: для каждой переменной, чьё имя включает до 8 символов, создаётся макрос с именем,
'				  состоящим из знака "!" и имени самой переменной (например, для
'				  переменной qtop1 макрос будет именоваться как !qtop1)
'				  Выполнение макроса !qtop1 будет эквивалентно подставлению в соответствующее
'				  место синтаксиса метки переменной qtop1.
' Инструкции	: Выполните этот скрипт, после чего добавьте в начало вашего файла синтаксиса
'				  следующую строку (возможно, потребуется изменить путь):
'				  INCLUDE "c:\\temp\\variable label macro.sps"
'				  Этим вы загрузите соответствующие макросы в память SPSS, они будут готовы к исполнению.
'				  Эта возможность удобна, например, для распечатки меток переменных в
'				  заголовках (см. подкоманды TITLE) таблиц или графиков.

'Желательные усовершенствования: при формировании макроса для переменных с именами в 8 символов скрипт
'должен заменять на символ "!" первый или последний символ имени (по выбору пользователя).
' Для современных версий SPSS желательным является усовершенствование по работе с именами, длиннее, чем 8 символов - примеч. перев.

' Перевод: А. Балабанов, 14.11.2008.
' Проверено: SPSS 15.0.0.


Option Explicit
Sub Main
Dim objSPSSInfo As ISpssInfo,ValueLabels()
Dim NumVars As Long,I As Long,J As Long, VarName As String, VarLabel As String
 
Set objSPSSInfo = objSpssApp.SpssInfo
NumVars=objSPSSInfo.NumVariables-1
Open "c:\\temp\\variable label macro.sps" For Output As #1

For I=0 To NumVars
	  VarName= objSPSSInfo.VariableAt(I)
      If Len(VarName)<8 Then
            VarLabel= objSPSSInfo.VariableLabelAt(I)
			If Len(varlabel)=0 Then 
              	varlabel=varname
            End If
    	    Print #1, "DEFINE !" & Varname & "() " & VarLabel & " !ENDDEFINE."
      End If
Next I
Close #1
End Sub