查看原文
其他

dummieslab——从分类变量到虚拟变量的“一步之遥”

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

本文作者:孙晓玲

文字编辑:张馨月

技术总编:张计宝

导读

虚拟变量 ( Dummy Variables) 是用来反映分类属性的一种人工变量,通常又被称虚设变量、名义变量或者哑变量,其取值通常为0或1。在计量分析中,我们经常会遇到分类属性的变量,这时候就需要将其转换为虚拟变量。今天,小编将为大家介绍一个从分类变量快速生成虚拟变量的命令——dummieslab


1.命令介绍

dummieslab是一个外部命令,使用之前需要提前下载。

ssc install dummieslab

dummieslab的作用对象是分类变量(分类变量可以借助“label”变量生成并优化,在往期推文《数据含义记不住?—— label“大神”来帮忙》中我们已经对这个命令的用法进行介绍),它可以将一个分类变量生成一组虚拟变量,生成的虚拟变量的名称来源于分类变量的值标签,当然dummieslab还有一些常用的选项对生成的虚拟变量名称进行约束。其基本语法结构如下:

dummieslab varname [if exp] [inrange] [, word(integer) from(string)  to(string) template(string)  truncate(integer) novarlabel ]

其中,varname是进行转换的分类变量名,可通过ifin对其作用条件或范围进行选择,也可通过增加选项对生成的虚拟变量名称进行约束,常用的选项及其含义如下。

word(s) 将值标签中第s个单词作为生成的虚拟变量名

from(string1) to(string2) 在生成的虚拟变量名中将值标签中string1替换成string2

template 指定生成新变量名的模板,以“@”符号作为插入提取标签的占位符

truncate(n) 取前n个字符作为新变量名

novarlabel防止对生成的虚拟变量进行自动变量标记


2.应用介绍

这里我们使用Stata自带的“auto.dta”数据集对命令应用讲解,喜欢Stata的用户对这个数据集应该非常熟悉,“auto.dta”中有的“foreign”变量就是一个分类变量,其中“foreign==0”对应“Domestic”国产车,“foreign==1”对应“Foreign”进口车。为解释的便利,这里小编对这个分类变量的值标签进行修改,用到“label”命令。

clear allsysuse autolabel drop originlabel define newmeaning 0 "Domestic car" 1 "Foreign (or input) car"label values foreign newmeaninglabel list

这样原始值标签就被删除,值标签成为我们设定的样子。接下来我们使用默认方式生成虚拟变量,并查看数据集。

dummieslab foreign

的确生成了有效的虚拟变量,但生成的变量名极不美观,还可以发现生成的变量名不再包括值标签中的“空格”和“括号”,这是因为在默认情况下,生成的变量名将从值标签中删除所有无效字符。我们可以通过一些选项达到美化目的。

(1)word(s)

通过比较值标签的取值,我们可以选择值标签的第一个单词作为虚拟变量的变量名,通过选项“word(1)”可以实现这个功能。

dummieslab foreign, word(1)

(2)from(string1) to(string2)

为了显示的美观易懂,我们希望生成的变量名为“Domestic_car”、“Foreign_car”。就可以借助from(string1) to(string2)选项来实现,其中“string1”、“string2”可以是字符串序列,不同的字符串以“空格”分隔即可,这里我们先将“ (or input)”替换成空,再将空白字符替换成下划线(“_”)。

dummieslab foreign, from(" (or input)" " ") to("" "_")

(3)template

使用template选项还可以生成固定的虚拟变量名模板,以“@”符号作为插入提取标签的占位符。此处,我们生成一个“My_@_car”的变量名模板。

dummieslab foreign, word(1) template("My_@_car")

(4)truncate(n)

通过truncate(n)选项可以截取值标签中前n个字符作为虚拟变量名,truncate(1)即选第一个字符作为变量名。

dummieslab foreign,truncate(1)

(5)novarlabel

查看数据概貌可以发现,默认情况下生成的虚拟变量都被自动加上变量标签。

如果不想要这个变量标签,可以在生成虚拟变量时加上novarlabel选项。

dummieslab foreign,truncate(5) novarlabel

方便好用的dummieslab命令就介绍到这里啦!感兴趣的朋友快来试试吧~






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

线上Python课程都面向哪些方向?

子类与父类
用requests库爬取淘宝数据
WordStat—Stata的文本分析小助手
数据筛选理还乱,datacheck能诊断

如何用简单的手法绘制出不一样的海外疫情趋势图

matplotlib绘制数学函数
gen的再进化
Stata版大家来找茬—cfout就够了
另辟蹊径js逆向爬取百度翻译
可迭代对象、迭代器、生成器傻傻分不清楚
Ftools命令组之fegen命令介绍
提升效率的利器——如何用labvarch批量修改变量标签
二进制序列类型——bytes()、bytearray()
今日头条海外疫情数据爬取
anythingtodate带你轻松处理日期
_variables介绍

关于我们



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

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


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

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