如何调整SAS Proc Tabulate输出:将年度类变量纵向排列
解决Proc Tabulate表格过宽的方案:转置数据+重新制表
你需要先把宽表转成窄表(长表),原数据里年度是独立变量,没法直接让它们纵向排列,转置后就能把年份作为分类变量使用,轻松实现纵向布局。
步骤1:转置数据
先把21个年度变量转成行,同时保留分组变量grupp,并提取直观的年份信息:
/* 转置宽表为长表 */ proc transpose data=grundkom out=transposed(rename=(COL1=kommune)) name=var_name; by grupp; /* 保留分组变量,确保每个分组的年度数据对应正确 */ var kommuntxt2000-kommuntxt2021; /* 指定要转置的所有年度变量 */ run; /* 从原变量名中提取年份,生成year变量 */ data transposed_clean; set transposed; /* 从"kommuntxt2000"这类变量名中提取后4位数字作为年份 */ year = input(substr(var_name, 10), 4.); drop var_name; /* 清理不需要的中间变量 */ run;
步骤2:用Proc Tabulate生成纵向百分比表格
转置后的数据结构更适合纵向展示,你可以根据需求选择百分比的计算逻辑:
选项1:展示每个(年份+类别)组合下,各分组的占比
proc tabulate data=transposed_clean format=percent8.1; class year kommune grupp/missing; /* 行:年份 → 类别;列:分组;计算该(year+kommune)组合内的分组占比 */ table (year*kommune), grupp*pctn<year*kommune>='分组占比'; run;
选项2:展示每个分组内,各(年份+类别)的占比
如果需要看分组内部的结构,调整百分比计算逻辑:
proc tabulate data=transposed_clean format=percent8.1; class year kommune grupp/missing; /* 行:年份 → 类别;列:分组;计算该分组内的(year+kommune)占比 */ table (year*kommune), grupp*pctn<grupp>='分组内占比'; run;
说明
- 转置后的数据集里,每一行对应一个分组、一个年份、一个类别值,完美适配纵向排列的需求。
format=percent8.1是让百分比显示为带一位小数的格式,你可以根据需要调整(比如percent7.0显示整数百分比)。
内容的提问来源于stack exchange,提问作者Tobias Nordqvist
相关产品推荐
相关产品推荐

