2012-01-24 270 views
6

不错的表我想创建一个“好看的表”使用SAS ODS RTF输出和PROC REPORT程序。花了整整一天在谷歌之后,我已经成功地产生如下:如何创建使用PROC REPORT和ODS RTF输出

数据集

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表(略简体):

What I get

但是,我想在变量名称列中添加一个变量标签'变量1,n(%)'作为单独的行(不包括在标题行中)。我也想在汇总表中添加额外的变量和统计信息。

最后,我想要的东西,看起来像这样:

enter image description here

我已经试过“一切” - 有没有谁知道如何做到这一点?

+0

看看COLUMN语句文档创建列标题...如果你发布一些示例数据可以更容易地尝试解决方案 –

+0

感谢您的提示。我已经添加了测试数据集和Word输出的新图像。我不确定列声明是我正在寻找的那个...或者我只是不明白如何正确使用它。也许这个问题在它的新形式上有些浮夸 – Gordon

回答

5

我知道这已经开了一段时间,但我也被这种挣扎一段时间,而这正是我想通了。所以......

总之,SAS有困难输出包含多于一个类型的他们表“格式”中很好地格式化表格。例如,一列表中的列中途改变(就像你在研究人群的研究研究的“表1”中常见的那样)。

在这种情况下,你要使用PROC报告,但我不认为它会在这里工作。你想要做的是将两个不同的报告堆叠在一起,真的。您在中途更改列值,SAS本身不支持该值。

一些替代的方法是:

  • 执行所有的计算并仔细它们输出到SAS的数据集,在你想要的位置。然后,使用PROC PRINT打印它们。这是我所能描述的巨大努力。

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

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

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

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 TABULATE语句的肉。

PROC TABULATE DATA=survey; 
    CLASS grp; 
    VAR var1--var5; 
    TABLE MEDIAN QRANGE,var1; 
    TABLE grp,var2*(N PCTN); 
RUN; 

TABULATE基本上用逗号和星号来分隔事物。像grp * var1之类的默认值是一个输出,其中列是第一个变量,然后每个子组都有子列。要添加行,请使用列;要指定您想要的统计数据,请添加关键字。

上面的代码可以让你接近你在第一个例子中的东西(不是ODS格式化的,但我想你可以加回去);它只是在两个不同的表格中。

我发现下面的文件,当我解决这个问题有用:

http://www.lexjansen.com/pharmasug/2005/applicationsdevelopment/ad16.pdf

http://www2.sas.com/proceedings/sugi31/089-31.pdf

1

1 ODS有一些有趣的格式设置功能(如对准数字,所以小数点去的相同的列),但是对于更复杂的情况它们的用处是有限的。最灵活的解决方案是完全建立一个格式化字符串自己和旁路PROC报告的格式设施,如:

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; 

您可以设置VARNUM和组在PROC REPORT ORDER变量,并添加标题,如“变1”或“花式变量2“通过COMPUTE BEFORE; LINE

2为了进一步保持从搞乱在ODS RTF输出布局P​​ROC报告,应考虑重新启用ASIS风格选项:

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