gpt4 book ai didi

SAS:在 PROC TABULATE 中复制 PROC MEANS 输出

转载 作者:行者123 更新时间:2023-12-02 03:16:01 27 4
gpt4 key购买 nike

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

这里是示例数据:

    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;

如果有任何帮助,我将不胜感激。

最佳答案

原则上,您不能将这种类型的输出创建为 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 来执行您想要的操作的指南(即创建“堆叠表”,其中将多个子表组装成一个表。查看 here 作为示例。如果您 Google“SAS”堆栈表”您会发现更多示例。

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

关于SAS:在 PROC TABULATE 中复制 PROC MEANS 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18156155/

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