如何在 SAS 中的两个数据集之间执行列绑定?

How to perform column bind between two datasets in SAS?

我有两个包含相同行数的数据集。 我想对两个数据集执行列绑定以创建第三个数据集。 我们如何在 SAS 中执行此操作?

这可以在 R 中使用 cbind() 完成,在 SAS 中是否有等效项?

您可以使用||函数

示例:

proc iml;
x1=j(5,1,1);
x2=j(5,1,2);
data1=x1||x2;
x1=j(5,1,3);
x2=j(5,1,4);
data2=x1||x2;
data=data1||data2;
print data;
run;
quit;

结果:

   data 
1 2 3 4 
1 2 3 4 
1 2 3 4 
1 2 3 4 
1 2 3 4 

一个简单的合并应该在 SAS 中工作。如果您省略了 by 语句,那么它将在行号上合并。首先检查 mergenoby 选项的设置,确保它没有设置为错误。

proc options option=mergenoby;
run;

如果设置为error则运行合并前的以下语句。

option mergenoby=nowarn;

否则此合并语句将按行号连接 2 个数据集。

data ds1;
input a b c;
datalines;
1 2 3
6 7 8
11 12 13
;
run;

data ds2;
input d e;
datalines;
4 5
9 10
14 15
;
run;

data ds3;
merge ds1 ds2;
run;

下面的代码还将对输入数据集产生列绑定操作并产生输出数据集。输出数据集 'out' 将包含四个变量 a、b、c 和 d 以及 3 个观测值。

data ds1;
 input a b;
 datalines;
10 20
50 60
70 90
;
run;

data ds2;
input c d;
datalines;
11 22
55 77
88 99
;
run;

data out; /* Third data step */
 set ds1;
 set ds2;
run;

输出数据集如下所示:

a   b  c  d
10 20 11 22
50 60 55 77
70 90 88 99

工作:对于第三个数据步骤的每个循环,来自两个输入数据集 ds1 和 ds2 的每个观察值都将被提取到 PDV 中,并将输出写入输出数据集中。

如果两个输入数据集的行数相同,此步骤将非常有效。如果任何一个输入数据集中的行数较少,则只要该数据集的数据结束,数据步骤就会终止,并且输出数据集的观察数将等于观察数较少的输入数据集。即,如果 ds1 和 ds2 分别包含 10 个和 5 个观测值,则输出数据集 out 将仅包含 5 个观测值。