I have a Stata, I have a python

2016-10-21 薛原 爬虫俱乐部 爬虫俱乐部

I have a pen, I have a apple, uh,apple-pen~小编脑子里满满都是PPAP的魔性旋律和画面,当penapple变成了apple-pen,penpineapple变成了pineapple-pen,那么当statapython在一起,会不会变成stata-python呢?今天的推文就给大家看看它们之间有怎样的化学反应。


在Stata中,有许多命令可以使我们在Stata界面内去调用其他软件的命令或者数据,增加了与其他软件的联系。比如在Stata中有rsource和rcall这些命令,可以帮助我们实现Stata与R的互动。



今天我们要介绍的内容,是关于Stata和另一个强大的软件——python。在Stata中调用python程序的方式有很多,可以通过cmd来运行写好的python程序(参考email命令,也可以使用这篇推文中介绍的命令——python

Stata中的python命令可以使我们在Stata中运用python命令,也可以像进入mata环境那样进入到一个python环境中。要使用这个命令,首先电脑上要安装python。这个命令的作者在使用这个命令的说明中用的是python3.3,笔者的电脑上安装的是python3.6,都可以使用。但如果你的电脑上安装的是python2的话,想要使用这个命令麻烦安装python3。此外,为了制作运行命令所需要的插件,电脑上需要安装Microsoft Visual Studio

首先,通过findit python,我们可以找到这个命令,安装这个命令的同时会下载许多文件,帮助我们来成功运行这个命令。要注意的是这些文件存放的路径,并不都是和python.ado一样存放在ado文件夹下的plus文件夹中的p文件夹内。


下一步,我们在http://www.stata.com/plugins/上面下载两个插件:stplugin.hstplugin.c


然后我们打开Microsoft Visual Studio,开始制作插件。这个命令的作者使用的是Microsoft Visual Studio2012,笔者电脑上安装的是Microsoft Visual Studio2013,基本没什么区别。如果你的电脑上安装的是中文版的,请找到对应的内容。首先点击file,new,project在弹出的窗口中,左侧的模块下面点击Visual C++下的win32,在中间选择win32项目,点击ok


新弹出一个窗口,直接点next


application type下面选择DLL,在additional options中选择empty project,点击finish。然后在右侧选中Source Files,右击,点击AddExisting items。分别将刚下载的stplugin.hstplugin.c两个插件,下载命令时下载到的python_plugin.c以及python安装路径下的libs文件夹里的python36.lib(如果你安装的是python3.5,那么就是python35.lib,以此类推)全部加进去。


单击python_plugin.c,点击菜单栏下方的debug(注意,此处不是debug菜单,选择release。笔者的电脑系统是64位的,此处还要讲debug旁边的win32换成x64。点击win32,点击configuration manager,在platform下面点击new,在new platform中选择x64




点击上方的view,选择property pages。在新弹出的窗口左侧,选中C/C++下方的General,点击Additional Include Directories右边的空白部分,选择edit,将Python.h文件所在的文件夹添加进去,笔者电脑上这个文件位于D:\Python36\include。点击确定。


点击build,点击build solution。在下方就会出现窗口。


这样插件就做好了。我们到对应的路径中找到新生成的Win32Project1.dll,把名称改成python_plugin.plugin。我们将这个做好的插件也放在ado文件夹下的plus文件夹中的p文件夹内,和python.ado放在一起。然后将stata.pystata_missing.py两个文件放在python的文件夹中。这两个文件在你下载python.ado时被下载到了plus文件夹里的s文件夹中。现在,你就可以使用python命令了。

python

for i in range(5): print(i)

exit()


但是笔者的感觉,在Stata中运行python的命令的体验不如在python中直接运行。举一个最简单的例子,比如在python中,刚刚的命令可以这样写:

for i in range(5):

print(i)


但如果在Stata中用python的命令,在for i in range(5):后面要用回车键换行的话,就会直接运行命令,并且报错:


我们在命令窗口中输入for i in range(5):后再用ctrl加回车键切换到下一行,输入print(i)依然不行。


所以只能将命令写成for i in range(5): print(i)这样的形式。而且,python的语言也无法写入Statado文件中运行。python在把程序写好后,可以通过cmd来直接运行,在Stata中调用cmd来运行python写好的程序也要远远比用Stata中的python命令方便多了。怎么用Stata来写python命令?用file write就好了。看看email这个命令的ado文件就知道了。

怎么样,statapython是不是变成了你想要的stata-pythonI have a 微信,I have a 公众号,uh爬虫俱乐部~关注爬虫酱的公众号,带你变身技术流!爬虫酱谢谢各位读者的点赞和打赏,我们会继续努力献上实用的推文。

我们团队原来的微信公众号是“数据处理援助中心”,现在正式搬家到“爬虫俱乐部”,欢迎关注。新的公众号开始,我们推出有问必答栏目,对您提出的问题,我们会尽力回答,并通过推文的形式进行发布。我们也欢迎各位粉丝向公众号投稿。

(编辑 @徐苾雯)


欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:xueyuan19920310@163.com

投稿要求:

1)必须原创,禁止抄袭;

2)必须准确,详细,有例子,有截图;

注意事项:

1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。

3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答

长按二维码关注公众号哟

微信扫一扫
关注该公众号