查看原文
其他

“环环”入扣之foreach命令

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

本文作者:赵冰洁,中南财经政法大学金融学院

本文编辑:崔赵雯

技术总编:余术玲

爬虫俱乐部云端课程

  爬虫俱乐部于2020年暑期在线上举办的Stata与Python编程技术训练营和Stata数据分析法律与制度专题训练营已经圆满结束啦~应广大学员需求,我们的课程现已在腾讯课堂全面上线,且继续提供答疑服务。现在关注公众号并在朋友圈转发推文《来腾讯课堂学Stata和Python啦》或《8月Stata数据分析法律与制度专场来啦!》,即可获得600元课程优惠券,集赞50个再领200元课程优惠券!(截图发至本公众号后台领取)原价2400元的课程,现在只要1600元!  
Stata中的循环语句一共分为三类:while循环、foreach循环以及forvalues循环。其中,foreach循环和forvalues循环均可以看做是while循环的衍生。但是相较于forvalues命令,foreach命令更加灵活。二者的区别在于forvalues循环的对象必须是数字,而foreach循环的对象可以是变量、局部宏以及文件等。接下来,小编将会和大家一起学习一下foreach命令的具体用法。

一、命令语法

foreach命令的语法格式如下:
foreach lname {in|of listtype} list {
commands referring to `lname'
}
接下来对该命令的几种具体形式进行介绍:
1.foreach lname in any_list {
这种命令格式是对一般形式的列表进行循环,且列表中的各个元素都是用空格分开的。
2.foreach lname of local lmacname { 
或者 foreach lname of global gmacname {
这两种命令格式是分别对局部宏 lmacname全局宏 gmacname 中的各项元素进行遍历循环。在所有的循环方式中,这两种循环的执行速度是最快的。
3.foreach lname of varlist varlist {
在这种命令格式中,of 和第一个 varlist 是该命令格式的第一个部分,第二个 varlist 是进行遍历循环的变量列表。
4.foreach lname of newlist newvarlist {
其中,foreach ... of newlist ... 是该命令格式的一部分,newvarlist 是新变量列表。Stata 会检查所指定的新变量名是否有效,但是这些新变量名并不是由 Stata 自动生成的。
5.foreach lname of numlist numlist {
其中,foreach ... of numlist ... 是该命令格式的一部分,numlist 是数字列表。

二、实例操作

第一种:变量循环

打开Stata自带的数据集,然后利用foreach命令对数据集里面的 price、weight、length三个变量进行遍历循环和对数转换,生成三个新的变量并添加变量标签。
sysuse auto,clearforeach v of varlist price weight length { gen ln_`v' = ln(`v') /*生成新的变量 ln_`v',该变量是对原始变量的对数转换*/ label variable ln_`v' "ln(`v')" /*为新变量添加标签*/}list
结果如下:

可以看到,在结果窗口中出现了三个新的变量(已用红色标框标注),然后查看变量窗口,可以发现新变量均添加了对应的标签:

第二种:局部宏循环

打开Stata的示例数据集,首先将数据集里面的 price、weight、length 三个变量存储在vars中,然后通过foreach命令对vars中的元素进行遍历循环并生成新的变量,然后通过label选项为新变量添加标签。
sysuse auto,clearlocal vars price weight length  /*将三个进行遍历循环的变量存储在vars中*/foreach v of local vars {     gen `v'_1 = `v'/2  /*生成新的变量`v'_1,该变量是原始变量的二分之一*/ label variable `v'_1 "`v'/2"}list
通过结果窗口,可以看到新产生了三个变量(红色标框标注),且这三个新变量的对应标签如下:

在使用这种命令格式进行局部宏循环时,要注意:命令语句 foreach ... of local ... 已经指定了将会从局部宏中选取元素进行遍历循环,因此在引用 vars 时就不需要再添加` '

第三种:数字循环

foreach num of numlist 1 4/8 13(2)21 103 { display `num'}
其中,4/8 表示依次显示4-8之间的数字,13 (2) 21表示从13开始,每隔2显示一次,直到21结束。执行结果如下:

第四种:文件循环

调用内存中的两个数据文件(可通过后台回复female.dta、male.dta获取),gender = 0表示 female,gender = 1表示 male,显示如下:

然后,通过foreach循环和append命令将两个数据文件进行纵向合并。
clear allcd D:\mydataforeach file in female.dta male.dta { append using `file' /*纵向合并*/}list, sep(4)
结果如下:

到此,有关于foreach循环命令的介绍就结束啦~




对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐

统计年鉴数据整理小技巧

Seminar | 作为飞行员,我比别的CEO多了什么?

利用TensorFlow构建前馈神经网络

推文合集(1)| Stata学习者必看的n篇推文!

Seminar | 诚信的价值

利用tushare获取股票数据及实现可视化

从Excel到Stata的“摆渡车”——import excel命令

光阴十载,见证了《经济研究》中的“高被引”

利用tushare获取股票数据

         在Python中实现Stata的stack功能

这些年,经管类C刊都在研究什么?

Seminar | 眼见为实吗?高管面部可信度、审计师任期与审计费用

Seminar | 恐怖袭击与CEO薪酬

代码补全,主题更换,Jupyter Notebook原来可以这样用?

【爬虫实战】“双十一”微博热搜实时跟进

Stata中的数值型变量分类神器--recode

fs命令——我们的小帮手

【邀请函】听说你还在为处理表格头大?

用stack取代excel的数据重整操作吧

  日期数据处理

         Seminar | 委托贷款:打开中国影子银行的黑匣子

关于我们


微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

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

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

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