请选择 进入手机版 | 继续访问电脑版
楼主: hurley18
1429 10

[技术讨论与投票] SAS 股票跨组计算问题 [推广有奖]

  • 0关注
  • 0粉丝

本科生

51%

还不是VIP/贵宾

-

威望
0
论坛币
12 个
通用积分
0.0073
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
143 点
帖子
44
精华
0
在线时间
121 小时
注册时间
2022-1-7
最后登录
2023-10-22

hurley18 发表于 2022-1-19 11:13:17 |显示全部楼层 |坛友微信交流群
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; ...
关键词:计算问题 Close Stock Lose 股票代码
HXAI102230 在职认证  发表于 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;

已有 3 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
pobel + 5 + 3 + 3 + 3 精彩帖子
reduce_fat + 5 + 5 + 5 精彩帖子
eijuhz + 20 精彩帖子

总评分: 经验 + 20  论坛币 + 5  学术水平 + 8  热心指数 + 8  信用等级 + 8   查看全部评分

使用道具

hurley18 发表于 2022-1-19 13:21:57 |显示全部楼层 |坛友微信交流群
你太厉害了[em17][em17][em17][em17]

使用道具

hurley18 发表于 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。》有没有办法依据这个来实现呢,大神

使用道具

HXAI102230 在职认证  发表于 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会在下一周的最后一天而不是第一天使用,会错开一周。。。
不要叫我大神,我只是初学的菜鸟


使用道具

hurley18 发表于 2022-1-19 16:09:03 |显示全部楼层 |坛友微信交流群
HXAI102230 发表于 2022-1-19 15:08
data bx;
  set b;
  by stockcode wk date;
已经膜拜了,思路清晰,逻辑严密[em17][em17]

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

使用道具

hurley18 发表于 2022-1-19 16:16:11 |显示全部楼层 |坛友微信交流群
HXAI102230 发表于 2022-1-19 15:08
data bx;
  set b;
  by stockcode wk date;
大神,看看这个例子能否借鉴。可以实现跳跃性跨组取值计算
未标题-1.jpg



使用道具

HXAI102230 在职认证  发表于 2022-1-19 20:42:54 |显示全部楼层 |坛友微信交流群
hurley18 发表于 2022-1-19 16:16
大神,看看这个例子能否借鉴。可以实现跳跃性跨组取值计算
proc sort data=stock.b out=b;
  by stockcode wk date;
run;

data b_1(drop=wn1 wn2 wn3 wn4) b_2(keep=wn1 wn2 wn3 wn4);
  set b;
  by stockcode wk date;
        if first.stockcode then nw=0;
        if first.wk then nw+1;
  if last.wk then do;
    wnclose=nclose;
    wn1=lag(nclose);
    wn2=lag2(nclose);
    wn3=lag3(nclose);
    wn4=lag4(nclose);
  end;
run;

data bn;
        set b_1;
        set b_2(firstobs=5);
        retain lw1 lw2 lw3 lw4;
        array lw{4};
        array wn{4};
        do i=1 to 4;
    if ^missing(wn{i}) then lw{i}=wn{i};
        end;
  if nw>=5 then wma5=mean(of lw1-lw4,nclose);
        drop i wn: lw:;
run;

使用道具

HXAI102230 在职认证  发表于 2022-1-19 22:07:05 |显示全部楼层 |坛友微信交流群

使用道具

reduce_fat 发表于 2022-1-20 12:33:27 |显示全部楼层 |坛友微信交流群

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-3-29 07:54