使用PROC REPORT的ACROSS选项时如何实现输出垂直对齐?
让PROC REPORT中ACROSS变量的不同取值显示在同一行的解决方案
问题描述
我使用以下SAS代码生成Excel输出时,性别变量kon的不同取值对应的内容被显示在不同行。希望同一组(相同bladnamn、variabel_cat_varde、alder_grupp)的内容无论性别如何都能显示在同一行:
ods excel file="[path].xlsx" options(sheet_interval='bygroup' sheet_name="#byval(bladnamn)"); PROC REPORT data=export; by bladnamn; column bladnamn kon, (variabel_cat_varde alder_grupp andel CI_lower CI_upper lillan); /* define variabelnamn / order order=internal;*/ /*define order / order order=internal;*/ /*define variabel / order order=internal;*/ define bladnamn / noprint; define variabel_cat_varde / display; define alder_grupp / display; define andel / analysis; define CI_lower / analysis; define CI_upper / analysis; define lillan / analysis; DEFINE kon / ACROSS ORDER=INTERNAL; run; ods excel close;
解决方案
问题核心在于当前将variabel_cat_varde和alder_grupp定义为display类型,PROC REPORT会将每个观测单独作为一行展示;而ACROSS变量kon的不同取值会基于观测拆分显示。要实现同一组内容在同一行,需调整分组变量的定义并优化列结构:
- 将
variabel_cat_varde和alder_grupp从display改为group类型,PROC REPORT会自动合并相同取值的分组行 - 调整COLUMN语句顺序,将分组变量放在ACROSS变量之前,先确定分组维度,再展示不同性别对应的统计值
修改后的代码如下:
ods excel file="[path].xlsx" options(sheet_interval='bygroup' sheet_name="#byval(bladnamn)"); PROC REPORT data=export; by bladnamn; /* 调整列顺序:分组变量在前,ACROSS变量关联分析变量在后 */ column bladnamn variabel_cat_varde alder_grupp kon, (andel CI_lower CI_upper lillan); define bladnamn / noprint; /* 将分组变量设为group类型,合并相同取值的行 */ define variabel_cat_varde / group; define alder_grupp / group; define andel / analysis; define CI_lower / analysis; define CI_upper / analysis; define lillan / analysis; DEFINE kon / ACROSS ORDER=INTERNAL; run; ods excel close;
补充说明
如果你的export数据集是长格式(即每个性别对应一条观测),上述修改后,PROC REPORT会将同一variabel_cat_varde和alder_grupp下的不同kon值对应的统计量合并到同一行,每个性别作为单独的列展示。如果数据本身是宽格式,确保分组变量的取值唯一,也能达到预期效果。
内容的提问来源于stack exchange,提问作者Magnus
相关产品推荐
相关产品推荐

