SFI:Stata与Python的数据交互手册(二)
本文作者:张学人
文字编辑:孙晓玲
Stata与Python的交互难题
在推文《SFI:Stata与Python的数据交互手册(一)》中,我们使用Macro和Local两种数据类型完成了Stata和Python中基础的单条信息的传递,当Stata与Python的交互要求并不是很高时,这样子一个宏一个宏地传参就已经足够,但当我们的场景更加特殊时,如我们需要时时知道数据在Python中的运行情况如何,就得使用SFI的更多工具。
什么是SFIToolkit
即时输出
用户可以通过display方法直接在Python中输出信息,所要输出的信息直接会显示在Stata的结果框中。其中displayln还会在输出结束后增加一行空行。除此两种以外,用户也可以通过errprint和error方法,以Stata报错的形式将一个错误信息回传Stata,字体亦会显示红色。
python:
from sfi import SFIToolkit
SFIToolkit.display("this message is send from python")
SFIToolkit.displayln("this message is send from python")
print("this message is send from python")
SFIToolkit.errprint("errorprint")
SFIToolkit.error(199)
输出结果如下:
在这里需要提醒大家的是,error方法只接收正整数,该数字是Stata对应的错误代码,例如199错误在Stata中就是unrecognized command,命令执行后会强制回到Stata环境中,不会执行后面的Python脚本。而errprint只会将字体以红色输出且无中断程序的作用。
stata方法
当你需要调用当前Stata的工作路径时,你可以通过getWorkingDir查询到。而当你需要在Stata中执行一个命令时,一者你可以如以前我们所说,写入stata:加上相应命令,二者你可以调用SFIToolkit的stata方法,它接收一个字符串参数,这个字符串即是需要执行的命令。
python:
from sfi import SFIToolkit
print(SFIToolkit.getWorkingDir())
SFIToolkit.stata("sysuse auto,clear")
stata: sysuse auto,clear
end
输出结果如下:
很多人在初次看到时会有天然的疑惑——这两者之间有什么区别呢?答案是stata方法更加灵活,当使用stata:的方式执行Stata命令时,由于Python语言没有宏的概念,因此每一句命令必须是确定的,但如果你需要执行的Stata命令存在变动,那么显然stata方法是更好的选择。
宏的清理
在上一篇推文中,我们详细介绍了如何生成、传输各类宏,相对应的,SFIToolkit提供了一系列清理宏的方法:rclear 、 eclear 、 sclear。
首先我们制造出一系列的r族、e族、s族宏。
python:
from sfi import SFIToolkit
SFIToolkit.stata("sysuse auto,clear")
SFIToolkit.stata("reg mpg weight foreign")
end
return list
ereturn list
sreturn list
输出结果如下:
python:
SFIToolkit.rclear()
SFIToolkit.sclear()
SFIToolkit.eclear()
end
return list
ereturn list
sreturn list
输出结果如下:
更多小工具:strToName
当你要在Python中确定一个新变量的名称,除了自己取名以外,更多情况下你需要使用外部已有的变量名,然而这些原本的变量名并不一定符合Stata的变量命名规范,此时需要strToName方法来将字符串转为合法可用的Stata变量名。
python:
from sfi import SFIToolkit
newname = SFIToolkit.strToName("afo2f*U*(&(0))")
print(newname)
end
NBA球员薪资分析——基于随机森林算法(二)
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。