作者;江小白
邮箱:jiepost@qq.com
在使用Stata进行数据处理的过程中,如果遇到繁复的处理任务,通常都可以借助Stata中的循环命令帮助我们减轻工作负担,从而准确快速的完成数据的整理。
在Stata流程语句中经常使用的有三类循环语言:while循环
forvalue循环
foreach循环
。其中前两个语句主要针对数值型循环,有机会我们找个例子再写一写;而今天介绍的foreach循环
循环的对象可以是数值 变量 或者文件。
foreach语句格式
foreach lname {in|of listtype} list {
commands referring to `lname'
}
例如:
foreach lname in any_list {
foreach lname of local lmacname {
foreach lname of global gmacname {
foreach lname of varlist varlist {
foreach lname of newlist newvarlist {
foreach lname of numlist numlist {
格式书写中有几点需要注意:括号的使用必须符合示例格式的要求,第一个括号要出现在foreach的同一行,而且执行命令不要写在第一个括号后面,最后的结束括号必须单独成行。
foreach 任务示例
如上格式所述,foreach循环对象多样,下面通过几个示例语句来展示其功能。
循环append合并
合并当前数据库中的多个文件
foreach file in this.dta that.dta theother.dta {
append using "`file'"
}
循环局部宏
**定义一个局部宏,然后对于局部宏执行循环命令
**这里展示displaylocal life "春花 秋月 夏风 冬雪"
foreach x of local life {
display "`x'"
}
循环全局宏
**定义一个全局宏,然后对于全局宏执行循环命令
**这里展示display
global start "天枢 天璇 天玑 天权 玉衡 开阳 摇光"
foreach y of global start {
display "`y'"
}
变量循环
**调用示例数据,对于所有变量都执行sum操作
sysuse auto,clear
foreach v of varlist make-foreign {
sum `v'
}
循环生成变量
**生成100个变量,且每个变量都是均匀分布的随机数
clearset obs 100
foreach v of newlist a1-a100 {
gen `v'=uniform()
}
数值循环
**对于数值进行循环
**示例表示的数列是1 ,4到8,13到21其中步长为2,103
**这里展示display
foreach num of numlist 1 4/8 13(2)21 103 {
display `num'
}
***数值循环时如果对于等距数值进行循环一般不用foreach
**可以直接用forvalues
例如
forvalues x = 1/1000 {
...
...
}
**foreach必须存储元素列表,而forvalue通过计算一次获取一个元素
以上主要介绍foreach循环的使用,熟知上述的几种用法,可以在命令中变换使用想要执行的循环操作,都可以轻松简便的完成Stata数据处理的工作。
更多的Stata相关知识可以关注Stata中文社区~