Search code examples
pythonspss

spss: rename a variable label


I have a list of variable labels I would like to capitalize them

(i.e.) Variable label.

 L0K3V       "PROBLÈME AVEC VOS ENFANTS"
 PK34        "QUEL ÂGE AVIEZ-VOUS?"
 ML9KL       "RÉPONDANT A-T'IL DÉJA ÉTÉ LÉGALEMENT MARIÉ(E)"
 ...

program

BEGIN PROGRAM PYTHON. 
import spss 

spss.StartDataStep() 
#current dataset 
datasetObj = spss.Dataset() 

varcount=spss.GetVariableCount() 
#populate a list or all the Variable Label 
varNameList= [spss.GetVariableLabel(i) for i in xrange(varcount) ] 
labellist=[] 
for i in xrange(varcount): 
  myLabel = spss.GetVariableLabel(i)
  newLabel = myLabel.capitalize() 
  spss.Submit(r""" rename labels (%s = %s) . """ %(myLabel, newLabel))

spss.EndDataStep() 
END PROGRAM. 



Traceback (most recent call last): 
  File "<string>", line 22, in <module> 
  File "C:\PROGRA~1\IBM\SPSS\STATIS~1\22\Python\Lib\site-packages\spss\spss.py", line 1527, in Submit 
    raise SpssError,error 
spss.errMsg.SpssError: [errLevel 98] Submit cannot be used from within a Datastep.

Solution

  • 1) You have an error suggesting Submit cannot be used from within a Dataset.

    2) VARIABLE LABEL is the correct command to relabel a variable.

    Here is a simplified way of achieving the same:

    get file="C:\Program Files\IBM\SPSS\Statistics\23\Samples\English\Employee data.sav".
    begin program.
    import spss, spssaux, spssdata
    spss.Submit("set mprint on.")
    vd=spssaux.VariableDict()
    spss.Submit("VARIABLE LABEL %s." % ("\n".join(["%s '%s' " % (str(v), v.VariableLabel.capitalize())  for v in vd])))
    spss.Submit("set mprint off.")
    end program.