Stata数据处理:将字符变量编码为数值变量-encoder

发布时间:2022-05-12 阅读 13630

Stata连享会   主页 || 视频 || 推文 || 知乎 || Bilibili 站

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

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc, ihelp, rdbalance, gitee, installpkg

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

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

⛳ Stata 系列推文:

PDF下载 - 推文合集

作者:李依 (华中科技大学)
邮箱ellie@hust.edu.cn


目录


1. encode 命令

encode 命令可以将字符型变量转换为数值型变量。具体地,将字符变量的不同取值,按照字母排列顺序分别映射到数值 1, 2,...,并为生成的数字变量添加值标签。

encode 命令语法:

encode varname [if] [in] , generate(newvar) [label(name) noextend]
  • varname:需要转换为数值的分类/标识符变量;
  • generate(newvar):生成新的变量 (newvar)
  • label(name):按照变量值标签 name 中的 “字符串-数值” 的对应关系来转换 (默认按照字母排序转换)。

encode 命令案例:

. * 数据基本情况
. webuse hbp2, clear
. list in 1/10, noobs

  +--------------------------------------------------------------+
  |         id   city   year   age_grp       race   hbp      sex |
  |--------------------------------------------------------------|
  | 8008238923      1   1993     15–19      Black    No   female |
  | 8007143470      1   1992     30–34          .    No          |
  | 8000468015      1   1988     25–29      Black    No     male |
  | 8006167153      1   1991     25–29      Black    No     male |
  | 8006142590      1   1991     20–24      Black    No   female |
  |--------------------------------------------------------------|
  | 8007340259      2   1993     30–34      Black    No   female |
  | 8004411604      1   1990     20–24      Black    No     male |
  | 8006962950      5   1992     25–29      Black    No   female |
  | 8005012348      5   1991     20–24      Black   Yes   female |
  | 8003187296      2   1990     25–29   Hispanic    No   female |
  +--------------------------------------------------------------+

. * 查看数据:变量 sex 为字符型变量,包括两个取值,没有值标签 
. describe sex
. list sex in 1/10, noobs

. * 基于字符型变量 sex 生成数值型变量 gender,并创建值标签 sexlbl 
. encode sex, generate(gender) label(sexlbl)
. describe gender
. label list

sexlbl:
           1 female
           2 male

2. sencode 命令

sencode 命令可将字符型变量按字母顺序或其他非字母顺序编码为数值型变量。从数值到字符串的映射可以是一对一的 (按字符串第一次出现的顺序编码),也可以是多对一的 (按字符串位置编码,或者按指定的顺序编码)。

sencode 命令安装:

ssc install sencode, replace

encode 命令语法:

sencode varname [if] [in], {generate(newvar) | replace} [label(name) gsort(gsort_list) manyto1]
  • varname:需要转换为数值的分类/标识符变量;
  • generate(newvar):生成新的变量 (newvar)
  • replace: 数值变量替换字符变量;
  • label(name):按照变量值标签 name 中 “字符串-数值” 的对应关系转换;
  • gsort(gsort_list): 为字符型变量的非缺失值的数字代码分配指定一个通用的排序;
  • manyto1: 指定数值到字符串的映射是多对一的,即每个字符串有多个数字代码,对应该字符串值在数据集中的位置。

encode 命令案例:

. webuse hbp2, clear
. sencode sex , gene(gender1)      // 一对一转换
. sencode sex , gene(gender2) many // 一对多转换
. lab list gender1 gender2 

gender1:
           1 female
           2 male
gender2:
           1 female
           2 male
           3 male
           4 female
           5 female
           6 male
           ...
        1126 male
        1127 female
        1128 female
        
. sysuse auto.dta, clear
. sencode make, gene(makeseq1)                 // 默认按照字母排序
. sencode make, gene(makeseq2) gsort(-foreign) // 先按 foreign 降序,再按字母排序
. list make foreign makeseq1 makeseq2 in 1/10, nolab

     +-----------------------------------------------+
     | make            foreign   makeseq1   makeseq2 |
     |-----------------------------------------------|
  1. | AMC Concord           0          1         23 |
  2. | AMC Pacer             0          2         24 |
  3. | AMC Spirit            0          3         25 |
  4. | Buick Century         0          4         26 |
  5. | Buick Electra         0          5         27 |
     |-----------------------------------------------|
  6. | Buick LeSabre         0          6         28 |
  7. | Buick Opel            0          7         29 |
  8. | Buick Regal           0          8         30 |
  9. | Buick Riviera         0          9         31 |
 10. | Buick Skylark         0         10         32 |
     +-----------------------------------------------+

3. encoder 命令和 encoderall 命令

encoder 命令可以将字符型变量转换为数值型变量。encoder 命令与 encode 命令具有以下差别:encoder 命令包括 replace 选项替换现有变量;encoder 命令可以设置编码值从 0 开始。encoderall 命令可以一次性批量转换多个字符型变量,并替换原有字符型变量。

encoder 命令安装:

ssc install elabel,  replace
ssc install encoder, replace

encoder 命令语法:

encoder varname [if] [in] , [generate(newvar) label(name) noextend replace setzero]
  • varname:需要转换为数值的分类/标识符变量;
  • generate(newvar):生成新的变量 newvar
  • label(name):按照变量值标签 name 中的 “字符串-数字” 的对应关系转换;
  • noextend: 指定如果分类/标识符变量的值未出现在 label(name) 中,则不被编码;
  • replace: 指定输出的数值变量替换输入的字符型变量;
  • setzero: 指定排序后的值应该从 0 始,如未指定则编码值将从 1 开始。

encoderall 命令语法:

encoderall [varlist] [if] [in] , [label(name) noextend noextendall setzero]
  • label(name):按照变量值标签 name 中的 “字符串-数字” 的对应关系转换;
  • noextend: 指定如果分类/标识符变量的值未出现在 label(name) 中,则不被编码;
  • noextendall: 表示所有变量都使用现有标签进行编码;
  • setzero: 指定排序后的值应该从 0 开始,如未指定则编码值将从 1 开始。

encoder 命令案例:

. * 先看一下数据基本情况
. use https://stats.idre.ucla.edu/stat/stata/faq/hsbs, clear
. list in 1/5, noobs

  +-----------------------------------------------+
  |  id   gender   race   schtyp   read   science |
  |-----------------------------------------------|
  |  70        m      1      pub     45        47 |
  | 121        f      1      pub     68        63 |
  |  86        m      1      pub     44        58 |
  | 141        m      1      pub     63        53 |
  | 172        m      1      pub     47        53 |
  +-----------------------------------------------+

. * 将字符型变量 gender 转换为数值型变量,并添加值标签sexlbl
. encoder gender, replace label(sexlbl)
. label list sexlbl
sexlbl:
           1 f
           2 m

. * 将字符型变量 gender 转换为数值型变量,且编码表示为 0-1
. use https://stats.idre.ucla.edu/stat/stata/faq/hsbs, clear
. encoder gender, replace setzero
. label list gender
gender:
           0 f
           1 m

encoderall 命令案例:

. use https://stats.idre.ucla.edu/stat/stata/faq/hsbs, clear
. encoderall, setzero
. label list
science:
           1 .  //此处未显示编码为 0 的变量值,因为字符型变量 science 中有缺失值
           2 31
           3 39
           4 47
           ...
read:
           0 34
           1 42
           2 44
           3 45
           4 47
           ...
schtyp:
           0 pri
           1 pub      

4. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 标签 转换, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 连享会-主页知乎专栏,700+ 推文,实证分析不再抓狂。直播间 有很多视频课程,可以随时观看。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

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

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

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxhsongbl 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh