首页 > 解决方案 > proc报告中跨变量拆分的变量的不同标签

问题描述

我想知道是否可以在 proc 报告中为跨变量下生成的每一列创建唯一标签。例如,假设我有以下数据:

data report;
    input ARM GRADE1 GRADE2 TOTAL N;
    datalines;
1 0 1 1 2
1 1 0 1 2
2 1 2 3 3
2 1 1 2 3
2 0 1 1 3
;
run;

在这里,我有 2 个手臂,每个年级的计数,然后是总数。我还包括了 N,这是每组的患者数量。我想使用proc reportwithARM作为这样的跨变量:

proc report data=report;
  column ARM, (GRADE1 GRADE2 TOTAL);
  define ARM / across;
run;

但是,我想以某种方式使 Total 列分别显示为ARM=1/ARM=2Total (N = 2)和下。Total (N = 3)这可能吗?或者有没有更简单的方法来设置我的数据,这样我就可以做到这一点?

标签: sas

解决方案


技术1

您可以通过将计数和总和堆叠在总计下的从属维度中来报告计数和总和。不完全是提问者想要的输出,但简单易行。

proc report data=report;
  column ARM, (GRADE1 GRADE2 TOTAL,(N SUM));
  define ARM / across;
run;

输出
在此处输入图像描述


技巧2

根据需要输出
在此处输入图像描述

基于 DATA Step 的转换为分类形式将重新排列允许“列名”作为数据呈现的数据。该REPORT选项NOCOMPLETECOLS用于防止与特定 N=nnn 无关的列。

列标题设置为' '隐藏列名,因为原来的列名在转置时变成了数据。

例子:

data report;
    input ARM GRADE1 GRADE2 TOTAL N;
    rownum + 1;
    datalines;
1 0 1 1 2
1 1 0 1 2
2 1 2 3 3
2 1 1 2 3
2 0 1 1 3
;
run;

* transpose the data, with a special name construct for the total;
data reportT;
  set report;
  by rownum arm;
  length name $40;
  name = 'Grade1'; value = Grade1; output;
  name = 'Grade2'; value = Grade2; output;
  name = cats('Total (n=', n, ')'); value=total; output;
  keep arm name value;
run;

ods html file='report.html' style=plateau;

proc report data=reportT NOCOMPLETECOLS;
  column arm, name, value;
  define arm / across;
  define name / ' ' across;
  define value / ' ' ;
run;

ods html close;

推荐阅读