2

我有以下示例数据:

data have;
 input username $ stake betdate : datetime.;
dateOnly = datepart(betdate) ;
format betdate DATETIME.;
format dateOnly ddmmyy8.;
datalines; 
player1 90 12NOV2008:12:04:01
player1 -100 04NOV2008:09:03:44
player2 120 07NOV2008:14:03:33
player1 -50 05NOV2008:09:00:00
player1 -30 05NOV2008:09:05:00
player1 20 05NOV2008:09:00:05
player2 10 09NOV2008:10:05:10
player2 -35 15NOV2008:15:05:33
run;
PROC PRINT; RUN;
proc sort data=have;
by username betdate;
   run;
 data want;
set have;
by username dateOnly betdate;   
retain calendarTime eventTime cumulativeDailyProfit standardDeviationStake;
if first.username then calendarTime = 0;
if first.dateOnly then calendarTime + 1;
if first.username then eventTime = 0;
if first.betdate then eventTime + 1;
if first.username then cumulativeDailyProfit = 0;
if first.dateOnly then cumulativeDailyProfit = 0;
if first.betdate then cumulativeDailyProfit + stake;
run;
PROC PRINT; RUN;

我需要一些方法来比较具有不同赌注大小的玩家并规范他们的赌注。对于每个玩家的赌注,我正在考虑计算该赌注的标准偏差(如下所示)。然后我可以将这些平方和得到平方根,得到每个玩家下注的总标准差。然后我可以将玩家正在玩的每个赌注与他的总标准差进行比较。

如果这个游戏是抛硬币,获胜的概率是 0.50。这是二项式结果,因此标准差为 σ = (p(1 - p)/n)1/2。所以上面第一个赌注的标准差是 90*[0.5*0.5]^0.5 = 45。

我如何计算每个玩家赌注的标准差,就像我计算下面的累积利润值一样?我可能需要每个赌注的标准偏差(对于每个玩家),每个玩家的总标准偏差,以及“标准化赌注”,即赌注赌注除以赌注的标准偏差。然后,我可以在具有不同赌注大小的玩家之间进行一种比较。

我将不胜感激任何帮助!

谢谢。

4

1 回答 1

2

标准差对单次投注没有任何意义;它只对一个玩家有意义,或者对一个特定时间段的玩家有意义。特定定义的选择(即,什么时间段等)完全超出了 Stack Overflow 的范围;那将是一个交叉验证的问题。但是,计算标准偏差本身肯定在范围内:

proc means data=have;
class username;
var stake;
output out=want stddev=stake_stddev;
run;

type username;如果您不想要跨所有玩家的标准开发,您可以添加一条语句。你也可以要求一个平均值或总和或任何你认为有用的东西。

如果您想跨时间段执行此操作,您可以创建一个具有时间段变量的数据集,根据需要重复行,以便它们处于它们符合条件的每个时间段,并将其添加到类语句中;或者,如果您拥有该许可(ETS = 时间序列分析),您可以使用其中一个 ETS 过程。 PROC EXPAND可能是您最好的选择,因为它为您提供了将变量转换为其 STDEV 总和和/或 USS/CSS(以及许多其他选项)的选项。如果您拥有该许可并发现它有用,请在评论中说明,我或其他人可以帮助构建该代码。

于 2013-07-25T14:05:26.670 回答