我有2个像这样的数据集
数据集1:
From To Period
01/1/2000 20/1/2000 1
21/1/2000 14/2/2000 2
15/2/2000 31/3/2000 3
数据集2:
Date
15/1/2000
13/2/2000
20/3/2000
理想的结果是这样的:
Date Period
15/1/2000 1
13/2/2000 2
20/3/2000 3
我认为这个解决方案是通过每条记录遍历数据集2,查找并比较数据集2的日期值和数据集1中的To To范围,直到找到匹配,然后获取Period值。我们能用SAS datastep代码而不是sql来做到这一点吗?如果我们这样做,表现明智,它会更好吗?
感谢您的帮助,非常感谢。
答案 0 :(得分:1)
从查找数据集创建信息是这里的方法。然后使用信息来使用INPUT函数创建值。
data ds1;
input From :ddmmyy10. To :ddmmyy10. Period;
format From :ddmmyy10. To :ddmmyy10.;
datalines;
01/1/2000 20/1/2000 1
21/1/2000 14/2/2000 2
15/2/2000 31/3/2000 3
;
run;
data ds2;
input date :ddmmyy10.;
format date ddmmyy10.;
datalines;
15/1/2000
13/2/2000
20/3/2000
;
run;
/* create dataset with informat details*/
data ds1_fmt;
set ds1;
rename from=start to=end period=label;
retain fmtname 'dt_fmt' type 'I';
run;
/* create informat from dataset */
proc format cntlin=ds1_fmt;
run;
/* create output dataset */
data want;
set ds2;
period=input(date,dt_fmt.);
run;
答案 1 :(得分:0)
data lookup;
INFILE DATALINES;
input @1 from mmddyy10. @12 to mmddyy10. @22 period $;
datalines;
01/01/2000 01/20/2000 1
01/21/2000 02/14/2000 2
02/15/2000 03/31/2000 3
;
data base;
infile datalines;
input @1 date mmddyy10.;
datalines;
01/15/2000
02/13/2000
03/20/2000
;
尝试使用proc sql
proc sql;
create table result as
select put(b.date,mmddyy10.), (select max(period) from lookup l where b.date between l.from and l.to) as period
from base b;
quit;