我无法理解interleaving
和concatenation
交错
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;
我测试了这些并且得到的数据集完全相同,除了我认为并不重要的观察顺序。两个结果数据集包含完全相同的观察结果。那么,有什么区别,除了订单?
答案 0 :(得分:3)
SAS将INTERLEAVING定义为使用带有SET语句的BY语句。包含的链接显示两个数据集,按相同的变量排序,使用带有SET语句的BY语句生成一个数据集。
答案 1 :(得分:3)
SET
与BY
结合起来。它没有合并,它不仅仅是在设置之前进行排序。
例如,让我们创建一对数据集,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文档,因为这是一个非常强大的工具的非常简单的解释。