全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 python论坛
6428 6
2014-06-12

在SPSS里用Python代替宏




如果你跟我一样是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),它根据一系列预定义的规则替换一定的文本模式。解释器或编译器在遇到宏时会自动进行这一模式替换。”这里的关键词是替换。当我们需要执行的多个命令非常相似的时候,有一种省力的办法是,每次执行的时候替换命令中的一小部分,而非重新撰写整个命令。当然,还有一种费力的办法是:复制粘贴多次,然后逐一修改,其实本质上是一样的。

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







二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2014-6-12 06:22:48
ReneeBK 发表于 2014-6-12 06:03
在SPSS里用Python代替宏


好主意新办法。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-6-12 16:00:31
学习好的方法很重要啊,感谢楼主的分享。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-7-6 10:35:25
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-7-29 10:13:11
谢谢分享,可否推荐一些参考资料呢?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-8-4 16:35:09
spss高手
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群