0

我有一个相当简单的问题。

有没有办法在 $n > 2$ 的 SAS 中合并 $n$ 数据集。我知道如何合并 2 个数据集。

谢谢

高尔斯

4

3 回答 3

2

除了@itzy 提供的代码之外,您还可以使用 MERGE 语句上的 IN= 选项来识别您的数据集。这允许您只接受您需要的匹配。此外,您必须在 BY 语句中使用通用变量名称。您可以包含一个 RENAME= 语句来创建一个公共变量以在您的 BY 语句中使用。

(未经测试的代码)

data all;
 merge ds1(in=one rename=(ds1_id=id)) 
       ds2(in=two rename=(ds2_id=id))
       ds3(in=three rename=(ds3_id=id))
       ;
 by some_list_of_variables;
 if one and two and three ; /* Creates only matching records from all */ 
run;
于 2012-06-06T16:10:58.853 回答
2

您可以使用与仅两个相同的语法合并多个数据集:

data all;
 merge ds1 ds2 ds3 ...;
 by some_list_of_variables;
run;

如果您有许多要合并的数据集,您可能需要修改一个将它们全部列出的宏。

于 2012-06-06T15:37:31.730 回答
1

即使您已经说过要“合并”数据集,请注意 MERGE 语句不是唯一的选择。如果您的合并键在超过 1 个数据集中有重复项,那么使用 MERGE 语句可能会给出逻辑错误的结果,即使它可以正常工作而不会抱怨。在这种情况下,您可以使用 PROC SQL - 我还记得 PROC SQL 从 SAS 9.1 开始可以更高效。

例子 -

proc sql;
select <fieldlist>
from data1 t1, data2 t2, data3 t3, data4 t4
where <join condition>;
quit;
于 2012-06-07T10:57:07.953 回答