查看原文
其他

大家用Stata来“找茬”

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

本文作者:陈梦华,河南大学经济学院

本文编辑:刘子艳

技术总编:李婷婷

Stata&Python云端课程来啦!

     寒雪梅中尽,春风柳上归。为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&python特惠课程双双上线腾讯课堂~原价2400元的Python编程培训课程,现在仅需100元,详情请查看推文《Python云端课程福利大放送!0基础也能学~》;原价600元的正则表达式课程,现在仅需49.9元,详情请查看推文《与春天有个约会,爬虫俱乐部重磅推出正则表达式网络课程!》;原价600元的基本字符串函数课程,现在仅需49.9元,更多信息请查看推文《与春天有个约会,爬虫俱乐部重磅推出基本字符串函数网络课程;原价600元的网络爬虫课程,现在仅需49.9元,更多信息请查看推文《与春天有个约会,爬虫俱乐部重磅推出网络爬虫专题课程》原价600元的文本分析课程,现在仅需49.9元,更多信息请查看推文与春天有个约会,爬虫俱乐部重磅推出文本分析网络课程。变的是价格,不变的是课程质量和答疑服务。对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦!
 导读 你是否曾经在比对两组数据中遇到过困难?比如两个人背靠背对同一数据进行数据清洗后,想要比对数据的清洗结果是否一致、是否准确、何处以及多少个数值出现了不同等等。如果两组数据的样本数和变量数都很少时,可以用肉眼对某一变量的每个取值或变量名进行逐个对比,但是通常在进行数据分析时所用的数据都包含成千上万的样本,在这种情况下,如果用人工肉眼识别,效率会很低且容易出现错误,5.0的大眼睛也会不堪重负。但是,别担心!接下来给大家介绍两个方便又实用的Stata命令吧——cfcfvars,帮助你迅速对比两个数据集里相同变量的取值以及对比两个数据集里的变量名。

一、cf命令:对比两个数据集里相同变量的取值

1、命令介绍及基本语法

  cf命令是Stata的官方命令,我们首先来了解一下它。

基本语法:

cf varlist using filename [,all verbose]

  这个命令可以将在Stata中已经打开的数据(主数据)和使用数据集(using使用数据)中的相同变量的取值进行比较。如果指定变量的取值相同,结果窗口返回结果为空;如果有任何不同,则返回r(9)。cf命令比较变量值,变量名、变量标签、值标签、注释、特征等都不进行比较。


 选项含义 

  1. varlist:变量名,cf命令既可以对比一个变量,也可以对比多个变量,直至对比数据里面所有变量(_all)的取值。

  2. filename:数据集名称,这个数据为使用数据。

  3. all:结果窗口会显示varlist中每个变量取值的比较结果(除非只加了选项all,否则只显示不同变量的结果)。数值完全匹配上的变量标记为“match”,匹配不上的标记为“mismatches”。

  4. verbose:只列出匹配不上的变量,同时详细给出每个变量不同取值的详细结果。

 选项allverbose可以同时使用,显示结果综合了这两个选项的功能。但通常比对是为了找出不匹配的变量取值,所以多数情况只加选项varlist

2、cf命令的运用

  为大家举个简单的小栗子来加深一下对cf命令的理解吧~

sysuse auto,clearreplace price = price+100 in 1/10replace mpg = mpg-5 in 3/8save auto1.dta,replace //变量price的1-10观测值在原来的基础上加了100、变量mpg的3-8观测值在原来的基础上减了5,保存为新的数据auto1.dta sysuse auto,clear //重新调用auto数据,作为主数据cf price mpg using auto1,all verbose //将主数据和使用数据auto1中price和mpg两个变量的取值进行对比

运行结果如下:

结果窗口返回r(9),变量price有10个取值不同,变量mpg有6个取值不同,并且详细给出了不同取值的观测值序号以及分别在主数据和使用数据中的取值。

  如果在程序中不使用all这个选项,得到的结果与上述结果是一致的。如果去掉verbose这个选项,则只显示各变量取值不匹配的个数。

cf price mpg using auto1,all

结果如图所示:

return list

r()的返回值中是有差异的观测值个数。


 注意 

  1. cf命令比对的两个数据包含的观测值个数必须相同,否则运行cf命令将会无结果;

  2. cf命令比对的两个数据变量个数可以不同,但是cf命令只比对两个数据中都含有的变量

  3. cf命令依据变量名做比对,故两个数据中的变量名必须是相同的

二、cfvars命令:对比两个数据集里的变量名

上面说到cf命令只能较变量的取值。对于数据的其他属性,比如:变量名、变量标签、值标签、注释、特征等都不进行比较。幸运的是,Stata用户编写的第三方命令中有可以进行对比变量名的命令——cfvars这个命令既可以找出两个数据集中不同的变量,也可以找出共有的变量。

  cfvars命令不是Stata的官方命令,是一个外部命令,需要通过ssc install进行手动安装,安装成功结果如下图所示:

1、基本语法

cfvars  filename1  [ filename2 ]

  • filename1filename2是两个将要对比的数据集名称。

  这个命令可以显示出两个数据集中共有的变量、仅在filename1里有的变量和仅在filename2里有的变量。

这个命令的使用有两种操作方法:

  一种是可以先打开一个数据集,然后在命令cfvars后面加上要对比的数据集的名称即可。还有一种方法是直接在命令cfvars后面加上要对比的两个数据集名称,这时需要保证Stata没有正在运行的数据。

2、例子

1) 第一种方法
sysuse auto,cleardrop mpg //将auto数据里的mpg变量去掉cfvars auto.dta //直接与原始数据auto比较
2) 第二种方法
sysuse auto,cleardrop mpgsave auto2.dta,replace //将auto数据里的mpg变量去掉后保存为新的数据auto2clear all //清空内存,保证没有正在运行的数据cfvars auto.dta auto2.dta //cfvars命令后加上用来对比的两个数据集的名称

两种程序最终显示的结果是一样的

结果报告了两个数据集共有的变量和仅在auto.dta数据集里包含的变量。

再来看一下它的返回值包括哪些吧~

return list

  • r(same)为1时,代表两组数据的变量名完全一样;否则,为0。

  • r(oneonly)列出只存在第一个数据集(filename1)里的变量名。

  • r(twoonly)列出只存在第二个数据集(filename2)里的变量名。

  • r(both)列出两个数据集中共有的变量名。


 注意 

  • 事实上,命令cf加上选项all verbose后也能逐一显示出每个变量的比对情况,但cf要求要比对的两个数据里必须要包含相同的观测值个数,而cfvars则没有这个要求。

  OK,本期推文介绍的内容就到此结束啦,掌握cfcfvars两个小命令能够更方便的帮助我们对比复杂繁多的样本和变量,用来“找茬”很简单,能够节省下来很多力气呢,大家可以自己动手试试哦~
最后,我们为大家揭秘4月1日雪球网(https://xueqiu.com/)所展示的沪深证券和港股关注人数增长Top10。


喜欢的话请按一下点赞、在看,以及转发一下叭~

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

往期推文推荐

雪球网关注度监测:关注人数Top10的证券原来是这些!你持有的股票上榜了吗?

Python与百度地图合璧,绘制棒呆的热力地图

【数据可视化】统计图绘制神器:Seaborn

检索Stata推文的“任意门”
学会了这些,分分钟提升你的毕业体验

【爬虫实战】双一流大学的月关注度

【爬虫实战】“中国人不吃这一套”——人民日报微博评论分析

进化的标签管理助手——elabel命令

“学术明星”——双重差分法(DID)的Stata操作

偷懒小妙招| selenium之玩转鼠标键盘操作(上)

【爬虫实战】南京地铁又上热榜——客流量分析

renfiles:批量重命名文件的利器

Stata中字符串的处理

物以类聚——浅述k-means聚类算法

我在哪里?调用高德API获取地址经纬度信息

超级简单的条件函数,轻松生成虚拟变量

Python云端课程福利大放送!0基础也能学~

【爬虫实战】“我们,继续新故事”——爬取LOL英雄皮肤

“人像动漫化”—Python实现抖音特效

跨框架合并数据|frlink的用法,你get到了吗

《唐探3》做错了什么?|来自150万字影评的证据

爬虫俱乐部年度总结|《请回答2020》

春节假期临近,来爬爬豆瓣看看有什么好剧

putdocx生成Word文档so easy!

模糊匹配我只用这一招!

利用tushare获取财务数据

关于我们 


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



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

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

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

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