获取查询后对数据进行分组

时间:2013-12-16 11:47:32

标签: sql sas

重新组合查询中的数据时遇到问题。我有一个像这样的数据集:

PAT_ID MONTH  PRODUCT MOD SEV TOT_CNT
12341  201301 A       1   1   5
12342  201301 B       1   1   5
12343  201301 A       1   0   5
12344  201301 A       0   1   5

我想在下面的查询中选择:

select month,product,sum(mod)/tot_cnt as mod_p,sum(sev)/tot_cnt as sev_p from table X group by month, product;

但它的输出如下:

MONTH  PRODUCT MOD_P SEV_P
201301 A       0.4   0.4
201301 A       0.4   0.4
201301 A       0.4   0.4
201301 A       0.4   0.4

我只想要一排。即201301 A 0.4 0.4。我已经指定了group by子句,但它没有工作

2 个答案:

答案 0 :(得分:1)

你需要区分你的元素,如:

select DISTINCT month,product,sum(mod)/tot_cnt as mod_p,sum(sev)/tot_cnt as sev_p 
from table X 
group by month, product

答案 1 :(得分:0)

您的问题有3种方法。 第一个已经回答,它正在使用Distinct。 但这不是最有效的方式。

group by中使用proc sql时,所有变量必须声明为group by的参数或摘要函数(http://support.sas.com/documentation/cdl/en/proc/61895/HTML/default/viewer.htm#a002473699.htm)。 在您的查询中,Tot_cnt位于sum()之外,导致行多次出现。发生这种情况是因为SAS不知道该变量在同一个分组内的所有观测值中具有相同的值。

因此,除了使用不同之外,这些是我所知道的另外两种解决方案。

1)将tot_cnt放在sum

select month, product
, sum(mod/tot_cnt) as mod_p, sum(sev/tot_cnt) as sev_p
from X
group by month, product

2)将tot_cnt放在minmax

select month, product
, sum(mod)/max(tot_cnt) as mod_p, sum(sev)/max(tot_cnt) as sev_p
from X
group by month, product

我建议使用1)。