对标教材:单元 14(定量分析:描述性统计)
阶段定位:分析——"算清楚"
学习目标
完成本章后,你将能够:
- 数据准备四步——清理、缺失处理、变量转换、加权(教材单元 14 的实操化)
- 数据体检三步——缺失检查、异常值检查、缩尾处理(留痕可复现)
- 一元分析——集中趋势(均值/中位数/众数)、离散程度(标准差/极差/IQR)、分布形态
- 双变量分析——相关分析、交叉表、组间均值差检验
- 描述表三线表输出——学术论文标准格式的 Stata 实现
核心理念
"描述统计是测量质量的体检报告"
—— 它不仅是"给读者看的表格",更是你自己验证第 5 章测量方案是否成功的数据面证据。
数据入库(第 7 章)
↓
§8.1 数据准备四步
↓
§8.2 数据体检三步(S8.1 留痕)
↓
§8.3 一元分析 → §8.4 双变量分析
↓
§8.5 描述表三线表输出
↓
为第 9 章实证回归做准备§8.1 数据准备四步
参见教材单元 14"数据准备"。教材讲了编码、输入、缺失值、转换四环节,本节聚焦实操。
第一步:数据清理
* ── 数据清理 ──
clear all
set more off
use "survey_clean.dta", clear
* 检查重复观测
duplicates report
duplicates drop id, force // 按 ID 去重
* 检查变量类型是否正确
describe
* 常见问题:数字被识别为字符串(因为 Excel 中有空格或特殊字符)
destring age income, replace force // 强制转换为数值
* 查看前 20 行数据,肉眼扫描
list id gender age income in 1/20第二步:缺失值处理
教材介绍了三种策略,这里给出 Stata 实现:
| 策略 | 适用条件 | 优点 | 缺点 |
|---|---|---|---|
| 成列删除 | 缺失少 (< 5%) 且随机 | 简单 | 损失样本量 |
| 均值/中位数插补 | 缺失少且近似正态 | 保留样本量 | 低估方差 |
| 多重插补 (MI) | 缺失多 (> 5%) 且可能非随机 | 统计性质好 | 操作复杂 |
* ── 缺失值诊断 ──
* 逐变量统计缺失
misstable summarize
* 缺失模式
misstable patterns
* ── 策略 1:成列删除(Stata 回归默认行为)──
* 无需额外操作,regress 等命令自动删除含缺失的观测
* ── 策略 2:均值插补 ──
summarize income, detail
replace income = r(mean) if missing(income)
* 注意:必须标记哪些被插补了!
gen income_imputed = (income == r(mean) & mi(income)) // 留痕
* ── 策略 3:多重插补 ──
mi set mlong
mi register imputed income age
mi impute chained (regress) income age = gender education df1-df5, add(5)
mi estimate: regress y x1 x2 x3第三步:变量转换
* ── 反向题反转 ──
* Likert 1-5 反转:新值 = 6 - 原值
gen df2_r = 6 - df2
label var df2_r "数字金融使用2(反向题,已反转)"
* ── 构念加总/均值 ──
* 方法 A:均值法(推荐,不受题项数影响)
egen df_mean = rowmean(df1 df2_r df3 df4 df5)
label var df_mean "数字金融使用(均值)"
* 方法 B:加总法
egen df_sum = rowtotal(df1 df2_r df3 df4 df5)
* ── 连续变量分组(区间化)──
gen income_group = .
replace income_group = 1 if income < 20000
replace income_group = 2 if income >= 20000 & income < 50000
replace income_group = 3 if income >= 50000 & income < 100000
replace income_group = 4 if income >= 100000
label define inc_grp 1 "2万以下" 2 "2-5万" 3 "5-10万" 4 "10万以上"
label values income_group inc_grp
* ── 生成虚拟变量 ──
tab gender, gen(gender_d)
* gender_d1 = 男, gender_d2 = 女 → 回归时用 gender_d1 即可第四步:加权
* ── 抽样权重设定(复杂抽样设计)──
* 如果你用了分层抽样,需要告诉 Stata 权重
svyset psu [pweight = weight], strata(strata)
* 后续分析使用 svy: 前缀
svy: mean income
svy: regress y x1 x2
* 如果没有复杂抽样设计(简单随机或方便抽样),通常不加权§8.2 数据体检三步
核心理念:在跑回归之前,先给数据做一次"全身体检"——发现问题比假装没问题好得多。
第一步:缺失检查
* ── 全面缺失诊断 ──
* 方法 1:逐变量缺失比例
foreach var of varlist _all {
quietly count if missing(`var')
if r(N) > 0 {
di "`var'" _col(30) "缺失 " r(N) " (" %5.2f r(N)/_N*100 "%)"
}
}
* 方法 2:misstable 系列命令
misstable summarize // 汇总表
misstable summarize, by(gender) // 按组查看缺失是否系统性
misstable patterns // 缺失模式(哪些变量同时缺失)
misstable tree // 缺失的决策树可视化判断标准:
- 单变量缺失 < 5%:通常可直接删除或用均值插补
- 单变量缺失 5–20%:建议使用多重插补
- 单变量缺失 > 20%:考虑该变量是否可用
- 系统性缺失(如高收入者更可能不报告收入):必须在论文中讨论
第二步:异常值检查
* ── 异常值诊断 ──
* 方法 1:基本统计量扫描
summarize income age df_mean, detail
* 关注:最大值/最小值是否在合理范围?均值是否被极端值拉偏?
* 方法 2:箱线图(可视化)
graph box income, over(gender) title("收入分布(按性别)")
graph box df_mean, title("数字金融使用均值分布")
* 方法 3:3σ 原则标记
foreach var in income age df_mean {
quietly summarize `var'
local m = r(mean)
local s = r(sd)
gen outlier_`var' = (abs(`var' - `m') > 3*`s')
tab outlier_`var'
}
* 方法 4:百分位数法(更稳健)
foreach var in income age {
quietly _pctile `var', p(1 99)
local p1 = r(r1)
local p99 = r(r2)
di "`var': P1 = `p1', P99 = `p99'"
count if `var' < `p1' | `var' > `p99'
di " 超出 1%-99% 范围的观测:" r(N)
}第三步:缩尾处理(Winsorize)
* ── 缩尾处理 ──
* 安装社区命令(首次使用需安装)
* ssc install winsor2
* 对所有连续变量做 1% 和 99% 缩尾
winsor2 income age df_mean ca_mean, replace cuts(1 99)
* 缩尾前后对比
summarize income, detail // 已缩尾后的结果
* 注意:replace 会覆盖原变量!建议先备份
* 更安全的做法:生成新变量
winsor2 income age, gen(w_) cuts(1 99)
* 生成 income_w, age_w
* 记录缩尾操作(留痕!)
log using "data_health_check.log", replace text
di "缩尾处理记录"
di "日期:`c(current_date)' `c(current_time)'"
di "变量:income, age, df_mean, ca_mean"
di "方法:winsor2,上下 1% 缩尾"
di "原因:存在极端值影响回归稳健性"
log closeS8.1 留痕要求
┌─────────────────────────────────────────────────────┐
│ ✦ 诚信检查点 S8.1 │
│ │
│ 核心原则:数据处理全留痕、可复现 │
│ │
│ 具体要求: │
│ □ 每一步数据清理/转换操作都有对应的 do 文件 │
│ □ do 文件可从原始数据一键运行到最终分析数据 │
│ □ 缩尾/插补/删除等操作注明: │
│ · 对哪些变量做的 │
│ · 用了什么方法(阈值/参数) │
│ · 影响了多少观测值 │
│ · 为什么这样做(理论/经验依据) │
│ □ 保留原始数据副本(survey_raw.dta 永不覆盖) │
│ □ 论文中报告样本筛选过程: │
│ "初始回收 N 份 → 剔除无效 n1 份 → │
│ 缺失关键变量剔除 n2 份 → 最终有效样本 n 份" │
│ │
│ 反面教材: │
│ "本文使用 XXX 份问卷数据"——读者无法判断你怎么从 │
│ 500 份变成了 387 份 │
└─────────────────────────────────────────────────────┘§8.3 一元分析
参见教材单元 14"一元分析":频数分布、集中趋势、离差。
集中趋势
| 统计量 | 含义 | 适用场景 | Stata 命令 |
|---|---|---|---|
| 均值 (Mean) | 所有值的算术平均 | 连续变量、近似正态 | summarize |
| 中位数 (Median) | 排序后中间值 | 偏态分布(如收入) | summarize, detail |
| 众数 (Mode) | 出现频率最高的值 | 分类变量 | tab |
* ── 集中趋势 ──
summarize income age df_mean // 默认输出:N/均值/标准差/最小/最大
summarize income, detail // 扩展:含中位数/四分位/偏度/峰度
tab gender // 分类变量的频数分布(含众数信息)离散程度
| 统计量 | 含义 | 特点 |
|---|---|---|
| 极差 (Range) | 最大值 − 最小值 | 对极端值极敏感 |
| 标准差 (SD) | 各值偏离均值的平均程度 | 最常用,假设近似正态 |
| 方差 (Variance) | SD 的平方 | 回归分析中更常见 |
| 四分位距 (IQR) | P75 − P25 | 稳健,不受极端值影响 |
| 变异系数 (CV) | SD / Mean | 无量纲,可跨变量比较 |
* ── 离散程度 ──
summarize income, detail
* 输出中包含:
* Std. dev. = 标准差
* Variance = 方差
* Range = 极差(Max - Min)
* P25, P50, P75 → IQR = P75 - P25
* 计算变异系数
quietly summarize income
di "CV = " r(sd)/r(mean)分布形态
* ── 分布可视化 ──
* 直方图
histogram income, frequency normal ///
title("家庭年收入分布") ///
xtitle("收入(元)") ytitle("频数") ///
note("虚线为正态拟合曲线")
* 核密度图(更平滑)
kdensity income, normal ///
title("收入核密度估计") ///
xtitle("收入(元)")
* 箱线图(检测偏态和异常值)
graph box income, title("收入箱线图")
* Q-Q 图(检验正态性)
qnorm income, title("收入 Q-Q 图")
* ── 正态性检验 ──
sktest income // 偏度+峰度联合检验
* H0:服从正态分布;p < 0.05 则拒绝→非正态
swilk income // Shapiro-Wilk 检验(样本 < 2000 推荐)
* H0:服从正态分布分类变量的频数分析
* ── 分类变量 ──
tab gender // 单变量频数
tab gender, nolabel // 显示数值而非标签
tab income_group // 收入分组的频数分布
tab1 gender education income_group // 多个分类变量一次性输出
* 带百分比的频数表
tab income_group, sort // 按频率排序综合示例:你的数据"长什么样"
* ── 数据概览(论文 Table 1 的前身)──
* 连续变量
summarize age income df_mean ca_mean, detail
* 分类变量
tab gender
tab education
tab income_group
* 一次性生成描述统计表
tabstat age income df_mean ca_mean, ///
statistics(n mean sd min p25 p50 p75 max) ///
columns(statistics) format(%9.2f)§8.4 双变量分析
参见教材单元 14"双变量分析":相关系数、交叉表。
相关分析
相关系数衡量两个连续变量之间线性关系的强度和方向:
| r 值范围 | 强度判断 |
|---|---|
| r | |
| 0.6 ≤ | r |
| 0.4 ≤ | r |
| 0.2 ≤ | r |
| r |
* ── Pearson 相关 ──
correlate df_mean ca_mean income // 简单相关
pwcorr df_mean ca_mean income, sig // 两两相关 + 显著性
pwcorr df_mean ca_mean income, sig star(0.05) // 标注显著性星号
* 输出解读:
* r = 0.65, p = 0.000 → 中等偏强的正相关,在 1% 水平显著
* 注意:相关 ≠ 因果!(第 4 章已强调)
* ── Spearman 秩相关(非正态分布时使用)──
spearman df_mean ca_mean // 基于排序的相关
* 适用于:有序变量 / 严重偏态 / 有异常值
* ── 相关矩阵热力图 ──
* 需要安装:ssc install corrtex
* 或使用 pwcorr 的输出手动制图交叉表(列联表)
交叉表展示两个分类变量的联合分布:
* ── 基本交叉表 ──
tab gender income_group // 频数
tab gender income_group, row // 行百分比
tab gender income_group, col // 列百分比
tab gender income_group, row chi2 // 行百分比 + 卡方检验
tab gender income_group, row chi2 expected // 含期望频数
* ── 卡方检验解读 ──
* H0:两个变量独立(无关联)
* p < 0.05 → 拒绝 H0 → 两变量存在显著关联
* 注意:期望频数 < 5 的单元格 > 20% 时,卡方检验不可靠
* → 使用 Fisher 精确检验:
tab gender income_group, exact
* ── 多组对比 ──
table income_group gender, stat(freq) stat(rowpercent)组间均值差检验
当你想知道"不同组的连续变量均值是否有显著差异"时:
* ── 两组比较:独立样本 t 检验 ──
* 例:男女的数字金融使用是否有显著差异?
ttest df_mean, by(gender)
* 输出解读:
* 看 "diff" 行:均值差 = 男 - 女
* 看 p 值:Pr(|T| > |t|) → 双尾 p
* p < 0.05 → 差异显著
* ── 多组比较:单因素方差分析 (ANOVA) ──
* 例:不同收入组的数字金融使用是否有显著差异?
anova df_mean income_group
* 或等价地:
oneway df_mean income_group, tabulate bonferroni
* 事后多重比较(哪两组之间有差异?)
anova df_mean income_group
* 如果 ANOVA 显著(p < 0.05),继续:
pwmean df_mean, over(income_group) bonferroni // Stata 16+
* 或:
oneway df_mean income_group, tabulate bonferroni scheffe
* ── 效应量(不仅看显著性,还看差异大小)──
* Cohen's d(两组):
* d = (M1 - M2) / Sp,其中 Sp 为合并标准差
* 判断:0.2 = 小效应;0.5 = 中效应;0.8 = 大效应双变量散点图
* ── 散点图 + 拟合线 ──
twoway (scatter df_mean income) ///
(lfit df_mean income), ///
title("数字金融使用与收入的关系") ///
xtitle("家庭年收入(元)") ///
ytitle("数字金融使用(均值)") ///
note("实线为 OLS 拟合线")
* 分组散点图
twoway (scatter df_mean income if gender==1, mcolor(blue)) ///
(scatter df_mean income if gender==2, mcolor(red)) ///
(lfit df_mean income if gender==1, lcolor(blue)) ///
(lfit df_mean income if gender==2, lcolor(red)), ///
legend(label(1 "男") label(2 "女")) ///
title("数字金融使用与收入(分性别)")§8.5 描述表三线表输出
学术论文中的"表 1:描述性统计"有严格的格式要求——三线表。
什么是三线表?
三线表 = 顶线 + 栏目线 + 底线,无竖线。这是国际学术期刊的通行格式:
──────────────────────────────────────────────
变量 观测值 均值 标准差 最小值 最大值
──────────────────────────────────────────────
年龄 387 42.35 12.18 18 78
家庭年收入 385 56,230 32,450 3,000 280,000
数字金融使用 387 3.42 0.89 1.00 5.00
信贷可得性 380 3.18 0.95 1.00 5.00
──────────────────────────────────────────────
注:数据来源于作者调查。收入单位为元/年。
──────────────────────────────────────────────方法一:esttab(推荐,适合复杂表格)
* ── 安装(首次使用)──
* ssc install estout
* ── 生成描述统计表 ──
* 步骤 1:用 postfile 手动构建
capture postclose desc_tab
tempname desc_tab
postfile `desc_tab' str20 varname n mean sd min max using "desc_tab.dta", replace
foreach var in age income df_mean ca_mean {
quietly summarize `var'
local vlabel : variable label `var'
if "`vlabel'" == "" local vlabel "`var'"
post `desc_tab' ("`vlabel'") (r(N)) (r(mean)) (r(sd)) (r(min)) (r(max))
}
postclose `desc_tab'
* 步骤 2:输出为三线表(RTF 格式,可粘贴到 Word)
use "desc_tab.dta", clear
listtab varname n mean sd min max, ///
type rstyle(HLTH HLTB BLB) ///
head("\hline 变量 & 观测值 & 均值 & 标准差 & 最小值 & 最大值 \\\\ \hline") ///
foot("\hline") ///
begin("") end(" \\\\") delimiter(" & ")
* 注意:listtab 需要 ssc install listtab方法二:tabstat + putexcel(简单直接)
* ── 方法二:tabstat 输出到 Excel ──
* 步骤 1:生成描述统计
tabstat age income df_mean ca_mean, ///
statistics(n mean sd min max) ///
columns(statistics) format(%9.2f) ///
save
* save 选项将结果存入 r(StatMat) 矩阵
* 步骤 2:导出到 Excel
matrix stats = r(StatMat)'
putexcel set "table1_descriptive.xlsx", replace
putexcel A1 = "变量" B1 = "观测值" C1 = "均值" D1 = "标准差" E1 = "最小值" F1 = "最大值"
putexcel A2 = matrix(stats)
putexcel close方法三:putdocx(直接生成 Word 文档)
* ── 方法三:putdocx 生成三线表 ──
capture putdocx clear
putdocx begin
* 标题
putdocx paragraph, style(Heading2)
putdocx text("表 1 主要变量描述性统计")
* 创建表格(5行6列,含表头)
putdocx table tbl1 = data(age income df_mean ca_mean), ///
varnames // 自动用变量名作行名
* 或手动构建更精确的表格:
local nrows = 5 // 表头 + 4 个变量
putdocx table desc = (`nrows', 6)
* 表头
putdocx desc(1,1) = "变量"
putdocx desc(1,2) = "观测值"
putdocx desc(1,3) = "均值"
putdocx desc(1,4) = "标准差"
putdocx desc(1,5) = "最小值"
putdocx desc(1,6) = "最大值"
* 填入数据
local row = 2
foreach var in age income df_mean ca_mean {
quietly summarize `var'
local vlabel : variable label `var'
putdocx desc(`row',1) = "`vlabel'"
putdocx desc(`row',2) = (r(N))
putdocx desc(`row',3) = (r(mean)), fmt(%9.2f)
putdocx desc(`row',4) = (r(sd)), fmt(%9.2f)
putdocx desc(`row',5) = (r(min)), fmt(%9.2f)
putdocx desc(`row',6) = (r(max)), fmt(%9.2f)
local row = `row' + 1
}
* 注释
putdocx paragraph
putdocx text("注:数据来源于作者 2026 年调查。收入单位为元/年。")
putdocx save "table1_descriptive.docx", replace
putdocx close
di "描述统计表已导出至 table1_descriptive.docx"方法四:esttab 一键输出(最简方案)
* ── 最简方案:esttab 描述统计 ──
* 需要:ssc install estout
* 先用 estpost 存储描述统计
estpost summarize age income df_mean ca_mean, detail
* 或:
estpost tabstat age income df_mean ca_mean, ///
statistics(count mean sd min max) columns(statistics)
* 导出三线表
esttab using "table1.rtf", replace ///
cells("count(fmt(0) label(观测值)) mean(fmt(2) label(均值)) sd(fmt(2) label(标准差)) min(fmt(2) label(最小值)) max(fmt(2) label(最大值))") ///
noobs nomtitle nonumber ///
title("表 1 主要变量描述性统计") ///
addnotes("注:数据来源于作者调查。") ///
label booktabs
* booktabs 选项 → 三线表格式分组描述表(论文常见 Table 1 变体)
* ── 按组报告描述统计 + 均值差检验 ──
* 例:按性别分组
estpost ttest age income df_mean ca_mean, by(gender)
esttab using "table1_by_gender.rtf", replace ///
cells("mu_1(fmt(2) label(男性均值)) mu_2(fmt(2) label(女性均值)) b(fmt(2) label(差异)) p(fmt(3) label(p值))") ///
noobs nomtitle nonumber ///
title("表 1 描述性统计(按性别分组)") ///
addnotes("注:*** p<0.01, ** p<0.05, * p<0.1") ///
label booktabsAI 辅助研究栏 · 第 8 章
AI 在描述统计中的合法应用
| 应用场景 | 具体做法 | 注意事项 |
|---|---|---|
| 代码生成 | 告诉 AI 你的变量名和需求,让它生成 Stata 代码 | 运行前检查语法和逻辑 |
| 输出解读 | 将 summarize, detail 输出贴给 AI,让它帮你判断分布特征 | 理解比背诵重要 |
| 异常值诊断 | 贴入极端值让 AI 分析可能原因 | 不能因为"不合理"就删除——需有依据 |
| 表格美化 | 让 AI 帮你把 esttab 输出调整为期刊要求的格式 | 格式可以 AI 辅助,数据不能 AI 编造 |
| 缺失值策略选择 | 描述你的数据缺失情况,让 AI 推荐策略 | 最终决策需结合理论和文献 |
AI 不能做的事
- ❌ 替你编造描述统计数据(论文中的每一个数字都必须来自真实运行结果)
- ❌ 帮你"美化"异常值使其"看起来合理"
- ❌ 替代你对数据质量的判断——AI 没有看过你的原始问卷
AI 诚信栏 · 第 8 章
S8.1 数据处理全留痕可复现
┌─────────────────────────────────────────────────────┐
│ ✦ 诚信检查点 S8.1 │
│ │
│ 核心原则: │
│ 从原始数据到论文中任何一张表格,中间的每一步操作 │
│ 都必须有代码记录,且他人可按你的代码完整复现。 │
│ │
│ 具体要求: │
│ □ 一个完整的 master.do 文件,从头到尾可运行 │
│ □ 文件命名有序: │
│ · 01_import.do → 数据导入 │
│ · 02_clean.do → 数据清理 │
│ · 03_descriptive.do → 描述统计 │
│ · 04_regression.do → 回归分析(第 9 章) │
│ □ 所有中间数据集有日期或版本号标注 │
│ □ 缩尾/插补/删观测等操作在 do 文件中注释说明理由 │
│ □ 论文表格由代码自动生成(而非手动在 Word 中打字) │
│ │
│ 自检方法: │
│ 把你的 do 文件发给同学,让 TA 从零运行一遍。 │
│ 如果 TA 能得到和你论文中一模一样的表格,你就合格了。 │
│ │
│ 反面教材: │
│ · "我跑出来是这个结果但我找不到当时的代码了" │
│ · 论文报告 N=387,但 do 文件跑出来是 N=392 │
│ · 表格中的数字与 log 文件不一致 │
└─────────────────────────────────────────────────────┘本章产出物
| 序号 | 产出物 | 文件名建议 | 说明 |
|---|---|---|---|
| 1 | 数据准备脚本 | 02_clean.do | 从原始到分析数据的全过程 |
| 2 | 数据体检报告 | data_health_check.log | 缺失/异常值/缩尾记录 |
| 3 | 描述统计表 | table1_descriptive.rtf | 三线表格式 |
| 4 | 分析数据集 | analysis_data.dta | 清洗完毕、可直接跑回归 |
自检题
1. 缺失值三种处理策略各自的适用条件是什么?
参考答案
| 策略 | 适用条件 | 注意事项 |
|---|---|---|
| 成列删除 | 缺失比例低 (< 5%)、缺失完全随机 (MCAR) | 样本量损失;若缺失非随机则产生偏误 |
| 均值/中位数插补 | 缺失少、变量近似正态、仅需粗略估计 | 低估标准误;扭曲分布形态 |
| 多重插补 (MI) | 缺失较多 (5–20%)、缺失随机 (MAR)、需精确推断 | 操作复杂;需报告插补模型设定 |
实践中,如果缺失 < 5% 且为随机缺失,成列删除通常可接受(Stata 回归默认行为)。缺失 > 5% 时建议使用 MI 并在稳健性检验中对比。
2. 为什么 winsor2(缩尾处理)必须留痕?
参考答案
三个原因:
(1) 可复现性(S8.1):他人需要知道你用了什么参数(1%? 5%? 单尾还是双尾?)才能复现结果
(2) 透明性:审稿人有权知道你对数据做了什么处理——隐藏的缩尾等同于数据操纵
(3) 稳健性检验需要:通常论文要报告"缩尾前"和"缩尾后"两组结果对比,如果没有留痕,你无法回去重跑
最佳实践:在 do 文件中写明 * 缩尾理由:income 存在 3 个极端值(> P99 的 5 倍),可能为录入错误,并保留缩尾前后的数据副本。
3. pwcorr 和 spearman 分别在什么情况下使用?两者结论不一致时怎么办?
参考答案
pwcorr(Pearson):两个连续变量、近似正态分布、线性关系spearman(Spearman 秩相关):变量严重偏态 / 有序分类变量 / 存在极端值 / 单调但非线性关系
两者不一致时:
- 先检查数据分布——如果严重偏态或有极端值,Spearman 更可靠
- 画散点图——看关系是线性还是单调非线性
- 在论文中报告 Spearman 结果,并在脚注说明"Pearson 相关方向一致但因偏态不显著"
4. 方向题:用你的研究数据做一张"描述统计+分组均值差"双栏表。
参考答案框架
示例结构(按城乡分组):
* 生成描述统计表(分城乡)
estpost ttest age income df_mean ca_mean, by(urban)
esttab using "table1_urban_rural.rtf", replace ///
cells("mu_1(fmt(2) label(农村均值)) mu_2(fmt(2) label(城镇均值)) b(fmt(2) label(差异)) p(fmt(3) label(p值))") ///
noobs nomtitle nonumber ///
title("表 1 主要变量描述性统计(按城乡分组)") ///
addnotes("注:*** p<0.01, ** p<0.05, * p<0.1。差异 = 城镇 - 农村。") ///
label booktabs关键点:(1) 变量选取需覆盖因变量、核心自变量和主要控制变量;(2) 分组依据需有理论支撑;(3) 表格注释说明分组标准和数据来源。
下一章预告:第 9 章进入实证分析的核心——回归模型的设定、估计与诊断。你的描述统计做扎实了,回归才能跑得放心。
农村金融业务及监管 2026 秋季 | AI 辅助金融研究学生自学手册