分享

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

 张春强2022 2019-06-19

本文作者:胡   婧

文字编辑:杨长青

技术总编:司海涛

重大通知!!!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命令的全部内容,希望各位以后在数据处理时可以充分的利用以上命令,为你们的数据研究带来便利。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多