全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1229 9
2016-12-15
图 请问各位大神,我如何根据表一和表二的内容,得出表三的内容(其实就是根据表一的时间在表二的那个时间段内,来得出每个Card_id所对应的status).谢谢
二维码

扫码加我 拉你入群

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

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

全部回复
2016-12-15 18:42:22
表一表二 感觉merge的key变量(Card_id) 不唯一啊,除非非常理论的情况(表一 表二 都排序 很好, 一一对应),可以考虑 新建key变量
data aa;
set a;
kk=_n_;
run;
data bb;
set b;
kk=_n_;
run;
data cc;
merge aa bb(rename=(Card_id=Card_id_ status=status_));
by kk;
if st_data<=test_time<=en_data then status=status_;
run;
二维码

扫码加我 拉你入群

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

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

2016-12-15 23:17:05
我根据图片猜测的隐含条件是
1.表一和表二有相同的行数
2.表一和表二在同一行的card_id是相同的
3.时间对比是在两个表的同一行进行的
以下是基于以上的假设做的,供参考
data tbl1;
        input card_id $ test_time :yymmdd.;
datalines;
a 20111011
b 20120506
b 20120607
d 20110503
d 20120105
;
data tbl2;
        input card_id $ (start_date end_date) (:yymmdd.) status $;
datalines;
a 20110102 20110501 aa
b 20120403 20120709 aa
b 20130101 20130401 bb
d 20110401 20110506 cc
d 20120101 20120131 dd
;
data tbl (drop = start_date end_date);
        set tbl1;
        set tbl2;
        if not (start_date le test_time le end_date) then status = '.';
run;


二维码

扫码加我 拉你入群

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

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

2016-12-16 08:37:02
data test1;
input card_id $ test_time yymmdd10.;
format test_time yymmddn8.;
cards;
a 20111011
b 20120506
b 20120607
d 20110503
d 20120105
;

data test2;
  input card_id $ start_date : yymmdd10. end_date : yymmdd10. status $;
  cards;
  a 20110102 20110501 aa
  b 20120403 20120709 aa
  b 20130101 20130401 bb
  d 20110401 20110506 cc
  d 20120101 20120131 dd
  ;

data test3;
  set test1;
  do i=1 to nobs;
  set test2(rename=(card_id=card_id1 status=status1)) nobs=nobs point=i;
   if card_id=card_id1 and start_date<=test_time<=end_date then status=status1;
  end;
  keep card_id test_time status;
run;
二维码

扫码加我 拉你入群

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

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

2016-12-16 08:38:02
data test1;
input card_id $ test_time yymmdd10.;
format test_time yymmddn8.;
cards;
a 20111011
b 20120506
b 20120607
d 20110503
d 20120105
;

data test2;
  input card_id $ start_date : yymmdd10. end_date : yymmdd10. status $;
  cards;
  a 20110102 20110501 aa
  b 20120403 20120709 aa
  b 20130101 20130401 bb
  d 20110401 20110506 cc
  d 20120101 20120131 dd
  ;

data test3;
  set test1;
  do i=1 to nobs;
  set test2(rename=(card_id=card_id1 status=status1)) nobs=nobs point=i;
   if card_id=card_id1 and start_date<=test_time<=end_date then status=status1;
  end;
  keep card_id test_time status;
run;

二维码

扫码加我 拉你入群

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

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

2016-12-16 08:38:43

data test3;
  set test1;
  do i=1 to nobs;
  set test2(rename=(card_id=card_id1 status=status1)) nobs=nobs point=i;
   if card_id=card_id1 and start_date<=test_time<=end_date then status=status1;
  end;
  keep card_id test_time status;
run;
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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