我有以下数据集FULLDS
id date value
A "05/31/2000" 10
B "06/31/2000" 11
我有另一个数据集NewDS,
id startdate enddate
A "04/30/2000" "05/31/2002"
etc
我想只在FULLDS中保存根据NewDS中匹配的数据,并且仅在开始日期和结束日期之间
非常感谢任何帮助。谢谢!
答案 0 :(得分:2)
您可以使用proc sql
执行此操作。以下内容使用select:
proc sql;
select f.*
from FULLDS f join
NewDS n
on f.id = n.id and f.date between n.startdate and n.enddate;
您可以通过执行以下操作来删除不匹配的行:
proc sql;
delete from f
where not exists (select 1
from NewDs n
where f.id = n.id and f.date between n.startdate and n.enddate
) ;
答案 1 :(得分:1)
执行此操作(以及SASsy方式)的一种更快的方法是使用格式。
采用NewDS,根据名为fmts
或其他类似的数据创建新数据集,并将变量重命名为start
和end
,创建变量label
值'VALID'
,并将ID
重命名为fmtname
。
然后proc format cntlin=fmts; quit;
(fmts =上面制作的数据集的名称)。
然后你像这样使用putn
:
data want;
set fullds;
if putn(date,id) = 'VALID';
run;
这假设所有日期变量(在两个数据集中)都是真正的日期值,而不是字符变量。如果是,则start
,end
和进入putn的值都需要input
日期。