如何按区间建立成功率?

How to establish successful rate by interval?

我有这样的数据:state of projects - number of state's projects - interval

是否可以按区间建立成功率? 例如:我们添加成功的项目状态(count_n,其中 states=successful)并将其除以 1-10 区间之间的项目总数(count_n 的总和,其中区间为 1-10)。我们对间隔 1-20 做同样的事情。 我想得到这样的数据: 成功率 |间隔 X 1-10 是 10-20

我在 SAS 中编码,但我可以在其中使用 SQL 服务器。 谢谢

在 PROC SQL 中,你可以这样做:

proc sql;
    create table want as
        select interval
             , sum( (upcase(state) = 'SUCCESSFUL')*count_n)/sum(count_n) format=percent8.1 as success_rate
        from have
        group by interval
    ;
quit;

代码 (upcase(state) = 'SUCCESSFUL') 生成一个 1/0 值,以便仅对状态成功的行求和。将其乘以 count_n 将为非成功状态提供 0,为成功状态提供 count_n。这是一个快捷方式,可让您不必进行多次联接即可获得所需的分子。

示例代码:

data have;
    length state .;
    input state$ count_n interval$;
    datalines;
successful 70 1-10
successful 10 1-10
fail 20 1-10
successful 70 11-20
successful 5 11-20
fail 25 11-20
;
run;

输出:

interval    success_rate
1-10        80.0%
11-20       75.0%

我更喜欢尽可能使用预定义的 SAS 过程 - 它们通常效率更高。

对于这样的事情,您可以使用 PROC FREQ。 您需要用计数指定 WEIGHT 以指示每个观察值被多次计算,然后您可以获得各种百分比 - COL_PCT 在这种情况下是每个类别。

删除 WHERE/KEEP 以查看完整输出及其为您生成的不同统计信息。这些解决方案都没有考虑缺失值。如果需要,请在 PROC FREQ 中添加 MISSING 选项。

proc freq data=have noprint;
table state*interval / out=want (keep = state interval count pct_col where=(state='successful')) missing outpct;
weight count_n;
run;

proc print data=want;
run;