Stata自定义表格制作:分年度分类别展示均值与标准差
解决Stata中asdoc搭配bysort报错「too many variables (to sort by) specified」的方案
报错核心原因是你错误地在bysort后加入了过多变量——bysort仅需指定分组维度变量(即类别type:Old/Updated、年份year:2020/2021/2022),不需要把要统计的10个变量放进bysort列表里。
以下是两种可行的实现方案:
方法1:转长格式后批量统计
先把宽格式数据转为长格式,用少量分组变量就能完成批量统计,适合多变量场景:
* 假设数据为宽格式(如var1_2020、var1_2021这类带年份后缀的变量),先转长 reshape long var1_ var2_ var3_ var4_ var5_ var6_ var7_ var8_ var9_ var10_, i(type) j(year) * 若数据已是长格式(已有type和year单独变量),跳过reshape步骤 * 按分组统计所有变量的均值和标准差,输出到文档 bysort type year: asdoc sum var1 var2 var3 var4 var5 var6 var7 var8 var9 var10, save(desc_stats.doc) replace dec(2)
方法2:foreach循环逐个变量输出
如果不想调整数据结构,用循环遍历每个变量,按分组统计后合并到同一文档:
* 初始化文档并设置标题 asdoc, save(desc_stats.doc) replace title("Mean & SD by Type and Year") * 定义要统计的变量列表 local vars var1 var2 var3 var4 var5 var6 var7 var8 var9 var10 * 循环处理每个变量,追加到文档 foreach var of local vars { bysort type year: asdoc sum `var', save(desc_stats.doc) append dec(2) label }
关键提醒
bysort后只保留type和year两个分组变量,绝对不能加入待统计的变量。- 如果年份是通过不同列区分的(比如2020年数据单独在一列),必须先通过
reshape转成长格式,让年份成为单独的分组变量,否则无法用bysort按年份分组统计。
内容的提问来源于stack exchange,提问作者theotherbik
相关产品推荐
相关产品推荐

