如何在 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 个观测值。
我有两个包含相同行数的数据集。 我想对两个数据集执行列绑定以创建第三个数据集。 我们如何在 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 个观测值。