gpt4 book ai didi

sas - 如何使用 PROC REPORT 和 ODS RTF 输出创建漂亮的表

转载 作者:行者123 更新时间:2023-12-04 15:02:43 24 4
gpt4 key购买 nike

我想使用 SAS ODS RTF 创建一个“漂亮的 table ”输出和 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 表(稍微简化):

What I get

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

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

enter image description here

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

最佳答案

我知道这已经开放了一段时间,但我也为此苦苦挣扎了一段时间,这就是我想出来的。所以...

简而言之,SAS 无法输出格式良好的表格,其中包含不止一种类型的表格“格式”。例如,列在中途发生变化的表格(就像您通常在描述研究人群的研究的“表 1”中找到的那样)。

在这种情况下,您尝试使用 PROC REPORT,但我认为它在这里不起作用。您想要做的是将两个不同的报告堆叠在一起,真的。您正在中途更改列值,而 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

    关于sas - 如何使用 PROC REPORT 和 ODS RTF 输出创建漂亮的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8994748/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com