【问题标题】:proc tabulate get `sumproduct` resultproc 制表得到“sumproduct”结果
【发布时间】:2015-02-04 11:43:52
【问题描述】:

数据看起来像

TM  a  b  c
A   1  2  0.5
B   2  5  0.4

理想的输出是

TM  c
A   0.5
B   0.4
All 3/7 

我在proc tabulate 中尝试了pctsum。但它并没有按我预期的方式工作。

proc tabulate data = dat;
class TM;
var a b c;
table (TM='' all), (c * pctsum<b>='' * f=5.1);
run;

【问题讨论】:

  • 您的代码的输出是什么样的?是前三行吗?

标签: sas proc


【解决方案1】:

我收集到您希望您的总数是 C 列的平均值,由 B 列加权。在表语句中使用 c * mean 并添加 weight 语句。您将无法将总数显示为分数,但您可以增加格式中的小数位数:

proc tabulate data = dat;
class TM;
var a b c;
table (TM='' all), (c * mean='' * f=5.3);
weight b;
run;

新选项:对于不同变量的不同权重,使用多个var 语句并为每个语句添加一个weight= 选项:

proc tabulate data = dat;
class TM;
var b / weight=a;
var c / weight=b;
table (TM='' all), (c * mean='' * f=5.3)
                   (b * mean='' * f=5.3);
run;

【讨论】:

  • 我可以将不同的weight 分配给var 中列出的不同变量吗?例如输出sum(b*c)/sum(b)sum(d*a)/sum(a) ? (假设我在var 中有多个 a、b、c)
  • 添加示例回答。
  • 在你的第二个例子中,weight b 上面的run; 可以被删除吗?
  • 是的,我忘了把它拿出来。
  • 其实你可以得到分数,如果你想:FRACTw.格式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-10
  • 1970-01-01
  • 2015-09-05
  • 2012-10-31
相关资源
最近更新 更多