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

时间:2015-02-09 08:00:40

标签: r sas

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

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

3 个答案:

答案 0 :(得分:9)

简单的合并应该适用于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;

答案 1 :(得分:1)

您可以使用||功能

示例:

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 

答案 2 :(得分:1)

下面的代码还将对输入数据集产生列绑定操作并生成输出数据集。输出数据集'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个观测值,则输出数据集输出将仅包含5个观测值。