Merge 为数据集a中的每个变量复制数据集B
我有以下两个数据集: 数据集A: 数据集B: 我想将粘贴B复制到A的每个ID:Merge 为数据集a中的每个变量复制数据集B,merge,sas,Merge,Sas,我有以下两个数据集: 数据集A: 数据集B: 我想将粘贴B复制到A的每个ID: ID Age A 35 A 49 A 53 B 35 B 49 ... 目前,我是用%do cicle来做这件事的,但是有没有更优雅的方法呢?例如,使用单个PROC SQL或Datastep 提前感谢您可以使用SQL执行笛卡尔乘积以获得所有组合 例如: /* setup id data */ data have1; input id $char1.; datalines; A B
ID Age
A 35
A 49
A 53
B 35
B 49
...
目前,我是用%do cicle来做这件事的,但是有没有更优雅的方法呢?例如,使用单个PROC SQL或Datastep
提前感谢您可以使用SQL执行笛卡尔乘积以获得所有组合 例如:
/* setup id data */
data have1;
input id $char1.;
datalines;
A
B
C
;
/* setup age data */
data have2;
input age 8.;
datalines;
35
49
53
;
/* perform Cartesian product */
proc sql noprint;
create table
want
as
select
*
from
have1
,have2
;
quit;
不需要宏代码。您可以使用
SET
语句上的POINT=
选项在数据步骤中执行此操作
data want;
set a;
do p=1 to nobs;
set b point=p nobs=nobs;
output;
end;
run;
显示您的代码。您使用
%do
这样做有什么原因吗?对于SQL,查看交叉连接
@Richard仅仅是因为我无法找到另一种方法来实现它。感谢交叉连接指示。它也起作用。此外,我不知道它被称为笛卡尔积,这将帮助我进行搜索。Do循环是复杂的(因此需要更简单的解决方案)。
/* setup id data */
data have1;
input id $char1.;
datalines;
A
B
C
;
/* setup age data */
data have2;
input age 8.;
datalines;
35
49
53
;
/* perform Cartesian product */
proc sql noprint;
create table
want
as
select
*
from
have1
,have2
;
quit;
data want;
set a;
do p=1 to nobs;
set b point=p nobs=nobs;
output;
end;
run;