查看原文
其他

列出指定属性的变量|findname命令比ds命令优越在哪里?

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

本文作者:陈丹慧,中南财经政法大学金融学院

本文编辑:陈丹慧

技术总编:余术玲

爬虫俱乐部云端课程

  爬虫俱乐部于2020年暑期在线上举办的Stata与Python编程技术训练营和Stata数据分析法律与制度专题训练营已经圆满结束啦~应广大学员需求,我们的课程现已在腾讯课堂全面上线,且继续提供答疑服务。现在关注公众号并在朋友圈转发推文《来腾讯课堂学Stata和Python啦》或《8月Stata数据分析法律与制度专场来啦!》,即可获得600元课程优惠券,集赞50个再领200元课程优惠券!(截图发至本公众号后台领取)原价2400元的课程,现在只要1600元
导读
Stata中有三大法宝:levelsof——找到变量值r(levels)fs——找到文件名r(files)findname——找到变量名r(varlist)。前两大法宝,我们在前段时间的推文中已经介绍过,今天我们就来介绍第三大法宝findname命令。 findname命令能够列出当前数据集中符合指定属性的变量(比如,列出所有数值型变量),并将这些变量名称放到返回值r(varlist)中,方便后面调用。

ds命令(详见推文如何简洁地列出指定属性的变量?ds命令来了!)不是已经实现这个功能了吗?“存在即合理”,findname命令是由活跃在Stata论坛的地理学家Nicholas Cox撰写的,并于2010年发布在了Stata Journal,经过了官方的检验。因此,今天我们就民间探讨一下ds命令和findname命令的异同点。一、findname和ds的相同点 findname命令是外部命令,在使用之前需要安装:
ssc install findname 语法: findname [varlist] [if] [in] [, options] 打开help文件会发现,findname命令的选项非常繁杂,但和ds命令相同,这些选项可大致分为两大类。 一是设置变量在结果窗口的显示:
选项功能
alpha按字母顺序列出变量
detail显示更多细节,如变量储存类型、显示格式等
indent(#)缩进输出
skip(#)指定变量名之间的空格数(默认是skip(2))
varwidth(#)指定变量名显示宽度(默认是varwidth(12))
ds命令和findname命令在这方面功能和用法一致,在此不赘述了,仅举一例展示。
sysuse auto,cleards,alphafindname,alpha //按字母顺序列出当前数据集所有变量名

二是指定变量属性:
选项功能
type(typelist)指定变量类型
format(patternlist)指定变量格式
insensitive执行不区分大小写的模式匹配
varlabel选择有变量标签的变量
varlabeltext(patternlist)选择变量标签匹配某种模式的变量
vallabel选择有值标签的变量
vallabelname(patternlist)选择值标签名称符合某种模式的变量
vallabeltext(patternlist)选择值标签内容符合某种模式的变量
char选择定义了特征的变量
charname(patternlist)选择特征名称符合某种模式的变量
chartext(patternlist)选择特征内容符合某种模式的变量
not列出不符合该规范的变量名
ds和findname命令在此处功能和选项大致一致,用法稍有不同。ds命令指定某种属性分为has()和not()两大“派别”,指定某种具体属性前要先使用has()或not()来描述,而findname命令的使用比ds更简洁。在此举一例,大家完全可以举一反三。
ds,has(type string) findname, type(string) //列出当前数据集所有字符型变量的变量名ds,not(type string)findname, type(string) not //列出当前数据集所有非字符型变量的变量名

二、findname和ds的不同点
findname和ds命令的不同点即它存在的理由,主要体现在以下几个选项:
1.local(macname)选项
ds命令没有local()选项,其返回值r(varlist)是短暂的,会随着后续其他有返回值命令的执行而被覆盖。而findname命令有local()选项,可自定义局部宏名称,后续还可以调用。
findname,type(float) local(floatvarlist)sum `r(varlist)' dis "`r(varlist)'"       //此时该返回值被覆盖而不存在dis "`floatvarlist'"      //而已经定义的局部宏不会被覆盖

2.all(condition)和any(condition)选项

findname命令作为ds命令的一种“进化版”,在这两个选项上得到了充分地体现。通过这两个选项,findname能够找到变量观测值满足某种条件(condition代表一种true或者false的状态。)的变量,这是ds命令完全没有的功能。
gen a=1findname, all(@==1) //找到变量值全为1的变量,其中@代表变量名。findname, any(@==1) //找到含有1的变量

另外,开发者还设置了一个很有趣的选项——placeholder(symbol) 这个选项是为了配合all(condition)和any(condition)这两个选项使用的。假设你的键盘@键坏了,可以设置其他占位符来替代@表示变量名。
findname, placeholder(%) any(%==1) //设置占位符%来替代@

总之,findname命令是对ds命令的一种完善升级。青出于蓝而胜于蓝!熟悉了findname的用法,再也不怕find不到想要的变量了!




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

【爬虫实战】亚马逊网站Top100畅销书爬取

Json文件好帮手——JsonPath

数据转置pro之sxpose2
文件"搬家"小助手:mvfiles

pyecharts绘图——河流图展示

你知道MDPI期刊的热门题目吗?

文件合并你不行,mergemany来帮宁

          分组进行描述性统计的小技巧 --astx命令介绍

新年快乐|爬虫俱乐部2020年度总结

不能忘却的记忆| B站弹幕爬虫

Python中实现Excel的重复值提取
fileexists:告诉你“我”存在吗?

工作中一切困难的解决途径——motivatedolly

【爬虫实战】喜茶的门店都开在了哪里?

import delimited | 再也不用担心读入网页源代码“乱七芭蕉”了

如何简洁地列出指定属性的变量?ds命令来了!

如何在Python中进行描述性统计分析?

分析师和他们的雇主重视与管理层接触吗?——分析师参与盈余电话会议的研究

繁忙的董事与公司业绩:来自并购的证据
关于我们


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

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

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

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