Не редко бывает, что необходимо присвоить метки большому количеству переменных. И хорошо если эти метки где-либо уже записаны. К примеру в таблице, где в виде переменных (полей/столбцов) содержатся данные переменная->метка. Получается такого рода словарь. Делать это вручную с помощью copy/paste не хочется, да и можно сделать ошибку, а переменных может быть очень много. Хорошо, что в SPSS это можно сделать с помощью редактора синтаксиса. Код ниже:
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 | *Требуется указать правильный путь к датасетам: GET FILE='C:\Users\...\DATA1.sav'. DATASET NAME DATA1. GET FILE='C:\Users\...\DICT.sav'. DATASET NAME DATA2. DATASET ACTIVATE DATA1. begin program python. import spss #Список переменных varlist=[] #Число переменных varcnt = spss.GetVariableCount() #Составляем список переменных к которым надо получить метки for i in range(varcnt): varlist.append(spss.GetVariableName(i)) #Датасет в котором для каждого названия перменной есть поле метки (Переменные: Название переменной, метка) spss.Submit ("DATASET ACTIVATE DATA2.") spss.StartDataStep() ds2 = spss.Dataset () #Получаем количество меток (из может быть больше чем переменных) casen = spss.GetCaseCount() #массив текстовых названий переменных text=[] #массив описаний (меток) des=[] #Заполняем массивы (здесь 3 и 2 - порядковый номер переменных содержащих название и метку) for i in range(casen): des.append(ds2.cases[i,3][0]) text.append(ds2.cases[i,2][0]) spss.EndDataStep() #Переходим обратно на данные которые надо дополнить метками spss.Submit ("DATASET ACTIVATE DATA1.") spss.StartDataStep() ds = spss.Dataset () #Для каждой переменной for i in range(varcnt): #Перебираем список пока название из списка переменных не будет соответствовать названию в списке датасета меток for j in range(casen): #Если нашли совпадение, то ставим метку для этой переменной, и дальше эту переменную не ищем if varlist[i] == text[j].strip(): ds.varlist[i].label = des[j] break spss.EndDataStep() end program. |
Необходимо обратить внимание, что в классе spss.Dataset () параметр можно получить используя cases[i,j] в этом случае мы получим объект состоящий из одного элемента строки i и переменной j. Если используем cases[i], то получим всю строку i. Но для получения конкретного значения необходимо использовать cases[i,j][k], где k – порядковый номер значения в объекте. В случае если мы получаем объект из одного элемента, значение этого элемента надо получать так: cases[i,j][0].
Также необходимо удостовериться, что в значениях нет лишних пробелов справа/слева и удалить их(используя, к примеру, text[j].strip()).