RSS Feed

‘programming’ Category

  1. 在SPSS里用Python代替宏

    January 5, 2013 by zhenzhen

    如果你跟我一样是SPSS syntax的高频使用者,我想你会跟我有同样的苦恼。它简单易学,提供许多常用功能。但毕竟它主要是用于统计分析的工具,在非统计分析方面的功能比较弱。我尤其不喜欢SPSS的宏语句,莫名其妙又规则繁多。好在IBM现在不断提高SPSS的开放性,增加了很多对外的接口,Python就是SPSS的新朋友之一。

    虽然在SPSS里用Python有点矫情,但是我这个暂时还舍不得放弃SPSS的人不得不说一句:Python is my saver!

    想成为和我一样矫情的人:请在安装好Python后,下载安装SPSS Python Plugin

    示例任务:读入一百个txt文件,将其存为sav文件。

    syntax:

    begin program.
    import spss
    i=1
    while i<=100:
    spss.Submit(r”””

    GET DATA
    /TYPE=TXT
    /FILE=!path+”%s.txt”
    /DELCASE=LINE
    /DELIMITERS=”\t”
    /ARRANGEMENT=DELIMITED
    /FIRSTCASE=2
    /IMPORTCASE=ALL
    /VARIABLES=
    id F8
    name A10.
    CACHE.
    EXECUTE.
    save outfile=!path+”%s.sav”.
    “”” %(i,i))
    i=i+1
    end program.

    解释:

    1,Begin program和End program中间是python语句(所以要遵守Python语法),如果你在python而非spss的命令行界面执行这段命令,可以省掉这个openning和ending。

    2,spss.Submit后面的括号里是spss命令,r”””(三引号)意味着中间全部是纯字符串,不用担心引号和双引号。注意这里要遵守的是spss的语法,比如每个命令以“.”结束。

    3,%s表示的是将要被替换的字符。在这里我假设文件名是从1到100,我用python将spss的读入文件的命令执行一百次,每一次执行的时候都替换被读入的文件名。如果文件名不是1到100这么简单,也可以用python将文件名保存为一个list,然后依然替换。

    4,整件事情的过程是:在SPSS里调用python,然后用python执行SPSS命令。你明白这是多么绕的一件事了吗?知道我为什么首先承认自己矫情了吧?如果你用python而非SPSS命令行界面做这件事,可以略微降低其矫情程度。但是我还要用SPSS做各种事,只是偶尔用python,所以放在SPSS的syntax里面对我来说比较方便。

    5,也许你需要我介绍一下宏。我不敢说我非常理解宏,不过我想粗浅说明就够了。wiki里这样介绍:“计算机科学裡的宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式。解释器或编译器在遇到宏时会自动进行这一模式替换。”这里的关键词是替换。当我们需要执行的多个命令非常相似的时候,有一种省力的办法是,每次执行的时候替换命令中的一小部分,而非重新撰写整个命令。当然,还有一种费力的办法是:复制粘贴多次,然后逐一修改,其实本质上是一样的。

    宏就是用来做替换这件事的。