楼主: h52101019
1617 4

找出日期有没有在范围内 [推广有奖]

  • 0关注
  • 0粉丝

大专生

5%

还不是VIP/贵宾

-

威望
0
论坛币
2 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
166 点
帖子
27
精华
0
在线时间
46 小时
注册时间
2009-9-30
最后登录
2019-2-1

楼主
h52101019 发表于 2014-11-12 15:42:19 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
idAstart yearend yeartran date

1

1

1990

1995

1994

1

1

1990

1995

1995

1

0

1994

1

0

1997

1

0

2002

1

0

1998

1

0

1989

1

1

1996

2001

1996

1

1

1996

2001

1999



这是data的一部分,要在每个id内找出当A=0的tran date有没有在每一个A=1的start year和end year之间。
所以我们从这个例子可以得到
firm idAceo start yearceo end yeartran date

1

1

1990

1995

1994

1

1

1990

1995

1995

1

0

1994

1

0

1997

1

0

1998

1

0

       1996       2001

1996

1

0

       1996       2001

1999

因为1989不在(1990-1995)之间也不在(1996-2001),2002不在(1990-1995)之间也不在(1996-2001)。

我以为可以create A=0和每个A=1的pair,但是这样其他变数不知道怎么办。

有请各位大神帮帮忙,拜托,感谢。





二维码

扫码加我 拉你入群

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

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

关键词:有没有 Create Start creat year Create groups start

沙发
mingfeng07 学生认证  发表于 2014-11-13 00:27:28
  1. data a;
  2. input  id        A        start_year        end_year        tran_date;
  3. cards;
  4. 1 1 1990 1995 1994
  5. 1 0   .   .   2002
  6. 1 0  .   .    1989
  7. 1 0  .   .    1993
  8. 1 1 1996 2001 1996
  9. ;
  10. run;
  11. proc sql;
  12. create table a1 as select a.start_year,a.end_year,b.tran_date from a,a as b where a.A=1 and b.A=0 and (b.tran_date  between  a.start_year and a.end_year);
  13. quit;
  14. proc sql;
  15. create table a2 as select * from a where tran_date not in (select tran_date from a where A=0 except select tran_date from a1);
  16. quit;
复制代码

藤椅
huangpengfei 发表于 2014-11-17 22:40:46
如果start year和end year中间无断档,可以使用,否则不可以使用

data test;
        input id        A        startyear        endyear        trandate @@ ;
        datalines;
1 1 1990 1995 1994
1 1 1990 1995 1995
1 0 . . 1994
1 0 . . 1997
1 0 . . 2002
1 0 . . 1998
1 0 . . 1989
1 1 1996 2001 1996
1 1 1996 2001 1999
;
run;

proc sort data=test ;
        by id descending a startyear ;
run;

data want;
        set test;
        by id descending a startyear ;
        retain sy1 ey1;
        if first.a then sy1=lag(startyear);
        if endyear>lag(endyear) then ey1=endyear;
        if trandate>=sy1 and trandate=<ey1;
        drop sy1 ey1;
run;

板凳
h52101019 发表于 2015-5-15 16:24:12
huangpengfei 发表于 2014-11-17 22:40
如果start year和end year中间无断档,可以使用,否则不可以使用

data test;
感謝!

报纸
h52101019 发表于 2015-5-15 16:24:49
mingfeng07 发表于 2014-11-13 00:27
謝謝!

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-25 19:51