在SPSS里用Python代替宏
如果你跟我一样是SPSS syntax的高频使用者,我想你会跟我有同样的苦恼。它简单易学,提供许多常用功能。但毕竟它主要是用于统计分析的工具,在非统计分析方面的功能比较弱。我尤其不喜欢SPSS的宏语句,莫名其妙又规则繁多。好在IBM现在不断提高SPSS的开放性,增加了很多对外的接口,Python就是SPSS的新朋友之一。
虽然在SPSS里用Python有点矫情,但是我这个暂时还舍不得放弃SPSS的人不得不说一句:Python is my saver!
想成为和我一样矫情的人:请在安装好
示例任务:读入一百个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),它根据一系列预定义的规则替换一定的文本模式。解释器或编译器在遇到宏时会自动进行这一模式替换。”这里的关键词是替换。当我们需要执行的多个命令非常相似的时候,有一种省力的办法是,每次执行的时候替换命令中的一小部分,而非重新撰写整个命令。当然,还有一种费力的办法是:复制粘贴多次,然后逐一修改,其实本质上是一样的。
宏就是用来做替换这件事的