Sas 如何使用PROC报告和ODS RTF输出创建漂亮的表

Sas 如何使用PROC报告和ODS RTF输出创建漂亮的表,sas,Sas,我想使用SASODS RTF输出和PROC REPORT过程创建一个“好看的表”。在谷歌上花了一整天的时间后,我成功地制作了以下内容: 数据集 DATA survey; INPUT id var1 var2 var3 var4 var5 var6 ; DATALINES; 1 1 35 17 7 2 2 17 1 50 14 5 5 3 33 1 45 6 7 2 7 49 1 24 14 7 5 7 65 2 52 9 4 7 7 81 2

我想使用SAS
ODS RTF
输出和
PROC REPORT
过程创建一个“好看的表”。在谷歌上花了一整天的时间后,我成功地制作了以下内容:

数据集

DATA survey;
   INPUT id var1 var2 var3 var4 var5 var6 ;
   DATALINES;
 1  1  35 17  7 2 2
17  1  50 14  5 5 3
33  1  45  6  7 2 7
49  1  24 14  7 5 7
65  2  52  9  4 7 7
81  2  44 11  7 7 7
2   2  34 17  6 5 3
18  2  40 14  7 5 2
34  2  47  6  6 5 6
50  2  35 17  5 7 5
;
RUN;

DATA survey;
    SET survey;
    LABEL var1 ='Variable 1';
    LABEL var2 ='Fancy variable 2';
    LABEL var3 ='Another variable no 3';
RUN;

LIBNAME mylib 'C:\my_libs';
RUN;

PROC FORMAT LIBRARY = mylib.survey;
    VALUE groups 1 = 'Group A'
                2 = 'Group B'
    ;

OPTIONS FMTSEARCH = (mylib.survey);

DATA survey;
    SET survey;
    FORMAT var1 groups.;
RUN; 
**用于创建rtf文件的代码**

ods listing close;
ods escapechar = '^';
ods noproctitle;

options nodate number;
footnote;

ODS RTF FILE = 'C:\my_workdir\output.rtf' 
author = 'NN'
title = 'Table 1 name'
bodytitle 
startpage = no
style = journal;
options papersize = A4 
orientation = landscape;

title1 /*bold*/ /*italic*/ font = 'Times New Roman'  height = 12pt justify = center underlin = 0 color = black bcolor = white 'Table 1 name';
footnote1 /*bold*/ /*italic*/ font = 'Times New Roman'  height = 9pt justify = center underlin = 0 color = black bcolor = white 'Note: Created on January 2012';

PROC REPORT DATA = survey nowindows headline headskip MISSING
    style(header) = {/*font_weight = bold*/ font_face = 'Times New Roman' font_size = 12pt just = left}
    style(column) = {font_face = 'Times New Roman' font_size = 12pt just = left /*asis = on*/};
    COLUMN var1 var1=var1_n var1=var1_pctn;
    DEFINE var1 / GROUP ORDER=FREQ DESCENDING 'Variable';
    DEFINE var1_n / ANALYSIS N 'Data/(N=)';
    DEFINE var1_pctn / ANALYSIS PCTN format = percent8. '';
RUN;

ODS RTF CLOSE;
这将在Word中生成一个RTF表,如下所示(稍微简化):

但是,我想在变量名称列的组上方添加一个变量标签“variable 1,n(%)”,作为一个单独的行(不在标题行)。我还想在聚合表中添加其他变量和统计信息

最后,我想要这样的东西:


我尝试过“一切”-有人知道怎么做吗?

我知道这已经开放了一段时间,但我也为此挣扎了一段时间,这就是我发现的。所以

简言之,SAS在输出包含一种以上表格“格式”的格式良好的表格时遇到问题。例如,一个表,其中列在中途发生了更改(就像您在描述研究人群的研究报告的“表1”中经常看到的那样)

在本例中,您尝试使用PROC REPORT,但我认为它在这里不起作用。你要做的是把两个不同的报告堆叠在一起。您正在中途更改列值,SAS本机不支持该操作

一些替代办法是:

  • 执行所有计算,并小心地将它们输出到SAS中您想要的位置的数据集。然后,使用PROC PRINT打印它们。这是我只能形容为巨大的努力

  • 创建一个新的标记集,允许您输出多个文件,但删除每个文件之间的间距,并将它们对齐到相同的宽度,从而有效地创建一个表。这也相当耗时;我尝试使用HTML和自定义CSS文件和标记集,但并不十分简单

  • 使用不同的程序(在本例中为PROC TABLATE),然后手动删除每个表格之间的间距,并调整宽度以获得最终表格。这不是完全自动化的,但它可能是最快的选择

PROC TABLATE很酷,因为您可以在一个示例中使用多个table语句。下面,我在里面放了一些代码,显示了我在说什么

DATA survey;
   INPUT id grp var1 var2 var3 var4 var5;
   DATALINES;
     1  1  35 17  7 2 2
    17  1  50 14  5 5 3
    33  1  45  6  7 2 7
    49  1  24 14  7 5 7
    65  2  52  9  4 7 7
    81  2  44 11  7 7 7
    2   2  34 17  6 5 3
    18  2  40 14  7 5 2
    34  2  47  6  6 5 6
    50  2  35 17  5 7 5
;
RUN;
我发现您的示例代码有点混乱;var1看起来像一个分组变量,var2看起来像第一个实际的分析变量,所以我稍微修改了代码。接下来,我快速创建了您以前使用的格式

PROC FORMAT;
    VALUE groupft 1 = 'Group A' 2 = 'Group B';
RUN;

DATA survey;
    SET survey;
    LABEL var1 ='Variable 1';
    LABEL var2 ='Fancy variable 2';
    LABEL var3 ='Another variable no 3';
    FORMAT var1 groupft.;
RUN;
现在,PROC tablate语句的核心部分

PROC TABULATE DATA=survey;
    CLASS grp;
    VAR var1--var5;
    TABLE MEDIAN QRANGE,var1;
    TABLE grp,var2*(N PCTN);
RUN;
制表基本上使用逗号和星号来分隔事物。grp*var1之类的默认值是一个输出,其中列是第一个变量,然后每个子组都有子列。要添加行,请使用列;要指定所需的统计信息,请添加关键字

上面的代码与第一个示例中的代码非常接近(不是ODS格式的,但我想您可以在后面添加它);就在两张不同的桌子里

当我解决这个问题时,我发现以下文件很有用:


1 ODS有一些有趣的格式化功能(如对齐数字,使小数点位于同一列),但对于更复杂的情况,它们的用处有限。最灵活的解决方案是自己创建格式化字符串,完全绕过PROC REPORT的格式化功能,如:

data out;
    length str $25;
    set statistics;
    varnum = 1;
    group = 1;
    str = put( median, 3. );
    output;
    group = 2;
    str = put( q1, 3. ) || " - " || put( q3, 3. );
    output;
run;
您可以在PROC报告中将varnum和group设置为订单变量,并通过COMPUTE BEFORE添加“变量1”或“花式变量2”等标题;线

<P>2为了进一步保持OPRF报告在ODS RTF输出中扰乱布局,考虑重新启用ASIS样式选项:

define str / "..." style( column ) = { asis= on };

查看创建列标题的列语句文档…如果您发布一些示例数据,将更容易尝试解决方案谢谢您的提示。我添加了一个测试数据集和一个新的Word输出图像。我不确定column语句是否是我要查找的语句。。。或者我只是不知道如何正确使用它。也许这个问题以新的形式被澄清了