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
进行频数分析。
