如何在两个数据集之间找到匹配项并在SAS

时间:2016-05-25 09:12:59

标签: sas proc-sql

我想比较两个数据集并将匹配的观察结果提取到一个新数据集。例如,

我有两个数据集,一个来自十月,另一个来自十一月,如下所示。

数据集10月

visitor_id ctn visits kjsjakd83 3243244234 1 sakdsadda 5432223442 2 jhk43242l 3243243244 1 iiiewdaja 9839422022 2

数据集11月

visitor_id ctn visits kjsjakd83 3243244234 1 432hj4hj 3243243244 2 jhk43242l 3243243244 1 xfd3x424 2342344234 2

现在,我想通过CTN比较这些数据集,并提取10月数据集中的所有观察结果,其中11月数据集中找到了匹配的CTN。因此,提取的数据集必须如下所示。

数据集匹配

visitor_id ctn visits kjsjakd83 3243244234 1 jhk43242l 3243243244 1

我如何在SAS中执行此操作?

3 个答案:

答案 0 :(得分:1)

如果您只想要来自OCTOBER的CTN值在NOVEMBER中的记录,那么这似乎是最直接的SQL语法。

select * from OCTOBER 
  where CTN in (select CTN from NOVEMBER)
;

答案 1 :(得分:0)

如果你使oct“a”和nov“b”你的代码工作正常。另外,正如Keith所提到的,你的nov数据集中有重复的ctn值,你应该修复或解释你想要如何处理;最好加入a.visitor_id = b.visitor_id和a.ctn = b.ctn。

proc sql;
    create table final as select distinct
        a.* from oct as a inner join nov as b
        on a.ctn = b.ctn;
quit;

答案 2 :(得分:0)

@汤姆的回答是我是怎么做的,但是如果没有PROC SQL,这是怎么做的:

proc sort data=october;
  by ctn;
run;

proc sort data=november;
  by ctn;
run;

data match;
  merge october (IN=oct)
        november (IN=nov keep=ctn);
  by ctn;
  if oct and nov;
run;