preserve restore |
您所在的位置:网站首页 › 文件备份命令是什么意思 › preserve restore |
preserve restore——stata的起死回生之术
原创
2016-11-14
余金馨
爬虫俱乐部
爬虫俱乐部
爬虫俱乐部
Stata技术控,编程技术咨询,数据讨论与分享,编程和实证培训。 哈喽,诸君安啊!偷偷告诉各位,小编今天要跟大家分享的东西可不得了了,有stata中起死回生术之称。Stata中,为了使部分程序的运行不影响之前的内容,我们一般会使用起死回生命令“preserve ,restore”。 起 死回生的秘密:preserve 命令可以把之前的内容保存在一个临时内存空间中,这样保存的文件,无论 preserve 以后我们对文件进行什么操作,都可以随时通过restore将preserve命令之前的文件恢复到内存中,继续使用。这意味着,在preserve 后我们可以肆无忌惮的折腾数据,只要restore一下,原数据就会重现~~~ 一、preserve,restore,起死回生 以如下C刊目录源数据(数据已放入百度云中供大家下载,链接如下:http://pan.baidu.com/s/1c2IE2g4)的整理为例让我们感受起死回生的神奇~: infix strL var 1-200 using C刊目录源数据.txt, clear 导入C刊目录源数据后,我们会发现stata只有一个变量v,要整理该数据,我们需要把所有期刊名称、主办单位和CN号分别提取出来并相对应地放入三个变量中。preserve,restore可以保证我们提取期刊名称后的数据依然可用于提取主办单位、CN号。 首先我们删去不需要的字符串观测值,并为每种期刊生成id,便于期刊名称、主办单位和CN号提取出来后能一一对应。 drop if var=="期刊名称" drop if var=="主办(管)单位" drop if var=="CN号" drop if var=="" drop if regexm(var,"([0-9]+种)") gen id = (mod(_n,3)==1) replace id = sum(id) 在这个过程中preserve restore就会为我们展示每次提取后原数据是如何起死回生的: preserve keep if mod(_n,3)==1 rename var journal sort id save 期刊名称,replace restore br后我们发现内存中的数据并没有变,而期刊名称文件中只保留了所有期刊的名称(若没有preserve restore,我们内存中的数据就只剩了期刊名称)。 preserve keep if mod(_n,3)==2 rename var publisher sort id save 主办单位,replace restore preserve keep if mod(_n,3)==0 rename var CN sort id save CN号,replace restore 至此我们运用preserve restore的起死回生对原数据做了三次不同的处理,得到了期刊名称、主办单位、CN号三个数据文件。接下来我们可以用merge命令将这三个数据文件根据id号横向合并在一个数据文件中,这也是我们最开始生成id号的原因。 use 期刊名称,clear sort id merge 1:1 id using 主办单位 drop _m
sort id merge 1:1 id using CN号 drop _m drop id save CSSCI, replace 结果如下: preserve,restore是最基础却最好用的命令,它可以满足我们对数据进行多次不同处理的需求。试想我们将其写入循环,我们就可以对一个数据文件进行足够多的数据处理达到我们的目的。比如我们想将cntrade所下载的浦发银行股票数据按照按照年份拆分保存,首先我们用cntrade命令下载浦发银行数据并生成年份: clear cap mkdir "C:\cntrade" cd c:\cntrade cntrade 600000 gen year = year(date) 结果如图所示: 我们很容易想到: keep if year == 2016 save 浦发银行_2016 这 样就把2016年的数据拆分并保存下来了。但是,命令运行完之后,我们其他的数据被deleted掉了,无法继续保存其他年股票的数据了。这时候 preserve,restore就可以大显身手,由于年份从1999到2016太多,我们将preserve,restore写入小循环中就可以省去一 遍又一遍的keep if,得到每一年的数据。命令如下: forv i = 1999/2016{ preserve keep if year == `i' save 浦发银行_`i' restore } 运行结果如下: Stata的起死回生命令和循环命令结合起来是不是更神奇了呢,只要一个preserve,restore就可以让你的数据生生不息~ 我们的第一个例子c刊目录源数据整理,将preserve,restore写进循环也会更简洁,附循环命令程序供读者参考学习: clear cd c:\CSSCI infix strL var 1-200 using C刊目录源数据.txt, clear drop if var=="期刊名称" drop if var=="主办(管)单位" drop if var=="CN号" drop if var==""
drop if regexm(var,"([0-9]+种)") gen id = (mod(_n,3)==1) replace id = sum(id)
local i = 0 foreach c in CN号 期刊名称 主办单位 { preserve keep if mod(_n,3) == `i' rename var `c' sort id save `c'.dta, replace local i = `i' + 1 restore } use 期刊名称,clear sort id merge 1:1 id using 主办单位 drop _m sort id merge 1:1 id using CN号 drop _m drop id save c:CSSCI, replace 以上就是今天小编与大家分享的全部内容了,如果各位看官喜欢今天的分享,不要吝啬您的打赏哦!~~想了解更多有关stata的小秘密,请继续关注我们的公众号哦,更多惊喜等着您!~~ 编辑by谢慧蓉 徐苾雯 往期推文推荐: 1.天路——chinafin与cntrade命令 2.分时数据,从此唾手可得 3.有了这个命令,以后还怕重复? 4.esttab功能挖掘:“Yes”or“No” 5.用“套路”处理数据 6.厉害了,我stata哥 7.爬虫俱乐部周末送大礼——chinagcode提取中文地址经纬度 8.据说这样数据替换比较快,你试一下,然后…… 9.众里寻她千百度,synth命令来帮助! 10.I have a Stata, I have a python 11.用subinfile修改文件,滚蛋吧,繁琐的命令君! 12.删繁就简三秋叶,subinfile似剪刀 此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。投稿邮箱:[email protected]投稿要求:1)必须原创,禁止抄袭;2)必须准确,详细,有例子,有截图;注意事项:1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。长按二维码关注你懂哟!~~ 赞赏 人赞赏 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |