【问题标题】:Cleaner way of handling addition of summarizing rows to table?处理向表中添加汇总行的更简洁方法?
【发布时间】:2014-01-15 18:38:49
【问题描述】:

我有一个由 5 个变量组成的数据集,其中包含两个因变量。我的目标是让这个数据集附加额外的行,其中 TOTAL 作为自变量的值,因变量的值相应地发生变化。

为单个自变量执行此操作不是问题,我会按照以下方式做一些事情:

proc sql;
create table want as
select "TOTAL" as independent_var1,
independent_var2,
...
independent_var5,
sum(dependent_1) as dependent_1,
sum(dependent_2) as dependent_2
from have
group by independent_var1,...,independent_var5;
quit;

然后以您选择的任何方式附加原始数据集。但是,我想要上面的 x5(对于每个自变量),然后再对于 5 个自变量中的每个可能的 TOTAL/nontotal 组合。不知道有多少数据集在我脑海中浮现……但数量相当可观。

所以到目前为止我想出的最佳策略是使用上面的一些温和的创意宏代码来生成所有可能的总计/非总计表组合,但似乎 SAS 可能有更好的方法,也许隐藏在我从未听说过的深奥的 proc 步骤中......

--

尝试显示示例,使用三个自变量和 1 个因变量:

Ind1|2|3|Dependent1
0 0 0 1
0 0 1 3
0 1 0 5
0 1 1 7

期望的输出是:

0 0 ALL 4
0 1 ALL 12
0 ALL 0 6
0 ALL 1 10
ALL 0 0 1
ALL 0 1 3
ALL 1 0 5
ALL 1 1 7
0 ALL ALL 16
ALL 0 ALL 4
ALL 1 ALL 12
ALL ALL 0 6
ALL ALL 1 10
ALL ALL ALL 16
0 0 0 1
0 0 1 3
0 1 0 5
0 1 1 7

我可能忘记了一些组合,但这应该有助于理解这一点。

【问题讨论】:

  • 您是否有不使用PROC MEANSPROC TABULATE 的原因,在我看来它们都可以完美地做到这一点?也许一个带有几个 IV 和 DV 以及大约 20 行来显示“拥有”和“想要”的小例子会有所帮助。
  • 添加了小例子。我从来没有以这种方式使用过 proc tabulate ;我会试着研究一下,看看我能不能让它工作。

标签: sas


【解决方案1】:

PROC MEANS 应该可以轻松地为您做到这一点。您需要清理输出以使其与您想要的完全匹配(在您的示例中缺少 INDx = "ALL"),否则它可以正确完成计算。

data have;
input Ind1 Ind2 Ind3 Dependent1;
datalines;
0 0 0 1
0 0 1 3
0 1 0 5
0 1 1 7
;;;;
run;

proc means data=have;
class ind1 ind2 ind3;
var dependent1;
output out=want sum=;
run;

【讨论】:

  • 看起来不错!我有几个问题,但它们可能足够复杂,值得他们自己提问。谢谢老哥
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多