查看原文
其他

花式调用返回值 —— svret与storedresults

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

本文作者:李金洋

文字编辑:李钊颖

技术总编:李朋冲

重磅!!!爬虫俱乐部将于2019年10月2日至10月5日在湖北武汉举行Python编程技术培训,本次培训采用理论与案例相结合的方式,旨在帮助零基础学员轻松入门Python,由浅入深学习和掌握Python编程技术,尤其是爬虫技术和文本分析技术。该培训目前在火热招生中,点击《爬虫俱乐部2019十一Python编程技术培训报名啦!》或点击文末阅读原文,了解培训详细信息,抓紧时间报名吧!
大多数情况下,在执行stata命令之后,执行结果会被储存在返回值(Returned Results)中,以方便后续研究的数据保存与调用。除了直接调用返回值,stata中还提供了调用返回值的其他方法,今天就让小编为大家介绍两个与返回值相关的命令:svretstoredresults
 
:在Stata中,主要包含4类返回值:e-class,r-class,s-class和c-class,较为常见的是前两类返回值。我们曾在往期推文《朝花夕拾|stata返回值》中具体介绍过这4类返回值的主要区别和调用方法,有需要的读者可自行回顾。
      
一、svret——储存返回值

svret是stata的外部命令,可以很方便地储存命令执行后的返回值结果。svret的基本语法如下:
 
svret[classlist] [, long type(type) format(%fmt) keep(returnlist)]
 
      其中,classlist是指svret可以储存的返回值类型,包括e-class,r-class和s-class这三类,如果不指定,则默认返回全部的返回值结果。
 
       选项的含义如下:

① long:指定返回值储存为长型格式,如不指定,默认储存为宽型格式。

type(type):返回值往往以标量(scalars)或宏(macros)的形式存在,如不指定,则默认存储全部形式的返回值。

③ format(%fmt):指定数字的格式,具体用法详见format命令的帮助文件以及往期推文《千变万化——format》。

keep(returnlist):保留指定的返回值,如不指定,则默认存储全部返回值。


       举个例子:
ssc install svret //外部命令可通过ssc install 的方式安装sysuse auto.dta, clearsummarize pricesvret r //储存r类返回值br
上述命令执行后结果如下图所示,所有的r类返回值以默认的形式被保留了下来。


我们也可以对选项加以更详细的设定:
svret r, long format(%8.2fc) keep(r(sd) r(mean) r(min) r(max)) br

如下图所示,返回值结果仅保留了r(sd)、 r(mean)、 r(min) 和r(max)这四个结果,并以指定格式保存成了长型数据。



需要注意的是,使用svret命令后,保存的返回值结果会覆盖原有数据集,且一次只能保留一个命令的返回值结果。然而,这一问题可以使用传统的preserve-restore方式,或者stata16的frame框架来解决。对stata16框架新功能还不了解的读者可以参见往期推文《Stata16新功能之“框架”——读入多个数据集(1)》。
sysuse auto.dta, clearreg price mpg weight, vce(robust) //进行简单的ols回归frame create new //创建一个名为“new”的新框架,将返回值保存在新数据集中frame new: svret, long format(%8.2g) type(scalars) //储存所有标量形式的返回值frame new: br
执行上述命令后,结果如下图所示,所有标量形式的返回值都被储存在框架new下的数据集中,原数据集并没有被覆盖。


Stata只能调用最近一次命令执行后的返回值(如reg、summarize等),如果需要调用多次回归的返回值,我们可以将把这些结果存储在不同的frame中,彼此之间也不会发生“冲突”,也方便我们随时调用。

 

二、storedresults——返回值的储存与比较

       storedresults是stata的官方命令,可以储存并比较返回值的差异。其基本语法格式如下:

 

保存返回值:storedresults save name {r()|e()}
比较返回值:storedresults compare name {r()|e()} 
删除之前保存的返回值:storedresults drop name

      

其中,name为返回值结果保存的名称;该命令只能保存并比较r类或e类返回值。

      

       我们举例说明这一命令的用法:

       第一步:仅保留foreign为1的观测值,并保存变量mpg的描述性统计结果的r类返回值,命名为temp:

sysuse auto, clear keep if foreignsummarize mpgstoredresults save temp r()

第二步:仅对foreign为1的观测值进行变量mpg的描述性统计,并将这一结果的r类返回值与第一类的返回值结果temp相比较:
sysuse auto, clearsummarize mpg if foreignstoredresults compare temp r()

上述程序的执行结果如下图所示,比较的结果为空,说明这两种方式得到的返回值结果是完全一致的,没有区别。


第三步:对国产车进行变量mpg的描述性统计,并将这一结果的r类返回值与第一步的返回值结果temp相比较:
summarize mpg if !foreignstoredresults compare temp r()storedresults drop temp //删除temp
如下图所示,上述程序执行后的return code为9,并在主界面输出了返回值结果有所差异的具体内容。例如:根据storedresults的比较结果,标量r(Var)具有差异,原始(进口车)的r(Var)为43.71,新(国产车)的r(Var)为22.50,根据reldif()函数(stata内置函数,具体用法可通过help reldif()查看)计算二者的相对差异:|(22.50-43.71)|/(|43.71|+1)=0.474。


由上述介绍可知,storedresults虽然能提供保存并比较返回值结果的功能,但我们并不能把运行的结果调用出来。此外,storedresults compare命令还有更为详细的用法,感兴趣的读者可以使用help文件自行了解。
 
本文主要为大家介绍了两个与返回值相关的命令:svret和storedresults。不过,两个命令也各有其缺陷:svret会覆盖原始数据,但我们可将返回值结果存储到frame之中,以便后续调用;storedresults不能调用比较的结果。当这两个命令无法满足我们的需求时,直接调用返回值结果就是解决问题的最佳办法了。今天的介绍就到这里啦~


对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!

往期推文推荐

encode 和decode——带你探索编码与解码的世界

字符串方法(二)

如何快速生成分组变量?

用Stata实现数据标准化

字符串方法介绍

Jupyter Notebook的使用

Stata16新功能之“框架”——frlink连接多个数据集(3)
Stata16新功能之“框架”——基础命令大合集(2)
三分钟教你读懂Python报错
解析XML文件

命令更新之reg2docx:将回归结果输出到word

命令更新之t2docx——报告分组均值t检验

爬虫俱乐部2019十一Python编程技术培训报名啦!

数据类型——Dict、Set与Frozenset简析

数据类型介绍——tuple、list和range对象
把pdf文件批量转成docx文件
朝花夕拾—— 如何输出内存中的矩阵与绘图
Stata16新功能——定义图形元素的绝对大小

关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

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

投稿邮箱:statatraining@163.com

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

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

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