本文作者:薛 原
本文编辑:赵冰洁
技术总编:余术玲
爬虫俱乐部于2020年暑期在线上举办的Stata与Python编程技术训练营和Stata数据分析法律与制度专题训练营已经圆满结束啦~应广大学员需求,我们的课程现已在腾讯课堂全面上线,且继续提供答疑服务。现在关注公众号并在朋友圈转发推文《来腾讯课堂学Stata和Python啦!》或《8月Stata数据分析法律与制度专场来啦!》,即可获得600元课程优惠券,集赞50个再领200元课程优惠券!(截图发至本公众号后台领取)原价2400元的课程,现在只要1600元! 爬虫俱乐部团队目前已经开发了二十余个实用的Stata命令。前一段时间,我们在用户反馈信息的基础上,对部分命令进行了更新,修复了一些bug。同时根据大家的反馈,我们还整理了一些常见问题的解决方案。现就前段时间命令更新的情况以及使用这些命令常见的问题进行整理。
我们团队基于Stata15推出的putdocx命令,开发了sum2docx、corr2docx、t2docx以及reg2docx命令,这些命令能够帮助我们将实证研究中的描述性统计、相关系数矩阵、分组t检验以及回归结果制作成精美的表格,并输出到 .docx 文档中。这些命令发布后,我们进行了多次更新升级,提升了命令的执行速度并扩展了功能。在最近一次的更新中,我们根据用户反馈的信息,修复了corr2docx以及reg2docx命令在定义存放输出结果的文件时,文件名称或路径中出现空格导致程序报错的问题。大家可以使用ssc install来更新这些命令。有些用户在使用这些命令的时候,会遇到“invalid specifications; column misspecified”的报错信息,如下图所示:
如果大家在将这些命令更新到最新版本后,遇到这样的报错信息,请将Stata进行更新到15.1或更高的版本。在15.0版本的Stata中,putdocx命令无法使用“.”来表示输出表格的整行或整列,在之后的更新中加入了这个功能。我们的这些命令跟着Stata官方的putdocx命令一起更新,因此使用15.0版本的Stata会出现上述报错。还有用户询问reg2docx命令能否输出pseudo R2。这个命令能够输出回归命令后e类返回值(通过ereturn list查看)中所有的标量(scalars),例如要输出pseudo R2,只需要在scalars()选项中添加“r2_p”即可:webuse lbw, clearlogit low age lwt smoke ptl ht uiestimate store m1probit low age lwt smoke ptl ht uiestimate store m2reg2docx m1 m2 using "result.docx", replace scalars(N r2_p(%9.2f)) z(%9.2f) mtitles("Logit" "Probit")
根据用户的其他建议,我们还将对这些命令进行更进一步的更新,添加包括使用变量标签替换变量名放入输出表格内、类似于outreg2中addtext()的选项、将表示显著性的星号“*”设置为上标等功能。2016年的时候我们推出了chinagcode与chinaaddress命令,这两个命令通过调用百度地图API,能够将中文地址和经纬度进行转换。后来由于百度地图开放平台将正逆地理编码接口更新到了3.0版本,新申请的密钥不能够在基于2.0版本接口的chinagcode和chinaaddress命令中使用,我们推出了cngcode和cnaddress命令。这两个命令推出后,一些用户发现提取的信息都是缺失值。如果遇到这个问题,首先确定使用的密钥是3.0版本接口的。如果是早前申请的2.0的密钥,仍然要使用chinagcode和chinaaddress命令。此外,申请密钥时需要注意应用类型和白名单,如下图所示将白名单设置为“*”,申请的浏览器端密钥即可正常使用。
一部分用户提到百度地图API获取的经纬度相比于高德等地图平台,有较大的误差。这个问题出现的原因其实是选取的坐标系统不一样。高德地图、谷歌地图中国大陆地区使用的都是GCJ-02(国家测量局02号标准)坐标系,而百度地图默认使用的是百度坐标(BD09)。在cngcode和cnaddress命令中,我们加入了coordtype()选项,让大家能够设置提交和获取经纬度的坐标系。例如:clearinput str100 fulladdress"湖北省武汉市南湖大道中南财经政法大学""北京市海淀区北京大学"endcngcode, baidukey(百度地图密钥) fulladdress(fulladdress) long(lng1) lat(lat1) coordtype(bd09ll)cngcode, baidukey(百度地图密钥) fulladdress(fulladdress) long(lng2) lat(lat2) coordtype(gcj02ll)
如上图所示,lng1和lat1是百度坐标下的经纬度,lng2和lat2是GCJ-02坐标系下的经纬度。前一段时间有用户使用cnstock命令获取A股上市公司股票代码和公司简称时遇到了如下的报错信息:
出现这个报错的原因是cnstock命令的数据来源网页发生了变化,之前ado文件里面的源代码读入和拆分的程序都不能正常执行。我们更新了这个命令中读入源代码的程序,并通过mata对源代码进行拆分处理,保证了命令的正常执行,并提高了执行速度。大家可以通过ssc install cnstock, replace更新这个命令。修复了部分用户提到的在encoding()选项中设置编码为gb18030仍然提示“invalid encoding”的问题。大家更新了命令后如果仍然存在类似的问题,请检查Stata安装路径中是否存在中文字符,如有中文字符,需要卸载重新安装。感谢大家一直以来对我们团队的支持,我们将会继续努力,为大家传播技术,开发出越来越多实用的Stata命令。大家在使用我们团队开发的命令时如果遇到问题,也可以在后台留言或者发邮件到团队的邮箱。
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。