2013-12-16 2 views
2

쿼리 데이터를 다시 그룹화하는 동안 문제가 있습니다.쿼리 가져 오기 후 데이터 그룹화

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

을하지만 같은 그것의 제공 출력 :

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 

나는 아래의 쿼리처럼 선택하려합니다 : 난 단지 하나 개의 행을 원하는

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입니다. 나는 절에 의해 그룹을 지정한하지만

+1

'DISTINCT'를 사용하지 않았습니까? – MusicLovingIndianGirl

답변

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 
0

이 문제 중 3 가지 방법이 있습니다합니다. 첫 번째 답변은 이미 Distinct입니다. 하지만 가장 효율적인 방법은 아닙니다.

proc sqlgroup by를 사용하여, 모든 변수는 어느 group by의 인수 또는 요약 기능 (http://support.sas.com/documentation/cdl/en/proc/61895/HTML/default/viewer.htm#a002473699.htm) 안에 언급해야한다. Tot_cnt가 sum() 외부에 있었고 행이 여러 번 나타났습니다. 이는 SAS가이 변수가 동일한 그룹 내의 모든 관측치에서 동일한 값을 가지고 있는지 모르기 때문에 발생합니다.

따라서 별개의 것을 사용하는 것 외에 다른 두 가지 해결책이 있습니다. 내가 1을 사용하는 것이 좋습니다 거라고 min 또는 max

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 

내부 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 내부 tot_cnt 퍼팅

1)).

관련 문제