查看原文
其他

利用separate 命令分类生成新变量

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

本文作者:胡   婧

文字编辑:杨长青

技术总编:司海涛

重大通知!!!2019年6月22日至24日在河南郑州举行Stata编程技术特别训练营,招生工作已经圆满结束。另外爬虫俱乐部将于2019年7月5日至7月8日在武汉举行首期Python编程技术定制培训,仍在火热招生中,点击文章末尾查看原文,查看培训详细信息。

用stata对数据进行处理时,我们有时需要按照其他变量的分类或是取值大小将某一变量分成多个变量,可以运用if条件语句进行处理。但是如果分类较多则需要多行命令或是使用循环进行处理,这样比较麻烦。所以,今天小编给大家介绍一个简便易用的小命令——separate。

基本语法:

separate varname [if] [in],by(groupvar|exp) [options]

我们以前五大客户及供应商营业收入数据为例。首先,将数据存入已知路径下,并将其打开,部分数据如下所示:

cd D:\ use 前五大客户及供应商数据, clear

如上图所示,这个数据中总共有163476条观测值,其中包含每个上市公司每一年的前五大客户相关数据以及前五大供应商相关数据,其机构排名分别为:1、2、3、4、5。前五大客户/供应商业务的合计数值的机构排名为6。我们想将数据中的变量占年度业务总额比例按机构排名分开为6个新的变量名。

首先我们利用if条件语句构建一个循环,得到六个新的变量。程序如下:

1.用if方法得出六个新的变量

forvalues a=1/6 { gen var`a'=占年度业务总额比例 if 机构排名==`a'}list 占* var* in 1/10

我们利用separate命令生成6个新的变量,程序如下:

2.用separate方法得出六个新的变量

separate 占年度业务总额比例, by(机构排名)list 占* in 1/10

可以看出需要运用一个循环做出来的事情,现在仅用一行命令就做出来了。如果我们只需要得到前五大客户的数据生成的六个变量,程序如下:

separate 占年度业务总额比例 if 业务关系==1, by(机构排名) //业务关系=1为客户的相关数据,业务关系=2为供应商相关的数据br

如图所示便生成了仅包含前五大客户的六个新变量,其中红框中的部分即为供应商数据(因为只提取客户数据生成的新变量,所以供应商相关数据在六个变量中均显示为缺失值)。

同时,by()中的内容亦可以是一个条件。比如我们将占年度业务总额大于1%的客户/供应商数据生成一个新变量,程序如下:

separate 占年度业务总额比例 if 机构排名!=6, by(占年度业务总额比例>1)br

附加选项:

(1)generate()

生成新的变量名。如上例中变量名“占年度业务总额比例”过长,导致生成的新变量名也过长,不利于后期处理。可以将其改为:

separate 占年度业务总额比例, by(机构排名) generate(v)list v* in 1/10

(2) sequential选项

在上面例子中,按照占比是否大于1,生成了两个新的变量,并且新变量是以后缀“0”开始的,使用sequential选项,可以将后缀改为从1开始。

separate 占 if 机构排名!=6, by(占>1) gen(v) sequentiallist v* in 1/10

(3)missing选项

缺失值也作为分组依据。例如,将数据中机构排名为6的值替换为缺失值:

replace 机构排名=. if 机构排名==6*在默认情况下,缺失值不参与分组:separate 占 if 业务关系==1, by(机构排名) gen(v)list v* in 1/10

添加missing选项之后,缺失值将参与分组,并将生成一个新的变量:

separate 占 if 业务关系==1, by(机构排名) gen(v) missinglist v* in 1/10

以上便是separate命令的全部内容,希望各位以后在数据处理时可以充分的利用以上命令,为你们的数据研究带来便利。

对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!

往期推文推荐

关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:statatraining@163.com

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

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

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