仅保留表1中与表2中的唯一值相对应的记录

时间:2019-04-10 21:57:29

标签: datatables sas enterprise-guide

我正在使用最新版的SAS Enterprise Guide。

我在两个表中有数据;表1包含一个帐号列表,表2包含每个帐号和每个月的单独记录。帐号在表1中是一个唯一值,但在表2中会重复,具体取决于该帐户启用了多少个月。表2还包含比表1更多的唯一帐号,因此我需要创建一个查询,该查询仅保留表2中记录在表1中的记录。

表1列出了我要对其进行进一步分析的唯一帐号。我想使用该列表从表2中更大的列表中过滤掉不需要的帐号。

表1列出了我要对其进行进一步分析的唯一帐号。我想使用该列表从表2中更大的列表中过滤掉不需要的帐号。

3 个答案:

答案 0 :(得分:0)

您可以通过不同的方式实现这一目标。我将使用proc sql:into子句为Table1中的帐号列表创建宏变量:

proc sql;
select distinct account_no into: tab1_act_list separated by "," from table1;
quit;

data table2_temp;
 set table2;
 if account_no in(&tab1_act_list) then delete; /*Or whatever you want to do with these obs*/
run;

或者,您可以使用Merge,sql-joins。

答案 1 :(得分:0)

通常的方法是:

proc sql noprint;
  create table Rst as 
  select * from Tab2
  where Account in (
    select distinct Account from Tab1
  )
 ;
quit;

如果Tab1和Tab2的变量名相同,则intersect语句会更快。

答案 2 :(得分:0)

如果我正确理解,您的表2包含来自多个日期的信息; 因此,如果您需要表1中每个帐号的最新数据,则需要:

  1. 运行表2中的查询构建器,其中每个日期的最大值为query builder screenshot

  2. 然后,仅使用INNER join按帐号连接2个表-它只保留同时出现在两个表中的记录