2015-06-16 3 views
2

В моем наборе данных есть четыре переменные. Company - название компании. Return - возврат Company в день Date. Weight - вес этой компании на рынке.как рассчитать средневзвешенное значение, но исключить сам объект, используя SAS

Я хочу сохранить все переменные в исходном файле и создать дополнительную переменную, которая является возвратом рынка (исключая). Рыночная доходность, соответствующая акции «a», является суммой возврата всех взвешенных акций на том же Date на рынке, исключая акции a. Например, если на рынке есть 3 акции a, b и c. Возврат (C) * [вес (C)/(вес (b) + вес (C) (вес) (вес) (вес))]. Аналогичным образом, рыночная доходность для акции b равна Return (a) * [Вес (a)/(вес (a) + вес (C))] + Возврат (C) * [вес (C)/(вес (a) + вес (C)].

Я пытаюсь использовать резюме ргос, но эта функция не может исключить запашем когда рассчитать доходность рынка для акций а.

PROC SUMMARY NWAY DATA ; 
    CLASS Date ; 

    VAR Return/WEIGHT = weight; 

    OUTPUT 
     OUT = output 
     MEAN (Return) = MarketReturn; 
RUN; 

может кто-нибудь научить меня, как решить эту проблему, пожалуйста, Я относительно новичок в этом программном обеспечении, поэтому я не знаю, следует ли мне использовать цикл или может быть какая-то лучшая альтернатива.

ответ

2

Это может быть b e сделано с немного фантазии алгебры. Тем не менее, это не что-то встроенное.

В основном:

  • Построить "общую" рыночную доходность
  • Построить запас по доходности акций (так просто возвращение A)
  • Вычтите из той части, что А вносит свой вклад в общей сложности.

Благодаря простой математике, которая генерирует эти списки, это довольно легко сделать.

Общая сумма = ((среднее A*Awgt) + (в среднем до конца * сумма их весов))/(сумма Awgt + сумма остальных wgts)

Таким образом, решить, что для (среднее значение остатка * среднее значение остатка wgts/sum of rest wgts).

Exclusive Сумма: ((среднее всего * сумма всех wgts) - (в среднем A * сумма A wgts))/(сумма всех wgts - сумма А wgts)

Что-то вроде этого.

data returns; 
    input stock $ return weight; 
    datalines; 
A .50 1 
B .75 2 
C .33 1 
;;;; 
run; 

proc means data=returns; 
    class stock; 
    types() stock; *this is the default; 
    weight weight; 
    output out=means_out mean= sumwgt= /autoname; 
run; 

data returns_excl; 
    if _n_=1 then set means_out(where=(_type_=0) rename=(return_mean=tot_return return_sumwgt=tot_wgts)); 
    set means_out(where=(_type_=1)); 
    return_excl = (tot_return*tot_wgts-return_mean*return_sumwgt)/(tot_wgts-return_sumwgt); 
run; 
Смежные вопросы