Merge 为数据集a中的每个变量复制数据集B

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

我有以下两个数据集:

数据集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
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;