在单个数据步骤中将一行合并到所有行

Dav*_*avB 2 sas

两个数据集:

  1. 第一组数据有很多观察结果:

    data ds1;
      do var1=1 to 3;
        output;
      end;
    run;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 第二个数据集有1个观察结果:

    data ds2;
      var2=1;
    run;
    
    Run Code Online (Sandbox Code Playgroud)

每个数据集中的变量数量无关紧要.

我想将DS2中的单个观察值与DS1中的所有观察值合并得到:

数据集DS3:

VAR1 VAR2
1    1
2    1
3    1
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用PROC SQL步骤执行此操作:

proc sql noprint;
  create table ds3 as
  select a.*, b.*
  from ds1 as a, ds2 as b;
quit;
Run Code Online (Sandbox Code Playgroud)

是否可以通过单个数据步骤进行预处理?

RWi*_*ill 8

如果VAR2总是为1,那么这将起作用:

ds3;
   retain var2 1;
   do var1 = 1 to 3;
      output;
   end;
run;
Run Code Online (Sandbox Code Playgroud)

同样,如果DS1和DS2已经存在且DS2只有一个观察点,那么这应该有效:

ds3;
   set ds1;
   if _n_ eq 1 then do;
      set ds2;
   end;
run;
Run Code Online (Sandbox Code Playgroud)