全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1875 11
2022-01-21
悬赏 27 个论坛币 已解决
大神,看看这个怎么才能实现
所有STOCKCODE中求满足以下4个条件的日期,以及该日期后面20个同stockcode里日期顺序后第20个nclose并定义为变量NF20close.
1.自2021/01/01日后选择
2.前7周内出现过HighLight为'Y',     ('000002'在wk=3192周的2021/2/25日出现过,如下图)
3.在本周之前连续2周内:上周Wboll<前周Wboll且两周的Wboll均小于当周的Nclose
4.当天的收盘价nclosel为3周内第一次连续2天<当天对应的周BOLL


以上面4个条件搜索'000002'只有2021/04/07日符合,然后再求其后紧挨着20交易日为2021/5/10,返回这一天的nclose为输出

STOCKCODE         date                     Nclose         NF20close
000002           2021/04/07             28.08728      26.04457资料 如附件excel
SQL.xls
大小:(1.13 MB)

 马上下载



求收益.jpg

最佳答案

HXAI102230 查看完整内容

data rawsql_1 rawsql_2(keep=date nclose); set rawsql; by stockcode nw date; retain flag_high s_wk lwboll l2wboll lwnclose l2wnclose initial s_week; /*HIGHLIMIT check*/ if first.stockcode then do; flag_high=' '; s_wk=.; end; if highlimit='Y' then do; flag_high='Y'; s_wk=nw; end; if s_wk^=. then do; if nw>s_wk+7 then do; flag_hig ...
二维码

扫码加我 拉你入群

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

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

全部回复
2022-1-21 10:33:44
data rawsql_1 rawsql_2(keep=date nclose);
  set rawsql;
  by stockcode nw date;        
  retain flag_high s_wk lwboll l2wboll lwnclose l2wnclose initial s_week;         
/*HIGHLIMIT check*/
   if first.stockcode then do;
    flag_high=' ';
    s_wk=.;
end;
  if highlimit='Y' then do;
    flag_high='Y';
   s_wk=nw;
end;
  if s_wk^=. then do;
    if nw>s_wk+7 then do;
     flag_high=' ';
     s_wk=.;
    end;
end;
  /*WBOLL check*/
  if last.nw then do;
    lwboll=wboll;
    l2wboll=lag(wboll);
    lwnclose=nclose;
   l2wnclose=lag(nclose);
  end;
  if (.<input(lwboll,best.)<lwnclose) & (.<input(l2wboll,best.)<l2wnclose) & (lwnclose<l2wnclose)
  then flag_wboll='Y';
  /*3WEEK check*/
if ^missing(nclose)& ^missing(wboll) then daydif=nclose-input(wboll,best.);
  if first.stockcode then do;
    initial=0;
    flag_3week=' ';
    s_week=.;
  end;
if .<daydif<0 & .<lag(daydif)<0 then do;
s_week=max(s_week,nw);
    if initial=0 then do;
      flag_3week='Y';
      initial=1;                        
   end;
end;
if ^missing(s_week) then do;
    if nw>s_week+2 then initial=0;
end;
drop s_wk lwboll l2wboll lwnclose l2wnclose initial s_week daydif;
run;

data sqlx;
  set rawsql_1;
  set rawsql_2(firstobs=21 rename=(date=nf20date nclose=nf20close));
  if date>='1Jan2021'd & flag_high='Y' & flag_wboll='Y' & flag_3week='Y';
  drop nw flag:;
run;        
二维码

扫码加我 拉你入群

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

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

2022-1-21 14:16:41
疑问:
1.自2021/01/01日后选择---对date在2021/01/01之后的观测,进行2-4条件判断,然后将满足条件的观测中筛选出来?还是先判断2-4条件,再将满足条件且date在2021/01/01之后的保留?
2.前7周内出现过HighLight为'Y'---前7周的定义根据wk还是date?如果根据wk, 出现'Y‘变量的当周算第一周还是其下一周算第一周?
3.上周Wboll<前周Wboll且两周的Wboll均小于当周的Nclose---上周和前周wboll的定义是什么?上周同期?周最后一天值?还是周均值?
二维码

扫码加我 拉你入群

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

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

2022-1-21 14:26:41
HXAI102230 发表于 2022-1-21 14:16
疑问:
1.自2021/01/01日后选择---对date在2021/01/01之后的观测,进行2-4条件判断,然后将满足条件的观测 ...
大神,这几个条件是交叉条件
所以:
1.先判断2-4,再筛选1. 不然把1筛了再进行判断结果会漏。
2.前7周,前7周的定义为之前写的nw顺序(wk中间可能有断),比如结果观测周顺序nw为10,则需要判断nw=3的第一天一直到目标观测之间的highlight是否出现过Y;当周就算1周。
3.上周和前周的wboll因为周过完了,所以取周最后一天的wbol即为完整的周wboll;
二维码

扫码加我 拉你入群

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

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

2022-1-21 14:28:46
hurley18 发表于 2022-1-21 14:26
大神,这几个条件是交叉条件
所以:
1.先判断2-4,再筛选1. 不然把1筛了再进行判断结果会漏。
大神,因为有很多stockcode,所以先要分组再执行
二维码

扫码加我 拉你入群

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

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

2022-1-21 16:48:09
3.在本周之前连续2周内:上周Wboll<前周Wboll且两周的Wboll均小于当周的Nclose
——————————————————————————————————————————
'000002'  2021/04/07  对应nclose为28.0872822029319,上周wboll 28.2400127105337 ,前周 wboll 28.1804336270729,
和上面的条件冲突,是哪里理解错了吗?
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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