我有两个包含相同行数的数据集。 我想在两个数据集上执行列绑定以创建第三个数据集。 我们如何在SAS中执行此操作?
这可以使用cbind()在R中完成,在SAS中是否有等价的?
答案 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个观测值。