Stata:elabel命令-强大的标签管理工具

发布时间:2020-09-25 阅读 643

Stata 连享会   主页 || 视频 || 推文

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

课程详情 https://gitee.com/arlionn/Course   |   lianxh.cn

课程主页 https://gitee.com/arlionn/Course

作者: 张静瑶(浙江海洋大学)
邮箱: 1132358871@qq.com

[编者按]:  本文内容摘译自以下文章,特此致谢!

[Source]: Klein D. Extensions to the label commands[J]. The Stata Journal, 2019, 19(4): 867-882. -Link-


目录


1. 背景

通常,我们会使用 label 命令给变量加标签,但在使用过程中也会遇到诸多不便,如:

  • 不支持通配符;
  • 无法直接修改标签名;
  • 不能使用 Stata 中的表达式。

鉴于 label 命令使用过程中的问题,本文将为大家介绍功能强大的 elabel 命令。

2. elabel 命令

安装

*-安装命令
  ssc install elabel, replace

语法

elabel subcommand [elblnamelist] [mappings] [iff eexp] [, options]
  • subcommand 为子命令,其与 label 子命令相同;
  • elblnamelist 为值标签名列表,可以包含通配符;
  • mappings 为值-标签具体映射关系,可以使用表达式;
  • iff eexp 为条件表达式。

3. 值标签列示的例子

3.1 通配符的使用

查看数据集「auto」中值标签「origin」内容,可以通过 list 子命令,具体如下:

*-列出值标签内容
  sysuse auto, clear
  elabel list origin
origin:
           0 Domestic
           1 Foreign

上述结果与 label 命令结果相同,但 elabel 更为强大的功能是其可以使用通配符,具体如下:

*-通配符使用
  label  list ori~  //无法使用通配符
value label ori not found
r(111);
  elabel list ori~  //可以使用通配符

origin:
           0 Domestic
           1 Foreign

当然,我们也可以使用通配符引用多个值标签。

3.2 间接引用值标签

有时,我们会忘记值标签名称,但知道值标签具体内容,也可以通过 elabel 命令列示,具体如下:

*-通过标签列出值标签内容
  elabel list (foreign)
origin:
           0 Domestic
           1 Foreign

3.3 条件表达式使用

列出满足「整数」条件的值标签内容:

*-列出满足条件的值标签内容
  elabel list origin iff (# > 0)        //#整数占位符
origin:
           1 Foreign

列出满足「文本」条件的值标签内容:

  elabel list origin iff strpos(@, "D") //@字符占位符
origin:
           0 Domestic

其中,# 字符充当源中的整数值占位符,@ 字符充当源中的文本占位符。 strpos() 函数是一个任意的选择,也可以选择 strmatch(),只要 iff 后面的表达式为 “真” 或 “假” 即可。

4. 值标签定义的例子

上述几个简单事例主要介绍如何列示值标签,接下来,我们将介绍如何定义和修改值标签。

4.1 值标签定义

在使用 elabel 命令时,我们可以将「整数值」对应到它们的任意函数,具体如下:

*-定义值标签
  elabel define logs (1/4) (= strofreal(10^#)) 
  elabel define time (0(60)240) (= strofreal(cond(#, #/60, 12)) + "am") 
  elabel list   logs time
logs:
           1 10
           2 100
           3 1000
           4 10000
time:
           0 12am
          60 1am
         120 2am
         180 3am
         240 4am

这里之所以使用 strofreal 函数,是因为值标签映射关系需要值的标签为字符形式。# 为整数占位符,关于 cond 函数可通过 help cond 查看详细帮助文档。

4.2 值标签修改

关于「吸烟频率」的值标签,映射关系如下:

*-系统改值标签
  elabel define smoke          ///
     1 "never"                 ///
     2 "once a week or less"   ///
     3 "every few days"        ///
     4 "most days"             ///
     5 "every day"             
  elabel list smoke

smoke:
           1 never
           2 once a week or less
           3 every few days
           4 most days
           5 every day

现在,我们想让值标签的数值依次减 1,具体如下:

  elabel define smoke (= #-1) (= @), replace //标签值减1
  elabel list smoke
smoke:
           0 never
           1 once a week or less
           2 every few days
           3 most days
           4 every day

4.3 值标签反转

继续引用上述「吸烟频率」例子,现在,我们想让「数值-标签」对应关系反转,即「0 - every day」,并以此类推。

*-标签-值关系反转 
  elabel recode smoke (0/4 = 4/0), define(smoke2) dryru
smoke:
           0 never
           1 once a week or less
           2 every few days
           3 most days
           4 every day
smoke2:
           0 every day
           1 most days
           2 every few days
           3 once a week or less
           4 never

这里,define() 选项为定义新的值标签 smoke2,而不是替换原有值标签 smoke。同时,也因为 dryrun 选项,这里值标签 smoke2 并没有产生,类似于「暂元」,若要生成 smoke2,只需去掉 dryrun 选项。

4.4 值标签名称修改

label 命令不能直接修改值标签名称,但可通过以下几步实现:

  • 通过复制旧的值标签,产生新的值标签;
  • 将新的值标签添加到对应变量上;
  • 删除旧的值标签。

elabel 命令则可以通过 rename 子命令快速实现上述过程,比如,我们想将「nlsw88」数据中变量 marriedcollgrad 对应的值标签 marlbl 和 gradlbl 中 lbl 替换为 VL,具体如下:

*-批量修改值标签名称
  sysuse nlsw88, clear
  des married collgrad
              storage   display    value
variable name   type    format     label      variable label
----------------------------------------------------------------
married         byte    %8.0g      marlbl     married
collgrad        byte    %16.0g     gradlbl    college graduate
  elabel rename (*lbl) (*VL) 
  des married collgrad
              storage   display    value
variable name   type    format     label      variable label
----------------------------------------------------------------
married         byte    %8.0g      marVL      married
collgrad        byte    %16.0g     gradVL     college graduate

4.5 变量标签名称修改

仍以「nlsw88」数据为例,现在,我们想让变量 collgrad 的标签 college graduate 首字母大写,具体如下:

*-变量标签首字母大写
  elabel variable (collgrad) (= strproper(@)) 
  des collgrad
              storage   display    value
variable name   type    format     label      variable label
----------------------------------------------------------------
collgrad        byte    %16.0g     gradVL     College Graduate

关于 strproper() 详细介绍请通过 help strproper 命令查看帮助文档。这里还需要强调,变量标签和值标签不一样。

相关课程

连享会-直播课 上线了!
http://lianxh.duanshu.com

免费公开课:


课程一览

支持回看,所有课程可以随时购买观看。

专题 嘉宾 直播/回看视频
最新专题 DSGE, 因果推断, 空间计量等
Stata数据清洗 游万海 直播, 2 小时,已上线
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]

Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。


关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。直播间 有很多视频课程,可以随时观看。
  • 连享会-主页知乎专栏,300+ 推文,实证分析不再抓狂。
  • 公众号推文分类: 计量专题 | 分类推文 | 资源工具。推文分成 内生性 | 空间计量 | 时序面板 | 结果输出 | 交乘调节 五类,主流方法介绍一目了然:DID, RDD, IV, GMM, FE, Probit 等。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会主页  lianxh.cn
连享会主页 lianxh.cn

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会学习群-常见问题解答汇总:
https://gitee.com/arlionn/WD