全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1725 10
2022-01-19
悬赏 50 个论坛币 已解决

自同一个stockcode开始,前4周WMA5取空值;在第5周开始,第1天以收盘价nclose和前4周最后一天的nclose取均值为该日的wma5;次日则仍用最新收盘价nclose和前4周的最后一日nclose取均值。

到了第6周逻辑同,只是把第1周最后日nclose改用第5周的nclose替代


月也一样。


如下图




另外查询逻辑:

如何查询:连续10周股价>wMA5的股票代码和日期?


希望直接的逻辑nclose>当天对应WMA5&前面9周的周收盘价>当周MA50

新建位图图像.bmp

数据.xls
大小:(326 KB)

 马上下载


最佳答案

HXAI102230 查看完整内容

proc sort data=stock.b out=b; by stockcode wk date; run; data b0; set b; by stockcode wk date; if first.stockcode then nw=0; if first.wk then nw+1; if last.wk then wnclose=nclose; run; data b1(keep=stockcode nw wnclose); set b0; by stockcode wk date; if last.wk; run; data b2; set b1; do i=1 to 4; nweek=nw+i; if nweek>=5 then output; end; run; ...
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2022-1-19 11:13:18
proc sort data=stock.b out=b;
  by stockcode wk date;
run;

data b0;
  set b;
  by stockcode wk date;
        if first.stockcode then nw=0;
        if first.wk then nw+1;
  if last.wk then wnclose=nclose;
run;

data b1(keep=stockcode nw wnclose);
  set b0;
  by stockcode wk date;
        if last.wk;
run;

data b2;
  set b1;
        do i=1 to 4;
    nweek=nw+i;
                if nweek>=5 then output;
        end;
run;

proc sort data=b2;
  by stockcode nweek;
run;

proc transpose data=b2 out=b3;
  by stockcode nweek;
        var wnclose;
run;

data bdate;
  merge b0 b3(rename=(nweek=nw));
        by stockcode nw;
        if ^missing(nclose) & ^missing(col1) & ^missing(col2) & ^missing(col3) & ^missing(col4) then
        wma5=mean(of col1-col4,nclose);
        drop nw _name_ col:;
run;

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2022-1-19 13:21:57
你太厉害了[em17][em17][em17][em17]
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2022-1-19 14:13:27
HXAI102230 发表于 2022-1-19 11:13
proc sort data=stock.b out=b;
  by stockcode wk date;
run;
如果是2周为一组的这样搞会好多啊。《LAG返回的是上一次LAGE函数运行时的实参,即LAG(argument)=上一次LAG函数执行时的argument。》有没有办法依据这个来实现呢,大神
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2022-1-19 15:08:38
data bx;
  set b;
  by stockcode wk date;
  retain wnclose_;
  if last.wk then do;
    wnclose=nclose;
    wnclose_=nclose;
  end;
        if ^missing(nclose) & ^missing(wnclose_) then
  wma2=mean(wnclose_,nclose);  
run;
————————————————————————————————————————
有点晕,运行上面的程序是所说的2周一组的效果吗?如果用LAG的话,上一周的wnclose会在下一周的最后一天而不是第一天使用,会错开一周。。。
不要叫我大神,我只是初学的菜鸟


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2022-1-19 16:09:03
HXAI102230 发表于 2022-1-19 15:08
data bx;
  set b;
  by stockcode wk date;
已经膜拜了,思路清晰,逻辑严密[em17][em17]

这个2个平均合适,这样写20个平均可以实现么?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群