import spss, spssaux, extension
def Run(args):
"""Execute the COMBINE command"""
synObj = extension.Syntax([
extension.Template(kwd="VAR1", subc="", var="var1", ktype="existingvarlist"),
extension.Template(kwd="VAR2", subc="", var="var2", ktype="existingvarlist"),
extension.Template(kwd="OUTVAR", subc="", var="outvar", ktype="varname")])
extension.processcmd(synObj, args[args.keys()[0]], make_combi_var)
# debug --> no output???
f = open("d:/temp/test.txt", "wb")
f.write(args[args.keys()[0]] + "\n" + args)
f.close()
def make_combi_var(var1, var2, outvar="combi"):
""" Create a combination variable of two numerical variables, incl. labels """
vd = spssaux.VariableDict()
valuelabels1, valuelabels2 = vd.ValueLabels(var1), vd.ValueLabels(var2)
width1, width2 = len(str(max(valuelabels1.keys()))), len(str(max(valuelabels2.keys())))
if width1 == width2:
cmd = "numeric %s (n%s).\ncompute %s = %s * 10**%s + %s." % (outvar, width1+1, outvar, var1, width1, var2)
elif width1 > width2:
cmd = "numeric %s (n%s).\ncompute %s = %s * 10**%s + %s." % (outvar, width1+1, outvar, var1, 0, var2)
elif width1 < width2:
cmd = "numeric %s (n%s).\ncompute %s = %s * 10**%s + %s." % (outvar, width2+1, outvar, var1, 0, var2)
value_labels = ["value labels %s" % outvar]
for value1, label1 in valuelabels1.iteritems():
for value2, label2 in valuelabels2.iteritems():
value_labels.append("\n %s%s '%s, %s'" % (value1, value2, label1, label2))
spss.Submit(cmd)
spss.Submit(spssaux._smartquote(" ".join(value_labels) + "."))
cmd = "variable label %s 'combination variable (%s~%s)'." % (outvar, var1, var2)
spss.Submit(spssaux._smartquote(cmd))
def everything_okay ():
ok1600 = spssaux.getSpssVersion() >= [16,0,0]
print ok1600
if ok1600 and spss.PyInvokeSpss.IsUTF8mode():
print "UTF-8"
# everything_okay() # causes nasty error!
# how can I specify this so I dont need to restart spss after every code change?
Run(args={"VAR1": "chemo", "VAR2": "status", "OUTVAR": "inter"})