SPSS / Python - Доступ к меткам переменных - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь получить доступ к меткам переменных в цикле for в SPSS, используя Python.Цикл for выполняет итерацию по ряду переменных, удаляя 1-3 и переименовывая 4 и 5 в последовательность из 5 переменных.Это работает нормально, но теперь, когда я пытаюсь получить доступ к меткам переменных через SPSS, я сталкиваюсь с ошибкой «объект unicode не имеет ключей атрибутов».

Я понимаю, что мне нужно как-то ссылаться на ключ вместострока в моем массиве, но, как начинающий программист, я изо всех сил пытаюсь выяснить, как обновить мой существующий код:

begin program.
import spss, spssaux
vdict=spssaux.VariableDict()
mylist=vdict.range(start="M10", end="ENDOK_D")
nvars = len(mylist)
mycounter = 1
durations = ""

for i in range(nvars):
  myvar = mylist[i]
  if (mycounter < 4): 
    spss.Submit("delete variables %s." % myvar)
    mycounter +=1
  elif (mycounter == 4): 
    varlabel = mylist[i].VariableLabel 
    spss.Submit('variable labels %s "%s" [TimeStamp]' % (myvar,varlabel) + ".")
    if (myvar.endswith("_C")): mynewvar = myvar[:-2] + "_TS"
    spss.Submit("rename variables (%s = %s)" % (myvar,mynewvar) + ".")
    spss.Submit("formats %s (DATETIME28.4)" % (mynewvar) + ".")
    mycounter +=1
  elif (mycounter == 5): 
    varlabel = mylist[i].VariableLabel 
    spss.Submit('variable labels %s "%s" [TimeStamp]' % (myvar,varlabel) + ".")
    if (myvar.endswith("_D")): mynewvar = myvar[:-2] + "_TSD"
    spss.Submit("rename variables (%s = %s)" % (myvar,mynewvar) + ".")
    durations += mynewvar + " "
    mycounter = 1
spss.Submit("alter type %s (F4.0)" % durations + ".")
end program.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 04 февраля 2019

Линия spss.Submit('variable labels %s "%s" [TimeStamp]' % (myvar,varlabel) + ".") - это то, что доставляет вам неприятности.

Бит [TimeStamp] в основном говорит Python искать ключ с именем «TimeStamp» в словаре, но перед [TimeStamp] он не находит правильную структуру данных - а именно словарь - но строкукоторый не имеет ключей.Может быть, это могло бы прояснить ситуацию:

myDict = {
          "varname": "myVariable", 
          "label": "This is myVariable's label!", 
          "TimeStamp": "20190204-0814"
          }

print (myDict["varname"])
print (myDict["TimeStamp"])

>>> myVariable
>>> 20190204-0814

Python ищет такую ​​структуру данных и хочет найти ключ "TimeStamp".Теперь я предполагаю, что вы просто хотите, чтобы ваши метки читали "Какой метке переменной был присвоен [TimeStamp]"?

Просто измените две строки на

spss.Submit('variable labels %s "%s" + " [TimeStamp]"' % (myvar,varlabel) + ".")
...