如何按区间建立成功率?
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;
我有这样的数据: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;