【问题标题】:Merge one row to all in a single data step在单个数据步骤中将一行合并到所有行
【发布时间】:2012-03-20 16:29:09
【问题描述】:

两个数据集:

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

    data ds1;
      do var1=1 to 3;
        output;
      end;
    run;
    
  2. 第二个数据集有1个观察:

    data ds2;
      var2=1;
    run;
    

每个数据集中的变量数量无关。

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

数据集 DS3:

VAR1 VAR2
1    1
2    1
3    1

我知道我可以使用 PROC SQL 步骤来做到这一点:

proc sql noprint;
  create table ds3 as
  select a.*, b.*
  from ds1 as a, ds2 as b;
quit;

是否可以通过单个数据步骤来执行此操作?

【问题讨论】:

  • 您的数据样本太小,无法完全理解您想要什么。您是说您将在 VAR1 中有一个包含许多值的数据集,在 VAR2 中有一个具有 1 个值的数据集,并且您想使用 DATA STEP 将它们合并到一个数据集中?这样您的单个变量 VAR2 就出现在 MERGED 数据集中的每个观察值中?
  • @CarolinaJay65 - 我已经更新了问题。

标签: sas


【解决方案1】:

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

ds3;
   retain var2 1;
   do var1 = 1 to 3;
      output;
   end;
run;

同样,如果 DS1 和 DS2 已经存在,并且 DS2 像您的示例中那样只有一个观察结果,那么这应该有效:

ds3;
   set ds1;
   if _n_ eq 1 then do;
      set ds2;
   end;
run;

【讨论】:

  • 第二种解决方案是我正在寻找的。谢谢。
猜你喜欢
  • 2021-10-13
  • 1970-01-01
  • 2023-01-26
  • 1970-01-01
  • 2017-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-07
相关资源
最近更新 更多