使用SAS中的另一个数据集从数据集中提取

时间:2014-01-31 22:42:43

标签: sql sas

我有以下数据集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中匹配的数据,并且仅在开始日期和结束日期之间

非常感谢任何帮助。谢谢!

2 个答案:

答案 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或其他类似的数据创建新数据集,并将变量重命名为startend,创建变量label'VALID',并将ID重命名为fmtname

然后proc format cntlin=fmts; quit;(fmts =上面制作的数据集的名称)。

然后你像这样使用putn

data want;
set fullds;
if putn(date,id) = 'VALID';
run;

这假设所有日期变量(在两个数据集中)都是真正的日期值,而不是字符变量。如果是,则startend和进入putn的值都需要input日期。