2013-07-25 2 views
2

У меня есть следующие данные выборки:SAS: Вычислить стандартное отклонение на лету в datastep

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.

Как рассчитать стандартное отклонение ставки каждого игрока, как я рассчитал значения совокупной прибыли ниже? Мне, вероятно, нужно стандартное отклонение каждой ставки (для каждого игрока), общее стандартное отклонение для каждого игрока и «нормализованная ставка», т. Е. Ставка ставки, деленная на отклонение позиции ставки. Затем я смогу провести какое-то сравнение между игроками с разной величиной ставки.

Буду признателен за любую помощь на этом!

Спасибо.

ответ

2

Стандартное отклонение не имеет никакого значения для одной ставки; это будет иметь значение только для игрока в целом или для игрока в течение определенного периода времени. Выбор конкретного определения (т. Е. Какого периода времени и т. Д.) Выходит за рамки стека переполнения; это будет вопрос с перекрестными полномочиями. Однако вычисление самого стандартного отклонения, конечно, в сфере:

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

Вы можете добавить type username; заявления, если вы не хотите, чтобы через-все-игрок STDDEV. Вы также можете запросить среднее значение или сумму или все, что вы найдете полезным.

Если вы хотите сделать это через промежутки времени, вы можете создать набор данных с переменной периода времени, повторяя строки по мере необходимости, чтобы они находились в каждый период времени, на который они претендуют, и добавьте это в оператор класса ; или вы можете использовать один из процессов ETS, если у вас есть лицензия (ETS = анализ временных рядов). PROC EXPAND, скорее всего, ваш лучший выбор, поскольку он дает вам возможность превратить переменную в ее сумму STDEV и/или USS/CSS (среди многих других опций). Если у вас есть эта лицензия и найти ее полезной, скажите об этом в комментариях, и я или другие могут помочь в создании этого кода.

Смежные вопросы