复原之神--preserve&restore
本文作者:王玉洁,中南财经政法大学金融学院
本文编辑:温和铭
技术总编:戴 雯
Stata&Python云端课程来啦!
为了平衡团队运营成本,维系公众号的运营,也与国内动辄数千元的Stata课程缩短差距,我们的网课不得不上调价格,我们决定于9月1日起调价,Python课程的价格调整为199.9元,Stata进阶课程调为199.9元,Stata基础课程调整到229.9元,Stata文本分析、正则表达式、网络爬虫、基本字符串课程调整至79.9元。大家可以告知一下身边想要购买的小伙伴,欲购从速哦
hello,大家好呀!小编今天给大家带来了一个超级好用的命令:起死回生命令(
preserve
和restore
)。使用Stata时,我们经常会临时删掉或者修改某些变量,然后再还原成原来的样子继续别的研究。一种方法是,在修改原数据前,先save,保存到某个dta文件里面,然后需要还原的时候再use。但是这个方法效率很低。而“preserve
和restore
”能够很好的解决这个问题,接下来我们就一起看看它的强大之处吧!preserve
命令可以把即将要被临时修改的内容保存在一个临时内存空间中,即要修改前,用 preserve进行保存;这样保存的文件,无论以后我们对文件进行什么操作,都可以随时通过restore
将preserve命令之前的文件恢复成原来的样子,继续使用和研究,这就是起死回生的内涵和本质。本质了解完之后,让我们再通过几个小例子来实践一下吧!
案例一
我们先从简单的例子开始,使用Stata自带的auto数据来看一下起死回生命令的强大之处:
clear all
sysuse auto
preserve //将数据保存在临时空间
keep price mpg rep78
restore //恢复原数据
然而,当一条一条的运行以上命令时,restore
之后将会出现如下图一样的报错,所以切记:preserve
和restore
一定要一起运行,否则将会功亏一篑。
案例二
接下来我们增加难度,进入真正的实战。以整理211大学目录为例,我们想要将这些大学的名称合并为一列,并且将变量名改为大学名称,原始数据如下图:
让我们再次一起感受一下preserve
和restore
的好用之处:
clear all
cd D:/Stata
import delimited using 211大学.txt, delimiter(";")
preserve //将数据保存在临时空间
keep v1
rename v1 大学名称
save 211大学1.dta, replace
restore //恢复原数据
我们发现,preserve
之后对数据进行处理和修改再进行restore
数据又会恢复成原来的样子。
接着,对v2和v3进行同样的操作后再进行合并就能得到我们想要的结果了。
preserve
keep v2
rename v2 大学名称
save 211大学2.dta, replace
restore
keep v3
rename v3 大学名称
save 211大学3.dta, replace
use 211大学1.dta
append using 211大学2.dta 211大学3.dta
drop if 大学名称==""
以上的步骤还是有些小繁琐,我们可以把preserve和restore放到循环中使用,具体命令如下:
clear all
cd D:/Stata
import delimited using 211大学.txt, delimiter(";")
forvalues i = 1/3 {
preserve
keep v`i'
rename v`i' 大学名称
save 211大学_`i'.dta, replace
restore
}
clear
forvalues i = 1/3 {
append using 211大学_`i'.dta
}
drop if 大学名称 == ""
案例三
在第二个例子中,preserve
和restore
的次数相对较少,没有体现出将其写入到循环中的巨大优势,这里我们再使用一个小例子来看看起死回生加循环之后的厉害之处。比如,我们想将cntrade
所下载的云南白药的股票数据按年份拆分并且分别保存,具体命令如下:
clear all
cntrade 538
gen year = year(date)
drop date
order stkcd year //调换变量顺序
结果如图所示:
forvalues i = 2011/2021{
preserve
keep if year== `i'
save `i'.dta, replace
restore
}
将起死回生命令写入循环中是不是很好用呢,大家也快来试试吧!需要211大学目录的小伙伴可以在后台回复“211”获取。
以上就是小编今天分享的全部内容啦,心动的小伙伴们赶紧动手试试吧!
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
合并,“纵”享新丝滑:frameappend & xframeappend什么是全局配置项?|从零开始的Pyecharts(二)帮你拿下数据可视化|从零开始的Pyecharts
Stata助力疫情打卡管理——是谁没有接龙呢?
这十年,《金融研究》的编委和读者偏爱哪些研究话题和文章?【案例展示】Python与数据库交互
学好这一手,英语词典常在手玩转Stata中的数学函数
用spmap看中国空气质量戳穿围城面具:安利&劝退一个专业
走进图文并茂的攻略世界
玩转word文档“大变身”——wordconvert
简述递归
OpenCV库——轻松更换证件照背景色800万年薪!还有谁?!
千古伤心词人,词伤几何?
去哪儿网攻略爬取——跟我一起去大理吧
"有你才有团"——Stata爬取王者荣耀英雄海报
如何获取衡量股民情绪的指标?|东方财富股吧标题爬虫
利用Python构建马科维茨有效边界
rangestat,让统计量灵活滚动起来!
听说这样做立项成功率更高哦
如何处理缺失值?这一篇搞定!
善用dataex命令,高效沟通你我他
大数据下的大学分数线排行榜,快来围观!
《觉醒年代》—带你回到百年前
用Stata画的三维图很奇怪怎么办?
如何随机生成满足特定数据特征的新变量?
爬取无法翻页网页——自然科学基金项目及可视化
关于我们
微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为
作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。