我有這樣的資料:
是否可以按間隔確定成功率?例如:我們正在添加成功的專案狀態(count_n,其中 states=successful)并將其除以 1-10 間隔之間的專案總數(count_n 之和,其中間隔為 1-10)。我們對間隔 1-20 做同樣的事情。我想得到這樣的資料:成功率 | 區間 X 1-10 Y 10-20
我在 SAS 中編碼,但我可以在其中使用 SQL Server。謝謝。
uj5u.com熱心網友回復:
在 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非成功狀態和count_n成功狀態將為 0 。這是一種快捷方式,可防止您必須進行多次連接才能獲得所需的分子。
示例代碼:
data have;
length state $20.;
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%
uj5u.com熱心網友回復:
我更喜歡盡可能使用預定義的 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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/404958.html
標籤:
上一篇:修復SQLUPDATE:將所有行更新為相同的值,而不是基于另一個表列的值
下一篇:包括分組查詢的中位數。
