一、简介
egenmore
是一个用于 Stata 的扩展包,包含了一组扩展的 egen
函数,超出了 Stata 内置的 egen
函数集。这些扩展函数提供了更广泛的操作,包括字符串处理、时间序列分析、数值运算、数据分组和汇总等,进一步增强了 Stata 在数据处理和分析中的功能。
要使用 egenmore
,你需要先通过以下命令在 Stata 中安装这个扩展包:
ssc install egenmore,replace
安装后,你可以像使用内置的 egen
函数一样,使用 egenmore
提供的扩展函数。
二、函数类型
函数根据主题分为以下几类:
- 分组与图形化
- 字符串、数字与转换
- 日期、时间与时间序列
- 汇总与估计
- 第一与最后
- 随机数
- 行操作
三、分组与图形化
- axis(varlist):为图形构建分类轴变量。生成一个变量,值为1, 2, …,代表
varlist
形成的组。支持gap
、label()
、missing
和reverse
选项。适用于分类变量的排序和图表准备。 - clsst(varname):返回最接近指定值的数字。
later
指定在相等时取较晚的值。 - egroup(varlist):
egen
中group()
的扩展,增加了label(lblvarlist)
选项。 - group2(varlist):
egen
中group()
的扩展,增加了按指定egen
调用结果排序的功能。 - mlabvpos(yvar xvar):自动生成标记标签位置的变量,用于散点图中标记标签的钟表位置分布。
四、字符串、数字与转换
- base(varname):将整数变量转换为指定基数(默认2)的字符串表示形式。
- decimal(varlist):将变量列表的值视为指定基数(默认2)的表示,并生成十进制等价值。
- incss(strvarlist):标识字符串列表中是否包含指定子字符串。
- iso3166(varname):将国家名称映射为ISO 3166-1-alpha-2代码,或反之。支持
origin
、language
和verbose
选项。 - msub(strvar):替换字符串变量中的特定子字符串。
- noccur(strvar):计算字符串变量中指定子字符串的出现次数。
- nss(strvar):返回字符串变量中指定子字符串的出现次数。
- ntos(numvar):将数值变量映射为字符串变量。
- nwords(strvar):返回字符串变量中的单词数。
- repeat():按顺序生成重复值列表。
- sieve(strvar):根据指定条件选择字符串中的字符。
- ston(strvar):将字符串变量映射为数值变量。
- truncdig(varname):按指定的十进制位数截断数值变量。
- wordof(strvar):返回字符串变量中的第
#
个单词。
五、日期、时间与时间序列
- bom(m y):生成指定月份和年份的月初日期。
- bomd(datevar):生成包含指定日期的月份的月初日期。
- dayofyear(daily_date_variable):生成指定日期变量的年份中的天数。
- dhms(d h m s):生成包含小时、分钟和秒的日期变量。
- elap(time):生成包含天数、小时、分钟和秒数的字符串变量。
- elap2(time1 time2):生成表示两个时间值之间间隔的字符串变量。
- eom(m y):生成指定月份和年份的月末日期。
- eomd(datevar):生成包含指定日期的月份的月末日期。
- ewma(timeseriesvar):计算指数加权移动平均值。
- filter(timeseriesvar):计算线性滤波器的值。
- foy(daily_date_variable):生成指定日期变量的年份中经过的分数。
- hmm(timevar):生成表示时间的小时和分钟字符串变量。
- hmmss(timevar):生成表示时间的小时、分钟和秒数字符串变量。
- hms(h m s):生成包含秒数的时间变量。
- minutes(strvar):返回表示为
[hh:]mm:ss
形式的时间变量的分钟数。 - ncyear(datevar):返回以指定月份和日期为起点的非日历年份的整数变量。
- record(exp):生成指定表达式到目前为止的最大或最小值。
- seconds(strvar):返回表示为
[hh:]mm:ss
形式的时间变量的秒数。 - tod(time):生成包含小时、分钟和秒数的字符串变量。
六、汇总与估计
- adjl(varname):计算下限值。
- adju(varname):计算上限值。
- corr(varname1 varname2):返回两个变量的相关系数。
- d2(exp):返回从中位数的平均绝对偏差。
- density(varname):计算值在指定宽度的区间中的密度。
- gmean(exp):返回几何平均值。
- hmean(exp):返回调和平均值。
- nmiss(exp):返回变量中缺失值的数量。
- nvals(varname):返回变量中不同值的数量。
- outside(varname):计算异常值。
- ridit(varname):计算
ridit
。 - semean(exp):计算平均值的标准误。
- sumoth(exp):返回组内其他值的总和。
- var(exp):生成包含指定表达式方差的常数。
- wpctile(varname):计算指定百分位数。
- wtfreq(exp):生成加权频率变量。
- xtile(varname):按指定的百分位数对变量进行分类。
七、第一与最后
- first(varname):返回第一个非缺失值。
- ifirst(numvar):返回整数
#
的第一次出现。 - ilast(numvar):返回整数
#
的最后一次出现。 - lastnm(varname):返回最后一个非缺失值。
八、随机数
- mixnorm():生成混合正态分布的随机变量。
- rndint():生成指定范围内的随机整数。
- rndsub():随机将观测分成若干组或子样本。
九、行操作
- rall(varlist):返回满足指定条件的观测的1,否则为0。
- rany(varlist):返回满足指定条件的任意变量的观测的1,否则为0。
- rcount(varlist):返回满足指定条件的变量数量。
- rowmedian(varlist):返回行中变量的中位数。
- rownvals(numvarlist):返回观测中不同数值的数量。
- rowsvals(strvarlist):返回观测中不同字符串的数量。
- rsum2(varlist):计算变量列表的行和,考虑缺失值。
详细说明
Grouping and Graphing
- axis(varlist)
生成一个用于绘图的分类轴变量。该变量根据varlist
中的分组取值从 1 开始递增。主要选项包括:gap
:在变量值变化时,增加一个间隙。label(lblvarlist)
:为生成的分类变量添加标签,默认使用varlist
的值。missing
:将缺失值视为普通值,而不是分配给单独的组。reverse
:反转分组编号顺序。
- clsst(varname), values(numlist) [later]
找出最接近varname
中数值的values()
列表中的数值,并生成新的变量。主要选项:later
:在存在多个等距离数值时,选择列表中靠后的值。
- egroup(varlist)
扩展了egen
的group()
功能,添加了label(lblvarlist)
选项,可以为分组添加原始值或标签。 - group2(varlist) sort(egen_call)
根据egen_call
的结果排序并生成分组变量,提供了比egen
的group()
更灵活的排序选项。 - mlabvpos(yvar xvar) [log polynomial(#) matrix(5x5 matrix)]
为散点图生成标签位置变量。根据 yvar 和 xvar 的分布生成时钟位置(如 1 点钟、2 点钟等),并根据数据位置调整标签位置。
主要选项:log
:使用 xvar 的对数进行回归残差计算。polynomial(#)
:用 xvar 的多项式进行回归残差计算。matrix(#)
:自定义时钟位置规则的 5x5 矩阵。
Strings, Numbers and Conversions
- base(varname) [, base(#)]
将整数变量varname
转换为指定基数(如二进制、八进制等)的字符串表示。默认基数为 2。 - decimal(varlist) [, base(#)]
将变量组varlist
视为指定基数的数字的每一位,并生成其十进制表示。 - incss(strvarlist) , substr(substring) [insensitive]
在字符串变量列表strvarlist
中查找substring
的出现次数,并生成一个新变量指示是否存在该子字符串。 - iso3166(varname) [, origin(codes|names) language(en|fr) verbose update]
根据 ISO 3166 标准将国家名称和国家代码相互转换。
主要选项:origin(codes|names)
:指定现有变量是国家代码还是国家名称。language(en|fr)
:指定国家名称的语言。verbose
:在转换过程中,显示无法识别的国家名称。update
:从互联网更新 ISO 3166 数据。
- msub(strvar), find(findstr) [replace(replacestr) n(#) word]
替换字符串变量strvar
中的部分内容。
主要选项:replace(replacestr)
:指定替换内容。n(#)
:只替换前 # 个出现的子字符串。word
:只替换独立的单词。
- noccur(strvar), string(substr)
计算字符串变量strvar
中子字符串substr
的非重叠出现次数。 - ntos(numvar), from(numlist) to(list of string values)
将数值变量numvar
转换为字符串,映射指定的数值列表到相应的字符串。 - repeat() , values(value_list) [by(byvarlist) block(#)]
生成重复的序列值。
主要选项:by(byvarlist)
:按组生成序列。block(#)
:指定重复块的大小。
- sieve(strvar), { keep(classes) | char(chars) | omit(chars) }
从字符串变量strvar
中选择或去除指定的字符。
主要选项:keep(classes)
:保留某些类别的字符(如字母、数字)。char(chars)
:保留特定字符。omit(chars)
:去除特定字符。
- ston(strvar), from(list of string values) to(numlist)
将字符串变量strvar
映射到数值变量。 - truncdig(varname), dig(#)
将数值变量varname
保留指定的小数位数。dig()
参数可以是正数、零或负数,负数表示按千位、百位进行分段。 - wordof(strvar), word(#)
提取字符串变量strvar
中的第 # 个单词。支持正向和反向提取。
Dates, Times and Time Series
- bom(m y) [, lag(lag) format(format) work]
生成指定年月的月初日期变量。
主要选项:lag(lag)
:生成之前几个月的月初日期。format(format)
:指定日期格式。work
:确保生成的日期是工作日。
- bomd(datevar) [, lag(lag) format(format) work]
生成包含指定日期的月份的月初日期,选项与bom()
类似。 - dayofyear(daily_date_variable) [, month(#) day(#)]
根据给定的日日期变量,生成年内的天数。默认从 1 月 1 日开始,可以指定其他起始日期。 - dhms(d h m s) [, format(format)]
根据给定的日期和时间生成日期时间变量。 - elap(time) [, format(format)]
生成一个字符串变量,表示指定时间变量的时间间隔(天、小时、分钟和秒)。 - eom(m y) [, lag(lag) format(format) work]
生成指定年月的月末日期变量。选项与bom()
类似。 - eomd(datevar) [, lag(lag) format(format) work]
生成包含指定日期的月份的月末日期,选项与eom()
类似。 - ewma(timeseriesvar), a(#)
计算指数加权移动平均值,需要先用tsset
声明时间序列数据。 - filter(timeseriesvar), lags(numlist) [coef(numlist) {normalise | normalize}]
计算时间序列变量的线性滤波器。
主要选项:lags(numlist)
:指定滞后期。coef(numlist)
:指定系数。normalise | normalize
:使系数总和为 1,生成加权均值。
- foy(daily_date_variable) [, month(#) day(#)]
生成从指定日期开始的年度分数(如年内已过的天数占全年天数的比例)。 - hmm(timevar) [, round(#) trim]
生成一个字符串变量,将时间变量以小时和分钟的形式表示。
主要选项:round(#)
:四舍五入到最近的时间单位。trim
:去除不必要的前导零和冒号。
Summaries and Estimates
- adjl(varname) [, by(byvarlist) factor(#)]
计算相邻的较低值。用于识别箱线图中的下须数据点。默认factor()
为 1.5。 - adju(varname) [, by(byvarlist) factor(#)]
计算相邻的较高值。用于识别箱线图中的上须数据点。默认factor()
为 1.5。 - corr(varname1 varname2) [, covariance spearman taua taub by(byvarlist)]
计算两个变量之间的相关系数,默认是 Pearson 相关系数。
主要选项:covariance
:计算协方差。spearman
:计算 Spearman 秩相关系数。taua
和taub
:计算 Kendall 的 tau-A 和 tau-B 系数。
- density(varname) [, width(#) start(#) frequency percent fraction by(byvarlist)]
计算变量值的密度,按指定宽度进行分组。可以选择计算频率、比例或百分比。 - gmean(exp) [, by(byvarlist)]
计算几何平均值。 - hmean(exp) [, by(byvarlist)]
计算调和平均值。 - nvals(varname) [, by(byvarlist) missing]
计算变量中不同取值的个数。missing
选项可以包含缺失值。 - outside(varname) [, by(byvarlist) factor(#)]
识别离群值,计算与四分位数距离超过factor()
的值。默认factor()
为 1.5。 - xtile(varname) [, percentiles(numlist) nquantiles(#) weights(varname) altdef by(byvarlist)]
根据百分位数对变量进行分类。
主要选项:percentiles(numlist)
:指定百分位数。nquantiles(#)
:指定分组数。weights(varname)
:加权计算百分位数。
First and Last
- first(varname) [, by(byvarlist)]
返回变量的第一个非缺失值。by()
选项允许按组计算。 - ilast(numvar), value(#) [, before | after by(byvarlist)]
返回变量中指定值的最后一次出现的记录位置。
主要选项:before
:返回最后一次出现之前的记录。after
:返回最后一次出现之后的记录。
- lastnm(varname) [, by(byvarlist)]
返回变量的最后一个非缺失值。
Random Numbers
- mixnorm() [, frac(#) mu1(#) mu2(#) var1(#) var2(#)]
生成一个混合正态分布的随机变量。
主要选项:frac(#)
:指定两种正态分布的混合比例。mu1(#) mu2(#)
:指定两种正态分布的均值。var1(#) var2(#)
:指定两种正态分布的方差。
- rndint(), max(#) [min(#)]
生成随机整数,范围由min()
和max()
指定。min()
默认为 1。 - rndsub() [, ngroup(#) {frac(#) | percent(#)} by(byvarlist)]
随机分组,将观察值随机分配到不同的组中。
主要选项:ngroup(#)
:指定分组数。frac(#)
:指定第一组包含的比例。percent(#)
:指定第一组包含的百分比。
Row Operations
- rall(varlist), cond(condition) [symbol(symbol)]
检查varlist
中所有变量是否满足condition
条件,返回 1 或 0。
主要选项:symbol(symbol)
:指定占位符,默认是@
。
- rany(varlist), cond(condition) [symbol(symbol)]
检查varlist
中是否有任何变量满足condition
条件,返回 1 或 0。 - rcount(varlist), cond(condition) [symbol(symbol)]
计算varlist
中满足condition
条件的变量数量。 - rowmedian(varlist)
计算varlist
中所有变量的行中位数。 - rownvals(numvarlist) [missing]
计算每行中不同取值的数量。missing
选项可以包含缺失值。 - rowsvals(strvarlist) [missing]
计算每行中不同字符串值的数量。 - rsum2(varlist)
计算varlist
中变量的和。
主要选项:allmiss
:如果所有变量都缺失,则结果也为缺失。anymiss
:如果任意一个变量缺失,则结果为缺失。