本文作者:张珍珍,河南大学经济学院
本文编辑:陈琳颖
技术总编:马梦杰
Stata and Python 数据分析
爬虫俱乐部Stata基础课程、Stata进阶课程和Python课程可在小鹅通平台查看,欢迎大家多多支持订阅!如需了解详情,可以通过课程链接(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或课程二维码进行访问哦~
数据处理的过程中,由于数据录入错误、数据本身属性等因素,难免出现观测值重复的现象。这种情况下,使用duplicates命令可以有效识别和处理重复值。下面我们通过2024-2025年三位同学的语文成绩介绍duplicates命令具体使用方法:
打开stata,新建一个do文件,敲入以下代码,用以构建本次案例的数据集。输入代码:
clearinput str15 学号 年份 str15 姓名 成绩0001 2025 李白 990001 2024 李白 1000002 2025 杜甫 1000002 2024 杜甫 990003 2025 祖冲之 880003 2024 祖冲之 860001 2025 李白 990003 2025 祖冲之 100end
这是2024-2025年三位同学的语文成绩,需要的样本集应该是同一年份、同一学号下,有且只有一个观测值。但是,通过下图样本集的展示不难发现,学号为0001的李白同学2025年的成绩重复出现了两次。而第八行,学号为0003的祖冲之同学的数学成绩错误纳入其中。
下面通过上文构建的样本集,介绍 duplicates 命令的使用方法,它有以下子命令:
duplicates examples //展示重复观测的具体内容duplicates list // 列出所有重复观测的行号和变量值duplicates report // 整体报告所有变量的重复情况duplicates drop //会删掉所有重复的观测值,保留唯一观测值duplicates tag 学号 成绩, gen(score_dup) // 基于"学号"和"成绩"标记重复
上文代码中,duplicates examples展示重复观测的具体内容;duplicates list表示列出所有重复观测的行号和变量值;duplicates report报告重复情况;duplicates drop会删掉所有重复的观测值,保留唯一观测值;duplicates tag表示将重复的变量生成新的变量:其中,gen表示生成新变量,括号里生成新变量的名称。此外,如果子命令后面不加任何变量名称,stata会默认识别的所有变量完全重复的观测值。
现在我们来逐一运行:
在初始样本集中,我们已经知道第一行和第七行是重复出现的。如上图所示, e.g.obs会汇报重复出现的最早观测值的行数(图中表示第一行),“#”代表重复出现的次数。
但上述代码不会展示出第一行与第几行是重复的,想要知道重复出现的具体情况,可以运行duplicates list。如下图,stata会汇报完全重复的样本观测值的情况(如果重复数据太多,返还信息会过长)。
如果要识别和标记数据集中重复观测值,可以采用dupulicates gen命令,其中:gen表示新变量,且新变量为分类变量。对于重复的观测值(即这些指定变量的值完全相同的观测值),会在新生成的变量中为这些重复观测值赋予重复次数,例如重复出现1次(共出现两次),则赋值为1;重复出现2次(共出现三次),则赋值为2,而唯一的观测值则会被赋予0(因为它们的重复次数为0)。如下图:
如果想要删除重复出现的观测值,可以运行duplicates drop,它会删除重复的行,仅保留首次出现的记录,如下图,返还结果会汇报删除观测值的个数。
上述所示皆为变量完全重复的情况,如果我们并不查看所有变量完全相同的观测值,而是观察仅根据指定变量(如学号和年份)重复的观测值。也就是说,只要学号和年份相同,无论其他变量(如成绩)是否不同,都被视为重复。我们可以运行下面的代码:
duplicates list 学号 年份 // 列出“学号”和”年份“重复的观测值duplicates examples 学号 年份 //展示学号和年份重复观测的内容duplicates report 学号 年份 // 整体报告所有变量基于学号和年份出现的重复情况duplicates tag 学号 年份, gen(score_dup) // 基于学号和年份标记重复观测值,生成新变量 score_dupduplicates drop 学号 年份 //删除学号和年份重复的观测值,仅保留首次出现的记录
上述代码中,1~4行代码返还结果类似上文,这里重点介绍duplicates drop命令。正常情况下,同一学号、同一年份观测值应该有且仅有一个,但是学号0003的同学2025年的成绩有两个(一个是语文成绩,一个是错误纳入的数学成绩)。这时候通过duplicates drop命令删除重复值会出现如下图结果。
出现上述报错的原因是,重复出现的观测值并不属于完全重复(其他变量均相同,但成绩不相同),stata并不知道究竟删除哪一行观测值。为了避免删除意外数据,所以stata不会轻易删除数据。如果强制删除,可以通过在代码后面加上force选项。
duplicates drop 学号 年份, force
如下图结果所示,运行上述代码,Stata会删除学号和年份重复的记录,保留首次出现的。但强制删除可能会删掉正确数据、保留某些不正确数据,因此不要轻易使用这个命令。正确做法是先观测重复数据结构,思考为何并非完全重复,找到不完全重复的原因,再解决数据去留问题。
本文主要介绍了Stata中duplicates命令在识别和处理数据重复值方面的使用方法,首先构建了包含重复值的三位同学2024-2025年语文成绩样本集,随后详细说明了duplicates的子命令examples、list、report、drop、tag的功能,还介绍了命令在指定变量和默认识别所有变量时的不同表现,以及强制使用duplicates drop命令可能出现的问题和注意事项。
以上就是本次分享的内容,大家趁热打铁实操练习一下吧。
重磅福利!为了更好地服务各位同学的研究,爬虫俱乐部将在小鹅通平台上持续提供金融研究所需要的各类指标,包括上市公司十大股东、股价崩盘、投资效率、融资约束、企业避税、分析师跟踪、净资产收益率、资产回报率、国际四大审计、托宾Q值、第一大股东持股比例、账面市值比、沪深A股上市公司研究常用控制变量等一系列深加工数据,基于各交易所信息披露的数据利用Stata在实现数据实时更新的同时还将不断上线更多的数据指标。我们以最前沿的数据处理技术、最好的服务质量、最大的诚意望能助力大家的研究工作!相关数据链接,请大家访问:(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或扫描二维码:
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
Pandas 数据筛选的多种方法
Stata入门:reshape命令---数据结构的“智能”变形
化繁为简:用高德地图API统计银行网点分布
探索 Stata 绘图:基于 S&P500 数据的可视化分析
Python Selenium爬取裁判文书网:从登录到批量下载全流程自动化
用正则表达式玩转混乱文本
Python实战-爬取政府采购网
万物皆有方程组吗?——利用deepseek构建基于极坐标下的莲花曲线
爬虫俱乐部2025暑期Stata&Python编程训练营开始报名啦!
当Stata遇上周易:数据分析师的Cyber算命指南与玄学新副业
【Python CleverCSV】让CSV文件处理更便捷
【Stata神技】Winsor2缩尾处理:3分钟拯救被"土豪"带偏的数据!
Stata矩阵 —— 开启高效数据分析的魔法之门
微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
我们团队一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com。
此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

