【问题标题】:SAS sum by groupSAS 总和(按组)
【发布时间】:2020-12-03 22:28:38
【问题描述】:

我有一个跟进这个问题:

SAS, sum by group

由于我需要按多个变量进行分组,因此我相应地添加了变量。我也不需要最后一行,这就是我评论它的原因。但是,变量 sum_by_var1 在组内增加。但我希望它是组中每个元素的组的总和。

data new2;   
   set have;       
   by var1 var_new; 
   retain sum_by_var1;
   if first.var1 then do; sum_by_var1=0; end;
   sum_by_var1 + var3;
   *if last.var1 then do; output; end;
run;

【问题讨论】:

  • 请提供示例数据和代码以运行并快速回答您的问题。
  • 您发布的代码无法运行。因为您只注释掉了一行中三个语句中的第一个,所以您有一个 end; 语句而没有相应的 do 语句。

标签: sas sum


【解决方案1】:

不确定为什么要与组中的每一行关联的聚合结果,当“测试”计算是其他人可能会发现“总和”不正确时,因为您的输出丢弃了组的最后一行。

在 DATA Step 中,您可以使用 DOW 循环来计算组统计数据,然后使用第二个循环将该结果应用于组中的每一行。

例子:

data have;
input var1 var2 $ var3;
datalines;
1 a 3
1 a 4
1 a 3
2 b 5
2 b 3
3 c 1
;
run;

data want;
  * compute some aggregate result;
  do until (last.var1);
    set have;
    by var1;
    sum_var3_over_var1 + var3;
  end;

  * apply result to each row in group;
  do until (last.var1);
    set have;
    by var1;
    if not last.var1 then OUTPUT;  * discard some detail data;
  end;

  label sum_var3_over_var1 = 'Caution, this result may not appear correct';
run;

结果:

你“想要”的结果令人困惑

  • var1=1 组有 3 行开始,输出中有 2 行。
    总和与可见的内容不一致,因为该组的最后一行已被丢弃。
  • var1=2 组有 2 行开始,输出中有 1 行。
    总和与可见的内容不一致,因为该组的最后一行已被丢弃。
  • var1=3 组有 1 行开始,输出中该组有 行。
    没有行,因为该组的最后一行已被丢弃。当一个组只有一行时,该行是最后一行(也是第一行)。

【讨论】:

  • 我最终得到一个空数据集,即使在第一步之后也是如此
  • 不知道为什么你得到空的结果。我已经用您引用的原始问题中的数据更新了我的答案。另外,您是否从最初的问题中得到了有用的答案,您是否通过标记哪个答案是答案并对您最有用?
猜你喜欢
  • 2020-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-22
  • 2020-06-18
相关资源
最近更新 更多