'Begin description 'Выделяет значимые уровни в отмеченных SPSS-таблицах жирным или курсивом. '(Программа ищет ярлыки, содержащие "Sig.", среди столбцов таблицы и, если не найдено, среди ярлыков ее рядов.) 'Диалоговое окно позволяет задать, какие уровни помечать как значимые (до двух уровней) и предлагает другие возможности форматирования. ' 'SPSS script by Kirill Orlov 'Version 1, Feb 2002 'kior@comtv.ru; orlovk@ri-vita.ru 'http://ri-vita.ru/consulting/stats/ 'End Description Option Explicit Sub Main Begin Dialog UserDialog 560,154,"Mark Significance Levels in Selected Pivot Tables",.dlgfunc ' %GRID:10,7,1,1 GroupBox 10,7,240,49,"Пометить значимое на уровнях",.GroupBox2 CheckBox 30,28,40,14," <",.CheckBox1 CheckBox 150,28,40,14," <",.CheckBox2 CheckBox 320,63,150,14,"Закрасить ячейку",.CheckBox4 GroupBox 270,7,280,49,"Стиль шрифта, каким помечать",.GroupBox1 OptionGroup .Group1 OptionButton 290,21,250,14,"Жирный (потом жирный курсив)",.OptionButton1 OptionButton 290,35,240,14,"Курсив (потом жирный курсив)",.OptionButton2 OKButton 450,84,90,21 CancelButton 450,105,90,21 CheckBox 20,63,230,14,"Заменить незначимое на ""ns""",.CheckBox3 GroupBox 10,105,350,35,"Если в таблице несколько столбцов/рядов ""Sig""",.GroupBox3 OptionGroup .Group2 OptionButton 30,119,140,14,"Сделать их все",.OptionButton3 OptionButton 180,119,170,14,"Спросить что делать",.OptionButton4 TextBox 70,26,40,18,.Alpha1 TextBox 190,26,40,18,.Alpha2 PushButton 450,126,90,21,"Справка",.PushButton1 End Dialog Dim dlg As UserDialog dlg.CheckBox1= 1 dlg.CheckBox4= 1 dlg.Alpha1= "0.05" dlg.Alpha2= "0.01" Dim objOutputItems As ISpssItems, objItem As ISpssItem, objActiveItem As Object Dim NSelected As Long, itemIndex As Long, bothLevels As Boolean, skip As Boolean, alpha As Double, textstyle As Integer, NSigs As Long Dim captText As String, title As String, info As String, makeCapt As Boolean, nonsig As Boolean Dim objColumnLabels As ISpssLabels, objLabels As ISpssLabels, objRowLabels As ISpssLabels, objDataCells As ISpssDataCells Dim colNum As Long, rowNum As Long, SigsAreIn As Integer, i As Long, i2 As Long Set objOutputItems= objSpssApp.GetDesignatedOutputDoc.Items NSelected= 0 For itemIndex= 1 To objOutputItems.Count-1 Set objItem= objOutputItems.GetItem(itemIndex) If objItem.SPSSType=SPSSPivot And objItem.Selected Then NSelected= NSelected+1 ReDim Preserve Selected(1 To NSelected) As Long Selected(NSelected)= itemIndex End If Next If NSelected=0 Then MsgBox "Для скрипта необходимо, чтобы вы выбрали Таблицу/ы или все результаты", "Error" Exit Sub End If If Dialog(dlg)=0 Then Exit Sub End If If dlg.CheckBox1 And dlg.CheckBox2 Then If Val(dlg.Alpha1)>Val(dlg.Alpha2) Then bothLevels= True alpha= Val(dlg.Alpha1) Else MsgBox "Второе значение альфа должно быть меньше первого", "Error" Exit Sub End If ElseIf dlg.CheckBox1 Then alpha= Val(dlg.Alpha1) ElseIf dlg.CheckBox2 Then alpha= Val(dlg.Alpha2) Else MsgBox "Нужно выбрать хотя бы один из уровней значимости, какой пометить", "Error" Exit Sub End If If dlg.Group1=0 Then textstyle= 2 Else textstyle= 1 End If If dlg.CheckBox3 Then captText= "ns = незначимо на уровне "+CStr(alpha)+"." End If For itemIndex= 1 To NSelected Set objItem= objOutputItems.GetItem(Selected(itemIndex)) Set objActiveItem= objItem.Activate objActiveItem.UpdateScreen= False NSigs= 0 Set objColumnLabels= objActiveItem.ColumnLabelArray For colNum= 0 To objColumnLabels.NumColumns-1 For rowNum= 0 To objColumnLabels.NumRows-1 If InStr(objColumnLabels.ValueAt(rowNum,colNum),"Sig.")>0 Then NSigs= NSigs+1 ReDim Preserve SigLabelCol(1 To NSigs) As Long ReDim Preserve SigLabelRow(1 To NSigs) As Long SigLabelCol(NSigs)= colNum SigLabelRow(NSigs)= rowNum End If Next Next If NSigs>0 Then SigsAreIn= 1 Set objLabels= objActiveItem.ColumnLabelArray Else Set objRowLabels = objActiveItem.RowLabelArray For rowNum= 0 To objRowLabels.NumRows-1 For colNum= 0 To objRowLabels.NumColumns-1 If InStr(objRowLabels.ValueAt(rowNum,colNum),"Sig.")>0 Then NSigs= NSigs+1 ReDim Preserve SigLabelCol(1 To NSigs) As Long ReDim Preserve SigLabelRow(1 To NSigs) As Long SigLabelCol(NSigs)= colNum SigLabelRow(NSigs)= rowNum End If Next Next If NSigs>0 Then SigsAreIn= 2 Set objLabels= objActiveItem.RowLabelArray End If End If If NSigs>0 Then skip= False If NSigs>1 And dlg.Group2=1 Then title= "Отмеченная таблица № "+CStr(itemIndex) info="В данной таблице "+CStr(NSigs)+" ""Sig"" "+Choose(SigsAreIn,"столбцов","рядов") Begin Dialog UserDialog 385,111,title,.dlg2func ' %GRID:5,3,1,1 OKButton 250,48,125,21 Text 10,7,320,14,info,.Text1 GroupBox 20,27,215,69,"Какой из них сделать?",.GroupBox1 OptionGroup .Group1 OptionButton 40,49,90,14,"Сделать",.OptionButton1 OptionButton 40,70,130,14,"Сделать их все",.OptionButton2 TextBox 130,46,30,18,.N Text 160,49,65,15,"-й из них",.Text2 PushButton 250,78,125,21,"Пропустить табл",.PushButton1 End Dialog Dim dlg2 As UserDialog dlg2.N= "1" If Dialog(dlg2)=1 Then skip= True Else If dlg2.Group1=0 And (Val(dlg2.N)<1 Or Val(dlg2.N)>NSigs) Then MsgBox "Вы ввели неправильное значение. Таблица будет пропущена", "Error" skip= True ElseIf dlg2.Group1=0 Then SigLabelCol(1)= SigLabelCol(Val(dlg2.N)) SigLabelRow(1)= SigLabelRow(Val(dlg2.N)) ReDim Preserve SigLabelCol(1 To 1) As Long ReDim Preserve SigLabelRow(1 To 1) As Long NSigs= 1 End If End If End If If Not skip Then makeCapt= False Set objDataCells= objActiveItem.DataCellArray For i= 1 To NSigs For i2= 0 To Choose(SigsAreIn,objDataCells.NumRows,objDataCells.NumColumns)-1 rowNum= Choose(SigsAreIn,i2,SigLabelRow(i)) colNum= Choose(SigsAreIn,SigLabelCol(i),i2) If IsNumeric(objDataCells.ValueAt(rowNum,colNum)) And CStr(objDataCells.ValueAt(rowNum,colNum))<>"-1.79769313486232E+308" Then nonsig= True If bothLevels Then If objDataCells.ValueAt(rowNum,colNum)