Stata作为一款功能强大的统计软件,其频数分析命令是数据探索和描述性统计中最基础也最常用的工具之一,频数分析主要用于查看分类变量中各个类别的分布情况,包括频数、百分比、累计频数和累计百分比等关键指标,帮助研究者快速了解数据的结构和特征,Stata中与频数分析相关的命令主要包括tabulate(可简写为tab)、tab1、tab2以及fre(用户编写命令)等,下面将详细介绍这些命令的使用方法、语法结构及实际应用场景。

基础频数分析命令:tabulate
tabulate是Stata中最核心的频数分析命令,用于生成单变量或双变量的频数表,其基本语法为tabulate varname [if] [in] [, options],其中varname为需要分析的分类变量。
- 单变量频数分析:直接输入
tabulate varname,Stata会输出该变量的值标签(或数值)、频数(Freq.)、百分比(Percent)、累计频数(Cum.)和累计百分比(Cum.%),分析变量gender(性别:1=男,2=女)的分布,使用tabulate gender即可得到男女各有多少人及占比。 - 双变量交叉表分析:在
tabulate后添加两个变量,如tabulate gender education,会生成性别与教育程度的交叉列联表,显示每个组合的频数和行列百分比,选项row、col和cell可分别控制输出行百分比、列百分比和单元格百分比。
多变量频数分析命令:tab1与tab2
当需要对多个变量分别进行频数分析时,使用tab1更为便捷,其语法为tab1 varlist [if] [in] [, options],例如tab1 gender education agegroup会对三个变量依次生成单变量频数表,而tab2则用于生成多变量之间的两两交叉表,语法为tab2 varlist [if] [in] [, options],如tab2 gender education会同时输出gender*education和education*gender两个交叉表(结果相同)。
扩展频数分析命令:fre(用户编写命令)
Stata官方并未内置fre命令,但可通过ssc install fre安装该用户编写命令。fre比tabulate功能更丰富,可同时输出频数、百分比、有效值、缺失值等信息,并支持表格美化。fre gender不仅会显示性别分布,还会标注“Valid”(有效值)、“Missing”(缺失值)的频数和百分比,且结果可直接复制到Word中。
频数分析的进阶应用
- 加权频数分析:当数据为抽样数据且需要加权时,可在
tabulate前使用weight选项,如tabulate gender [pw=weightvar],其中weightvar为权重变量。 - 输出频数表到数据文件:使用
tabulate的gen()选项可生成虚拟变量,如tabulate gender, gen(gender_)会创建gender_1和gender_2两个变量,分别表示性别为1和0的样本。 - 可视化配合:频数分析结果可结合
graph bar或graph pie命令绘制柱状图或饼图,例如graph bar (count) over gender可直观展示性别分布。
实例演示
假设有数据集employee.dta,包含变量dept(部门:1=销售,2=技术,3=行政)和performance(绩效:1=优秀,2=合格,3=不合格)。

- 单变量频数:
tabulate dept,输出各部门人数及占比; - 交叉表分析:
tabulate dept performance, row col cell,显示部门与绩效的交叉分布及行列百分比; - 多变量分析:
tab1 dept performance,分别输出两个变量的频数表; - 安装
fre后:fre dept performance,获取更详细的频数统计。
注意事项
- 变量类型需为分类变量(名义或有序),若连续变量需先通过
recode或cut分组; - 缺失值默认被排除,若需包含缺失值,可使用
missing选项; - 大样本数据中,
tabulate可能运行较慢,可考虑使用tab1或fre提高效率。
相关问答FAQs
Q1: 如何在频数表中仅显示频数和百分比,不显示累计值?
A1: 在tabulate命令后添加nolabel选项可隐藏值标签,但若需隐藏累计值,需结合fre命令。fre varname, nol会输出仅含频数和百分比的结果(nol表示不显示累计值)。
Q2: 频数分析如何处理“其他”类别或合并稀疏类别?
A2: 可通过recode命令预先合并类别,将education变量中的“小学”和“初中”合并为“及以下”,使用代码:recode education (1/2=1 "及以下") (3=2 "高中") (4/5=3 "及以上"), gen(education_new),再对education_new进行频数分析。

