用于计算累计回报率无效的SAS代码

时间:2017-06-13 20:55:49

标签: sas

我正在尝试使用SAS计算库存的累积回报。 (累计回报基本上是此时刻之前同一股票的所有回报的总和)。

但是,以下代码无法正常工作。它在CUM_RETURN字段中保持返回void。

return_sec是股票回报。 CUM_RETURN是我想要获得的累积回报。 MIDPRICE是股票价格。

除了累积回报之外的一切都运转良好。

数据集RETURNOUTSET按符号和时间排序。

  data RETURNOUTSET;
    set NBBOOUTSET; by Symbol;
    /* retain the price from last second */
    retain MIDPRICE CUM_RETURN; 
    LAG_MIDPRICE = lag(MIDPRICE);
    LAG_CUMRETURN = lag(CUM_RETURN);
    /* Make sure we are calculating the same ticker*/
    return_sec = (MIDPRICE - LAG_MIDPRICE) / LAG_MIDPRICE;
    if first.symbol then CUM_RETURN = 0;
    else CUM_RETURN  = return_sec + LAG_CUMRETURN;
    RMIN = 0.01/MIDPRICE;
    drop LAG_MIDPRICE LAG_CUMRETURN BB BO MIDPRICE;
  run;

我在想 - 出了什么问题?

1 个答案:

答案 0 :(得分:1)

 else 
      return_sec = .;
      CUM_RETURN = .;

你认为这样做了什么?

设置return_Sec=. if symbol ne lag(symbol),这可能就是你想要的。

它还为每一行设置CUM_RETURN = .。这可能是不受欢迎的。我怀疑,您希望do...end围绕该群组elseelse do; retun_sec = .; cum_return = .; end; 相邻。

else call missing(of retun_sec cum_return);

POST