Stata:inlist 和 inlist2 命令介绍

发布时间:2021-09-02 阅读 7691

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下载 - 推文合集

作者:张立芳 (陕西师范大学)
邮箱zhanglifangceee@163.com


目录


1. 背景介绍

在清洗数据过程中,我们经常需要对变量进行重新赋值。例如,基于我国各个省份定义 EastMidlleWest 三个虚拟变量,或者基于国家名称或代码定义 Yes_OECD 国家虚拟变量。针对上述问题,常用方法是通过 if 条件语句对变量赋值。但是当类别较多时,if 命令语句将十分繁琐。为此,本文将介绍两个新命令 inlistinlist2,以试图更加高效简洁地处理这些工作。

2. 命令介绍

2.1 inlist 命令

该命令为系统自带,不需要安装。inlist 具体语法如下:

*命令语法
inlist(z,a,b,...)
  • 语法描述:当 z 满足 a,b,... 中的任何一个,则返回值为 1,否则为0。所有参数必须是实数或者字符型数据,其中数值型参数的个数需要在 2~250 之间,字符型需要在 2~10 个字符;
  • 适用范围:所有实数或者字符串;
  • 返回值:0 或 1。

2.2 inlist2 命令

inlist 相比,inlist2 有两个主要变化:

  • 首先,在 inlist2 命令中,字符串类型的参数不需要用引号 " " 括起来;
  • 其次,inlist2 命令运行后会生成一个新的变量,返回值为 0 或 1。
*命令安装
ssc des inlist2  //程序包介绍
ssc install inlist2, replace
*命令语法
inlist2 varname [, options]

其中,varname 为需要处理的变量,类似于 inlist 命令中的 z。option 主要包括以下选项:

  • values(a,b,c,...):所有参数必须是实数或者字符串。如果是字符串,需要区分大小写,且字符串中不能包含逗号;
  • name(string):生成一个新的变量,默认变量名是 inlist2

3. 具体示例

接下来,我们用一个例子来具体学习一下这两个命令的用法。首先,手动生成一个简单的数据文件。

clear
input str10 prov 
天津
北京
上海
广东
福建
山西
陕西
宁夏
河南
河北
山东
新疆
黑龙江
end
save "data_inlist", replace //保存数据,以备后用

然后,生成 “东部” 虚拟变量。其中,东部包括:北京、天津、河北、辽宁、上海、江苏、浙江、福建、山东、广东、广西、海南 12 个省、自治区、直辖市。

gen East = 0
replace East = 1 if prov=="天津" | prov=="北京" | prov=="上海" | prov=="广东" | prov=="福建" | prov=="山东"

或将上述两句合并为一句命令。

gen East2 = (prov=="天津" | prov=="北京" | prov=="上海" | prov=="广东" | prov=="福建" | prov=="山东")

若使用 inlist 命令,语法会简化很多。需要注意的是,inlist 后面要直接加 (),不可加空格,否则会报错。同时,每个字符串都需要用引号 " " 括起来。

gen East3 = inlist(prov, "天津", "北京", "上海", "广东", "福建", "山东")

但这种定义方法有个很大的限制,即枚举的省份个数不能超过十个。一个变通的方法是,生成一个数值变量,用以标记省份名称,进而把每个省份的数字编码放到 inlist() 函数的列表中。之所以如此,主要是因为 inlist() 函数最多可以接受 250 个数字类型的列表元素。具体做法如下:

. encode prov, gen(provNum) label(provNum)
. label list provNum
provNum:
           1 上海
           2 北京
           3 天津
           4 宁夏
           5 山东
           6 山西
           7 广东
           8 新疆
           9 河北
          10 河南
          11 福建
          12 陕西
          13 黑龙江

在这里,我们使用 encode 命令产生了 prov 变量的「数字-文字对应表」,并将其数值编码存储在新变量 provNum 中。此时,可以使用如下命令定义虚拟变量 East4

gen East4 = inlist(provNum, 1,2,3,5,7,11)

上述功能也可以使用 inlist2 命令实现。inlist2 命令对数值型或字符型参数的个数都没有限制。需要注意的是,inlist2 命令中字符串不能加引号 " ",否则会报错。

inlist2 prov, values(天津, 北京, 上海, 广东, 福建, 山东) name(East5)
replace East5 = 0 if East5==.

当然,上述五种方法得到的结果完全相同。

. list prov East*, clean noobs

      prov   East   East2   East3   East4   East5  
      天津      1       1       1       1       1  
      北京      1       1       1       1       1  
      上海      1       1       1       1       1  
      广东      1       1       1       1       1  
      福建      1       1       1       1       1  
      山西      0       0       0       0       0  
      陕西      0       0       0       0       0  
      宁夏      0       0       0       0       0  
      河南      0       0       0       0       0  
      河北      0       0       0       0       0  
      山东      1       1       1       1       1  
      新疆      0       0       0       0       0  
    黑龙江      0       0       0       0       0  

如此简洁的命令,你学会了吗?

4. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 数据处理, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

相关课程

免费公开课

最新课程-直播课

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

课程主页

课程主页

关于我们

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

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

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

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

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