SAS中文论坛

标题: 哪位大侠会使用lag函数递归调用的,先谢谢了 [打印本页]

作者: shiyiming    时间: 2008-7-12 22:18
标题: 哪位大侠会使用lag函数递归调用的,先谢谢了
借人气,再与大家探讨一个问题,用sas计算Exponential Moving Average (EMA),公式如下:
EMA(current) = ( (Price(current) - EMA(prev) ) x Multiplier) + EMA(prev)
其中Multiplier=(2 / (Time periods + 1) )
EMA的初始值为前n天的收盘价的平均值。
有兴趣的朋友探讨一下阿,相关的公式和定义要是我说的不明白,可以知在百度里搜索一下阿,谢谢
缘来是你
3级会员
  
帖子: 64
加入时间: 2006年 12月 18日 周一 11:33 am
私人短信 页首
--------------------------------------------------------------------------------
编辑此贴删除帖子举报此文章信息引用回复 Re: 万恶的lag函数
由 xgghxkhuang 于 2008年 7月 12日 周六 10:15 pm

data Shangzhenzhishu;
input date yymmdd10. Oppr Hipr Lopr Clpr vol;
format date yymmdd10.;
cards;
1990-12-19 96.05 99.98 95.79 99.98 126000
1990-12-20 104.30 104.39 99.98 104.39 19700
1990-12-21 109.07 109.13 103.73 109.13 2800
1990-12-24 113.57 114.55 109.13 114.55 3200
1990-12-25 120.09 120.25 114.55 120.25 1500
1990-12-26 125.27 125.27 120.25 125.27 10000
1990-12-27 125.27 125.28 125.27 125.28 6600
1990-12-28 126.39 126.45 125.28 126.45 10800
1990-12-31 126.56 127.61 126.48 127.61 7800
;
run;
data try;
set Shangzhenzhishu;
t=_n_;
m=2/(t+1);
run;
data miean;
set try (obs=5);
keep Clpr;
run;
proc means data=miean mean;
output out=em1;
run;
data em1;
set em1;
where _stat_="MEAN";
keep clpr;
run;
data ema;
retain b1 109.66;
set try;
run;
data ema;
retain ema ;
set ema;
if _n_=1 then do;
ema=(( clpr - b1 )*m + b1);
end;
bema=lag(ema);
run;
data new;
retain bema3;
set ema;
if _n_ ne 1 then ema=(( clpr - bema3 )*m + bema3);
bema3=lag(ema);
run;
data end;
set ema;
keep ema bema2;
run;
我已经偏写到最后一步了,取前五个数据的收盘价格为初始值,计算,可是lag函数无效了,
无论你是设定中间变量还是直接调用,你休想在下一行数据中调用它进行计算,这个lag失效了,完全不是像要得到的结果。




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2