[ create a new paste ] login | about

Link: http://codepad.org/OU1iaTrH    [ raw code | output | fork ]

Python, pasted on Jan 2:
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"})


Output:
1
2
3
4
Traceback (most recent call last):
  Line 1, in <module>
    import spss, spssaux, extension
ImportError: No module named spss


Create a new paste based on this one


Comments: