教对象Stata系列|第2课:变量管理与IF条件使用
附件:
- 【附件内容】do文件,随手记PDF (笔记内容)、录屏
- 【附件下载】链接: https://pan.baidu.com/s/1c-f1D5shjC4-oCy4sKBm8w?pwd=w3p5
本文是教对象Stata系列视频的笔记内容。对应视频与配套代码请见下方链接,笔记内容请见分割线下方。
一、变量管理 (1)
1. 数值型变量——略
2. 字符型变量——略
3. gen 与 replace 的扩展: egen 与 ereplace
3.1 基本语法
egen
可以实现许多无法通过 gen
命令计算的内容,其基本语法如下:
1 | egen [type] newvar = fcn(arguments) [if] [in] [, options] |
egen
命令中运算函数 fcn
运算对象
arguments
可以分为三类:1. 变量
(varlist);2. 表达式
(expression);3. 数列 (numlist)。
其中,变量运算可以分为单变量运算函数 (varname) 和对多个变量运算的多变量运算函数 (varlist) 。表达式运算函数可以对单个变量进行运算,相当于 \(1\times varname\) ,多变量运算函数也大多可以支持单变量运算。
by(varlist)
选项可以根据 varlist
对样本进行分组,在 egen
命令中,部分运算函数可以使用
by(varlist)
选项对样本进行分组,在每组内进行运算。
3.1.1 表达式运算函数
表达式运算是对不同样本的某个表达式计算值进行运算。所有表达式运算函数支持
by
选项。
"count"、"iqr"、"kurt"、"mad"、"max"、"min"、"mean"、"sd"、"mdev"、"median"、"pctile"、"pc"、rank、skew、std、"total"
3.1.2 单变量运算函数
单变量运算是对不同样本进行运算,仅有 mode
支持
by
选项。
"anyvalue"、cut、ends、mode
3.1.3 多变量运算函数
多变量运算是对不同变量进行运算,都不支持 by
选项。
"anycount"、"anymatch"、"concat"、diff、"group"、mtr、rowfirst、rowlast、"rowmax"、"rowmin"、"rowmean"、"rowsd"、"rowmiss"、"rownonmiss"、"rowmedian"、"rowpctile"、"rowtotal"、tag
3.1.4 数列运算函数
fill
不支持 by
选项,seq
支持 by
选项。
fill、"seq"
3.2 函数 function 和 选项 option
egen 命令的运算函数很多,此处忽略了部分不常用的用法。完整使用方法请参考 egen 的 HELP 文档。
3.2.1 变量值匹配:anycount、anymatch 和 anyvalue
这三个运算不能与 by 组合使用
基本语法:
1 | ** anycount: 变量列表varlist取值与整数列numlist取值匹配的变量个数 |
示例:
1 | ** anycount |
3.2.2 连接 / 合并变量:concat
该命令不能与 by
组合使用。按照 varlist
的顺序连接各变量,可以生成以下变量:
- 按照原样字符型变量;
- 在
format(%fmt)
选项下使用数字格式转换; - 在
decode
选项下解码。
基本语法:
1 | egen strvar = concat(varlist) [, format(%fmt) decode maxlength(#) punct(pchars)] |
maxlength(#)
表示控制最大标签长度
punct(pchars)
表示变量之间的分隔符号
示例:
1 | ** 按照x1、x3、x2的顺序连接变量 |
3.2.3 记数:count、rownonmiss 和 rowmiss
count
可以与 by
组合使用,rownonmiss
和 rowmiss
不能与
by
组合使用。
基本语法:
1 | ** count: 表达式exp计算结果不是缺失值的样本数 |
示例:
1 | ** count: 按照diqu分组,计算x1和x2乘积不是缺失值的样本数 |
3.2.4 分组 & 求和 & 占比:group、total、rowtotal、pc
total
可以与 by
组合使用,group
和 rowtotal
不能与
by
组合使用。
基础语法:
1 | ** group: 依据字符型/数值型取值分组,可以是字符型、数值型的组合 |
示例:
1 | ** group: 根据 county 生成分组变量 CID |
3.2.5 中位数 & 分位数与相关运算——median、pctile、mad、iqr、rowmedian、rowpctile
median
、pctile
、mad
和
iqr
可以与 by
组合使用,rowmedian
和 rowpctile
不能与 by
组合使用。
基本语法:
1 | ** median: 中位数 |
示例:
1 | ** pctile: 按省分组统计x1的20%分位数 |
3.2.6 样本均值、标准差、最值:sd、mean、min、max、mdev
该 5 个函数都可以与 by
组合使用。
1 | egen x1_sd = sd(x1) //x1 的标准差 |
3.2.7 多变量均值、标准差、最值:rowsd、rowmean、rowmin、rowmax
该 4 个函数都不能与 by
组合使用。
1 | egen xx_total = rowtotal(x1 x2 x3) //x1、x2、x3的加总值 |
3.2.8 数列——seq
该运算函数可以与 by
组合使用。
基础语法:
1 | egen newvar = seq() [, from(#) to(#) block(#)] |
示例:
1 | ** 每个数字计数一次,范围1~4,重复计数: 1,2,3,4, | 1,2,3,4, | 1,…… |
3.2.9 其他——kurt、
kurt
命令可以与 by
组合使用。
1 | ** kurt: 表达式exp的峰度 |
3.2 ereplace 使用
ereplace
是一个外部命令,首次使用前需要安装,可使用的函数与 egen
相同。
1 | ssc install ereplace, replace // 仅首次使用需要安装 |
二、IF条件使用
1 | ** 大小关系比较 |
三、变量管理 (2)
1. 变量重命名
1 | ** 单个变量:A1 --> X1 |
2. 标签
1 | ** 查看标签 |
3. 排序
3.1 样本排序
1 | sort fid18 //根据 fid18 排列,默认升序排列 |
3.2 变量排序
1 | ** 对Province、pcode、ID三个变量排序 |
4. 变量删除、保留
1 | ** 少数变量的删除、保留 |