连接与交错

时间:2014-03-29 03:18:31

标签: sas

我无法理解interleavingconcatenation

之间的区别

交错

proc sort data=ds1 
           out=ds1;
   by var1;
run;
proc sort data=ds2 
           out=ds2;
   by var1;
run;
 data testInterleaving ; 
 set ds1 ds2 ;
 run ;

连接

data testConcatenation; 
   set ds1 ds2;
run;

我测试了这些并且得到的数据集完全相同,除了我认为并不重要的观察顺序。两个结果数据集包含完全相同的观察结果。那么,有什么区别,除了订单?

3 个答案:

答案 0 :(得分:3)

SAS将INTERLEAVING定义为使用带有SET语句的BY语句。包含的链接显示两个数据集,按相同的变量排序,使用带有SET语句的BY语句生成一个数据集。

答案 1 :(得分:3)

正如CarolinaJay指出的那样,交错正在将SETBY结合起来。它没有合并,它不仅仅是在设置之前进行排序。

例如,让我们创建一对数据集,sashelp.class的女性和男性成员。

data male female;
set sashelp.class;
if sex='F' then output female;
else output male;
run;

proc sort data=male;
by name;
run;
proc sort data=female;
by name;
run;

data concatenated;
set male female;
run;

data interleaved;
set male female;
by name;
run;

现在,看看数据集。 Concatenated是所有男性,然后是所有女性 - 它按顺序处理set语句,在移动到第二个语句之前耗尽第一个语句。

Interleaved按名称顺序排列,不按性别排序。这是因为它按名称遍历两个(在本例中)set个数据集,跟踪它在name排序中的位置。您可以添加调试语句(使用数据步调试器,或将put _all_;添加到datastep)以查看它是如何工作的。

答案 2 :(得分:1)

最后的数据步骤完全相同。您正在执行相同的代码,如果您事先排序并不重要。

我认为你在交错中的意思是

data testInterleaving ;
MERGE ds1 ds2;
by var1;
run;

set语句按照列出的顺序依次读取数据集。 merge语句比较集合之间的记录,并按照by语句中变量的顺序将它们放入输出中。我建议在merge语句中查看SAS文档,因为这是一个非常强大的工具的非常简单的解释。