我正在使用最新版的SAS Enterprise Guide。
我在两个表中有数据;表1包含一个帐号列表,表2包含每个帐号和每个月的单独记录。帐号在表1中是一个唯一值,但在表2中会重复,具体取决于该帐户启用了多少个月。表2还包含比表1更多的唯一帐号,因此我需要创建一个查询,该查询仅保留表2中记录在表1中的记录。
表1列出了我要对其进行进一步分析的唯一帐号。我想使用该列表从表2中更大的列表中过滤掉不需要的帐号。
表1列出了我要对其进行进一步分析的唯一帐号。我想使用该列表从表2中更大的列表中过滤掉不需要的帐号。
答案 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中每个帐号的最新数据,则需要:
运行表2中的查询构建器,其中每个日期的最大值为query builder screenshot
然后,仅使用INNER join按帐号连接2个表-它只保留同时出现在两个表中的记录