循环这一用法如果你能明白的话,可以提高的数据处理速度,节约你的时间,我用一些例子来说明我们在数据处理中为什么要使用循环吧,我曾经下载过一些统计年鉴的表,下面这个例表可能会有人遇见过,这种导入stata的excel表会把前两行也导入进去,但实际我们进行回归时是不需要这两行的,假设你只有这一个表,你完全可以在excel里进行删除,但如果每一年都有这样的一个表,你都要手动删除,这种情况会浪费你的时间,此时你就需要采用循环来进行操作。以我这两年对数据的处理来看,我使用的循环一般在多个文件进行合并,对有一定规律的行进行删除,这种情况采用循环的比较多。
表1-1 xxxxx | ||||
城市 | 国内生产总值 | 人口 | .... | |
北京 | XXXX | XXX | ||
..... |
在将循环之前需要引入宏这个概念。关于宏其实我也不是特别懂,但我的stata的专栏主要是为了方便大家快速对stata进行入门,所以我觉得除非你是专业学这个的,那我觉得你只要知道宏主要用在哪以及一看到这个东西你知道它是宏就行了。宏分为局部宏和全局宏,我主要讲局部宏,因为局部宏在实际中运用的较多,如果你还想知道全局宏,百度就行了。
local(局部宏)
我就不将概念了,说句实话宏这个概念其实我真的也是一知半解,但这并不影响你用这个命令,我用一个例子说明吧。
local varlist var1 var2 var3 var4 //将var1 var2 var3 var4这四个变量放入varlist中
sum `varlist‘ //对varlist这个局部宏进行描述性统计
local为创建局部宏的指令, varlist 为局部宏的名称,注意在调用该宏的时候,一定要加`',否则宏是无法被调用的。对宏这一使用有了基本了解之后,就可以介绍循环命令了。
forvalues
forvalues 是我最常用的循环命令,我用一个最常用的用法来说明它的用途吧。上一篇我讲了合并,两个文件的合并你不用使用循环,但假设现在你有100个或1000个文件需要合并呢,你要是没合并一次敲一次代码,及其浪费时间。采用forvalues循环主要操作的为数字,所以如果你想使用这种方式对批量文件进行操作时,建议将文件名改为数字。
forvalue常用场合:
- 批量将excel表保存为dta格式
- 批量对文件进行删除、变量名,变量标签等相同的操作
- 批量合并文件
- 每xx行删除一次
use 2007//打开文件2007
forvalues i=2008(1)2017{
append using `i'
}//采用append对2007-2018这11个文件进行合并
foreach
foreach我用的很少,因为觉得forvalues完全可以解决我的大部分问题,但是在这里我还是对这个命令的用法或者说我觉得大家可能会用到的它的用法举个例子说明吧。采用foreach循环主要操作的为文件或变量
sysuse auto //打开stata自带的使用例子
foreach var in price mpg length{
des `var'
} //分别对 price mpg length这三个变量的信息进行描述
while
while这个循环命令其实也很好理解,还是用一个例子说明吧,while后面会跟一个进行逻辑判断的条件,但该条件为真时,该命令会一直执行括号里面的内容,直到不满足条件时该循环终止。
use 2008
local i=2009
while `i'<2018{
append using `i'
local i=`i'+1
}
注:无论是哪一种循环,其实只要你明白了循环的逻辑,那么其实哪一种命令都可以帮你实现你想要实现的内容,所以在进行循环之前,一定要明白你循环的逻辑。熟能生巧,我刚接触循环的时候也是很晕,但是等到你真正明白了以后,其实你会发现没有那么难,可以说我几乎没用过foreach和while这两种循环,但为什么还能编出来呢,一是先明白该命令的基本套路,二是理清自己需要循环的内容。