全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1484 7
2016-11-08
原始数据是这样的a=
iddatedatenumbaseline

1

2016-10-11

visit1

2017-1-1

1

2016-11-11

visit2

2017-1-1

1

2016-12-11

visit3

2017-1-1

1

2016-12-22

visit4

2017-1-1

1

2016-12-25

visit5

2017-1-1

1

2016-12-27

visit6

2017-1-1

2

2016-10-26

visit1

2017-1-1

2

2016-11-26

visit2

2017-1-1

2

2016-12-26

visit3

2017-1-1

2

2017-1-6

visit4

2017-1-1

2

2017-1-9

visit5

2017-1-1

2

2017-1-11

visit6

2017-1-1

3

2016-11-10

visit1

2017-1-1

3

2016-12-11

visit2

2017-1-1

3

2017-1-10

visit3

2017-1-1

3

2017-1-21

visit4

2017-1-1

3

2017-1-24

visit5

2017-1-1

3

2017-1-26

visit6

2017-1-1

4

2016-11-25

visit1

2017-1-1

4

2016-12-26

visit2

2017-1-1

4

2017-1-25

visit3

2017-1-1

4

2017-2-5

visit4

2017-1-1

4

2017-2-8

visit5

2017-1-1

4

2017-2-10

visit6

2017-1-1

5

2016-12-10

visit1

2017-1-1

5

2017-1-10

visit2

2017-1-1

5

2017-2-9

visit3

2017-1-1

5

2017-2-20

visit4

2017-1-1

5

2017-2-23

visit5

2017-1-1

5

2017-2-25

visit6

2017-1-1

我的逻辑规则呢是以“id”变量分组,“date”<“baseline(2017-1-1)”的最后一个日期,标记“Y”;
出来的结果应该是这样的;
iddatedatenumbaselineflag

1

2016-10-11

visit1

2017-1-1

1

2016-11-11

visit2

2017-1-1

1

2016-12-11

visit3

2017-1-1

1

2016-12-22

visit4

2017-1-1

1

2016-12-25

visit5

2017-1-1

1

2016-12-27

visit6

2017-1-1

Y

2

2016-10-26

visit1

2017-1-1

2

2016-11-26

visit2

2017-1-1

2

2016-12-26

visit3

2017-1-1

Y

2

2017-1-6

visit4

2017-1-1

2

2017-1-9

visit5

2017-1-1

2

2017-1-11

visit6

2017-1-1

3

2016-11-10

visit1

2017-1-1

3

2016-12-11

visit2

2017-1-1

Y

3

2017-1-10

visit3

2017-1-1

3

2017-1-21

visit4

2017-1-1

3

2017-1-24

visit5

2017-1-1

3

2017-1-26

visit6

2017-1-1

4

2016-11-25

visit1

2017-1-1

4

2016-12-26

visit2

2017-1-1

Y

4

2017-1-25

visit3

2017-1-1

4

2017-2-5

visit4

2017-1-1

4

2017-2-8

visit5

2017-1-1

4

2017-2-10

visit6

2017-1-1

5

2016-12-10

visit1

2017-1-1

Y

5

2017-1-10

visit2

2017-1-1

5

2017-2-9

visit3

2017-1-1

5

2017-2-20

visit4

2017-1-1

5

2017-2-23

visit5

2017-1-1

5

2017-2-25

visit6

2017-1-1

分步我也能做出来,但是比较复杂,希望能找到一种比较简洁的方法,十分看好sql的子查询!
顺便问一句,sql能实现子查询的嵌套吗?就是在子查询里再套个子查询,实现3层,甚至更多层的子查询!
二维码

扫码加我 拉你入群

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

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

全部回复
2016-11-8 10:36:19
proc sql;
create table wanted as
select a.*, b.flag
from a left join
  (select *, "Y" as flag, baseline-date as dur
   from a
   where date<=baseline
   group by id
   having dur=min(dur)) b
on a.id=b.id and a.date=b.date and a.datenum=b.datenum;
quit;
二维码

扫码加我 拉你入群

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

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

2016-11-8 11:11:23
曾经的CRO programmer路过。
proc sql;
create table base as select id,datenum ,"Y" as flag from a where date<=baseline group by id having date=max(date);
quit;
然后MERGE回去
二维码

扫码加我 拉你入群

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

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

2016-11-8 11:15:08
建议不要写SQL的长句,不方便CHK
二维码

扫码加我 拉你入群

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

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

2016-11-8 14:03:03
wwang111 发表于 2016-11-8 10:36
proc sql;
create table wanted as
select a.*, b.flag
baseline-date是不是应该改成baseline,date
二维码

扫码加我 拉你入群

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

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

2016-11-8 15:29:44
fyp198744 发表于 2016-11-8 14:03
baseline-date是不是应该改成baseline,date
不是吧,应该是baseline跟date的差啊
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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