楼主: hurley18
2011 11

[SAS EM] 股票SAS里的SQL条件交叉判断 [推广有奖]

  • 0关注
  • 0粉丝

本科生

54%

还不是VIP/贵宾

-

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

楼主
hurley18 发表于 2022-1-21 10:33:43 |AI写论文
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 ...
关键词:sql highlight Close Stock Light
已有 1 人评分论坛币 收起 理由
eijuhz + 100 精彩帖子

总评分: 论坛币 + 100   查看全部评分

沙发
HXAI102230 在职认证  发表于 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;        
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
pobel + 5 + 1 + 1 + 1 精彩帖子

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

藤椅
HXAI102230 在职认证  发表于 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的定义是什么?上周同期?周最后一天值?还是周均值?

板凳
hurley18 发表于 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;

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

地板
HXAI102230 在职认证  发表于 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,
和上面的条件冲突,是哪里理解错了吗?

7
hurley18 发表于 2022-1-21 19:11:07
HXAI102230 发表于 2022-1-21 16:48
3.在本周之前连续2周内:上周Wboll
3.在本周之前连续2周内:上周Wboll<前周Wboll且两周的Wboll均小于当周的Nclose
——————————————————————————————————————————
'000002'  2021/04/07  对应nclose为28.0872822029319,上周wboll 28.2400127105337 ,前周 wboll 28.1804336270729,
和上面的条件冲突,是哪里理解错了吗?
*******************************************
如下图,4/7日是直接周wk为3198(nw=168),nclose为28.0872822029319,当天对应当时的周wboll为为28.2296;上一周nw=167,最后一天nclose即等于wnclose=28.37099,Wboll=28.2849;
前一周nw=166,最后一天nclose即等于wnclose=29.0519,Wboll=28.24..

新建位图图像.bmp

新建位图图像.bmp (1.12 MB)

新建位图图像.bmp

8
HXAI102230 在职认证  发表于 2022-1-21 20:49:00
hurley18 发表于 2022-1-21 19:11
这也不满足条件3吧

9
hurley18 发表于 2022-1-21 21:02:18
HXAI102230 发表于 2022-1-21 20:49
这也不满足条件3吧
{:3_55:}我的错..........
条件3写错了,是上周Wnclose<前周Wnclose&上周Wnclose>上周Wboll&前周Wnclose>前周wboll

10
hurley18 发表于 2022-1-22 13:14:35
HXAI102230 发表于 2022-1-22 08:52
data rawsql_1 rawsql_2(keep=date nclose);
  set rawsql;
  by stockcode nw date;
膜拜大神谢谢大神[em17]

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-28 10:17