查看原文
其他

_variables介绍

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:宁刘莹

文字编辑:朱巧利

技术总编:张计宝

导读



stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n_N_b_cons_se_pi_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。


1、_n_N


_n_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n_N来实现:

clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:



可以看到在这个数据中。国产车一共有52辆,进口车有22辆。

 

2、_b_cons_se_pi


_b[]常用于回归之后,用于提取模型中的某个估计参数。
_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。
_se[]用于提取模型某个系数的标准差。
_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
 

3、_rccapture


_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。

我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。

举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。
如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}



由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。
 
更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:https://vip.stock.finance.sina.com.cn/corp/view/vCB_AllBulletin.php?stockid=600900&Page=1),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina.com.cn/corp/view/vCB_AllBulletin.php?stockid=600900&Page=1" temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:


这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina.com.cn/corp/view/vCB_AllBulletin.php?stockid=600900&Page=`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina.com.cn/corp/view/vCB_AllBulletin.php?stockid=600900&Page=`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。






对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
查询12306车次信息
海外疫情仍严峻,劝君更在家中留
国外疫情怎么看?——实时新闻获真知

基于贝叶斯定理的算法——朴素贝叶斯分类

中国知网爬虫(CNKI) 批量下载PDF格式论文
sencode命令介绍
Ftools命令组之fisid命令和fsort命令介绍
“抽丝剥茧”,层层下分——机器学习基本算法之决策树

爬取东方财富网当日股票交易情况

stata调用python爬取时间数据——借他山之石以攻玉

全国31省GDP排行强势登场!
接力《发哨子的人》Stata版
批量实现WORD转PDF

Stata有问必答环节

我听到了企业的哀鸣
“物以类聚”、“近朱者赤”——机器学习初探之KNN
SFI:Stata与Python的数据交互手册(二)

关于我们



微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存