4

我想使用 PROC TABULATE 复制 PROC MEANS 的输出。这样做的原因是我希望将利润百分比(或利润)作为 PROC MEANS 输出中的变量之一,但希望抑制一个或多个统计数据的计算,即会有一个'- ' 或“N”和“SUM”下的“边距”行中的类似内容。

这是示例数据:

    data have;
       input username $  betdate : datetime. stake winnings;
       dateOnly = datepart(betdate) ;
       format betdate DATETIME.;
       format dateOnly ddmmyy8.;
       datalines; 
        player1 12NOV2008:12:04:01 90 -90 
        player1 04NOV2008:09:03:44 100 40 
        player2 07NOV2008:14:03:33 120 -120 
        player1 05NOV2008:09:00:00 50 15 
        player1 05NOV2008:09:05:00 30 5 
        player1 05NOV2008:09:00:05 20 10 
        player2 09NOV2008:10:05:10 10 -10 
        player2 15NOV2008:15:05:33 35 -35 
        player1 15NOV2008:15:05:33 35 15 
        player1 15NOV2008:15:05:33 35 15 
    run;

    data want;
        set have;
        retain margin;
        margin = (winnings) / stake;
    PROC PRINT; RUN;

我一直在用 PROC MEANS 计算统计数据(如下所示),但是“margin”变量的 SUM 统计数据的值没有任何意义:我想抑制这个值。因此,我一直在尝试使用 PROC TABULATE 复制此表以更好地控制输出,但到目前为止还没有成功。

    proc means data=want N sum mean median stddev min max maxdec=2 order=freq STACKODS;
        var stake winnings margin;
    run;

    proc tabulate data=want;
        var stake winnings margin;
        table stake * (N Sum mean Median StdDev Min Max);
    run;

我将不胜感激这方面的任何帮助。

4

1 回答 1

4

原则上,您不能将这种类型的输出创建为 TABULATE 函数的默认部分;本质上,您要求两个不同的表定义。您使用 SAS 语法所做的任何事情基本上都会向表格添加更多维度,但它不会解决您的核心问题。

您可以使用此代码获取所需的表,但它们仍然是不同的表:

PROC TABULATE DATA=want NOSEPS;
    VAR stake winnings margin;
    TABLE (stake winnings),(N SUM MEAN MEDIAN STDDEV MIN MAX);
    TABLE (margin),(N MEAN MEDIAN STDDEV MIN MAX);
RUN;

有一些关于破解 ODS 的指南来做你想做的事(即,创建“堆叠表”,其中几个子表被组装成一个表。查看这里的例子。如果你谷歌“SAS 堆栈表”你'会找到更多的例子。

我通过创建一个新的标记集在 HTML 中完成了这项工作 - 基本上,一个特殊的 ODS 目标可以删除表格之间的空格等。不幸的是,我没有我再使用的代码了;我搬到 R 来做自动报告。

于 2013-08-09T23:24:21.327 回答