我正在尝试使用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;
我在想 - 出了什么问题?
答案 0 :(得分:1)
else
return_sec = .;
CUM_RETURN = .;
你认为这样做了什么?
设置return_Sec=.
if symbol ne lag(symbol)
,这可能就是你想要的。
它还为每一行设置CUM_RETURN = .
。这可能是不受欢迎的。我怀疑,您希望do...end
围绕该群组else
与else do;
retun_sec = .;
cum_return = .;
end;
相邻。
else call missing(of retun_sec cum_return);
或
POST