【问题标题】:Counting distinct values in a proc means statement?计算proc中的不同值意味着语句?
【发布时间】:2014-01-15 23:39:41
【问题描述】:

这是对此的后续问题:Cleaner way of handling addition of summarizing rows to table?

但是,这一次我们恐怕有些不同。我们有:一个包含四个自变量和两个因变量的数据集。我们想要:

a) 由三个独立变量区分的集合,其中包含不同变量#4 的计数和变量#5 和#6 的总和。这很容易。

b) 为三个自变量的每个组合创建的总条目,包括不同变量 #4 的计数以及变量 #5 和 #6 的总和。这并不容易(对我来说)。

所以我们的想法是修改这个:

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

这样它还可以计算变量 #4 的不同值的数量,对于变量 #1、2 和 3 的每个组合,包括 ALL。

我的想法:

1) 放弃希望所有进入这里的人;回过头来尝试在 proc sql 中使用一堆宏代码来执行此操作,这使您可以使用 count(distinct )) 有用的东西。

2) 具有 nlevels 的东西?

3) 使用复杂的、糟糕的宏代码来生成处理唯一性需要许多哈希值。

4) ??

在这里创建示例数据有点棘手;如果这没有意义,请告诉我,我会尽力想出一些。

--

编辑:需要明确的是,SQL 查询需要宏代码(并且会很慢)的原因是因为它需要类似于以下内容(但扩展到更多级别)

select
"ALL" as ind1,
ind2
...
group by ind1, ind2;

select
ind1,
"ALL" as ind2
...
group by ind1, ind2;

select
"ALL" as ind1,
"ALL" as ind2
...
group by ind1, ind2;

随着我们添加越来越多的自变量,这将变得非常笨拙。

【问题讨论】:

  • 想法 1) 有什么问题?你不需要一堆宏代码,只需要一个微不足道的 sql 查询。
  • 您可能希望在此处包含一些细节 - 我认为 SQL cmets 不了解 TOTAL 行。如果可能,让问题独立存在。

标签: sas


【解决方案1】:

你试过了吗:

Proc Sql;
Count(distinct #4) as var_4, sum(#5) as var_5, sum(#6) as var_6
from have
group by #1,#2,#3
order by #1,#2,#3;
quit;

【讨论】:

  • 请参阅编辑以获得更清晰的示例,说明为什么这不会削减它。
【解决方案2】:

我认为没有一种干净的方法可以直接使用 PROC MEANS 来执行此操作。我可能做的是一个两步过程。首先 PROC 意味着生成总行数和两个总和,然后将其连接回 PROC SQL 中的原始表以获得不同 - 当您执行连接时,它会巧妙地为您提供正确的行,包括总行。

您也可以使用 PROC REPORT 来执行此操作,但我不确定它是否比两步解决方案更容易。

【讨论】:

    猜你喜欢
    • 2013-12-31
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多