2013-02-20 5 views
0

현재 문제가있는 그룹을 통해 작업 중이므로이 시점에서 일부 방향을 사용할 수 있습니다. 나는 각 변수가 합쳐지기 위해 다른 (그러나 같은 값의 도메인) 그룹핑 레벨에 의해 많은 변수를 요약하려고한다. 가짜 의사 코드에서는 이것이 내 문제입니다. 각각의 empYEAR 변수 (광범위한 형식의 고용 가능 변수가 20 개나됩니다)에 대해 해당 특정 연도에 사업이 위치한 카운티에서 합산하려고합니다 .각 그룹 별 수치 변수 합계

데이터는 Dun & Bradstreet/NETS에서 20 년 동안의 사업체를 대표하는 테이블의 묶음입니다.

동일한 기본 키를 사용하는 다수의 플랫 파일 인 데이터베이스에 대한 자세한 내용.

기본 키는 DUNSNUMBER이며 여러 테이블에 있습니다.

  • 고용
  • 카운티
  • 판매
  • 신용 등급 (및 기타)

는 다음과 같이 구성 (이 표는 고용을 보여줍니다 모든 :하지만,이 자세히 테이블은 매년입니다 다른 변수들은 비슷한 구조로되어 있고, 1 년 뒤를 갖는다.)

dunsnumber|emp1990 |emp1991|emp1992|... |emp2011| 
a   | 12  |32  |31  |... | 35 | 
b   |   |2  |3  |... | 5  | 
c   | 1  |1  |  |... |  | 
d   | 40  |86  |104 |... | 350 | 
... 

내가 궁극적으로 다음과 같이 구성되어 테이블 싶은 :

county |emp1990|emp1991|emp1992|...|emp2011|sales1990|sales1991|sales1992|sales2011|... 
A 
B 
C 
... 

내 주요 과제는 지금 이것이다 : 나는대로 올해 군에 의해 고용 (또는 판매)을 합 수있는 방법을 그룹화 변수로서 county가 일년에 때로는 변경되고 다른 테이블에 지정되면 위의 예제 테이블에서?

긴 데이터 형식의 R과 같이 처리하는 것이 상당히 간단하지만 수백만 개의 레코드가 있으므로 포스트그레스에서 초기 처리를 유지하는 것이 좋습니다.

+1

테이블 구조는 통계 패키지 (SPSS, SAS, Splus 또는 R 등) 용으로 설계된 것처럼 보입니다. 데이터베이스 사용자는 데이터 구조를 표준화하여 반복 그룹 {emp1990, emp1991, ...}을 피할 수 있습니다 (대신 키 요소가 더 있음)."정규화"또는 "첫 번째 정규 양식"을 찾으십시오. – wildplasser

+0

나는 SAS가 R보다 6 백만 레코드를 더 잘 씹을 수 있다고 생각합니다. 당신은 그것이 출하 된 형식에서 데이터를 정상화하려고 노력해야한다고 생각합니까, 아니면 더 많은 FYI였습니까? – ako

+1

SAS에 액세스 할 수 있다면 매우 쉽습니다. SAS의 배열은 실제로 기존 변수를 참조합니다. 그리고 : DBMS는 통계를 위해 설계된 것이 아니며, 일부 데이터를 그룹으로 모으고, 히스토그램을 만들 수 있지만 교차 해석은 실행 가능성의 한계에 관한 것입니다. 사전 계산 집계 데이터 세트의 경우 SQL은 매우 유용합니다 (SAS의 proc SQL ...). 그러나 SQL (및 데이터 모델링) 학습은 사고 방식의 패러다임 변화를 필요로합니다. 6M 레코드는 Postgres (또는 SAS)에게 큰 것이 아닙니다. R은 코어에 "working-set"이 있어야하기 때문에 R에 비해 너무 클 수 있습니다. – wildplasser

답변

1

나는 당신의 질문을 이해하기 때문에 이것은 비교적 간단하게 들립니다. 정상적으로 작동하는 데 정상화 된 데이터를 선호하는 반면, 정상화하는 것이 사전에 당신에게 특별한 것을 사주는 것을 보지 못합니다.

SELECT sum(emp1990), sum(emp1991), .... 
    FROM county c 
    JOIN emp e ON c.dunsnumber = e.dunsnumber 
    JOIN sales s ON c.dunsnumber = s.dunsnumber 
    JOIN .... 
GROUP BY c.name, c.state; 

내가이 일을 간단한 방법이 표시되지 않는 :

당신이 같은 비교적 간단한 무언가를 원하는 날 것으로 보인다. 시스템 카탈로그 또는 정보 스키마를 쿼리하여 요약 할 열 목록을 생성 할 가능성이 높습니다. 나머지는 제가 말할 수있는 한 똑 바른 그룹입니다.

변수가 이름으로 변경되는 경우 가장 좋은 방법은 해당 유니언을 기반으로 위치보기를 작성하고 이에 대한 조인입니다. 이렇게하면 주요 쿼리의 복잡성을 숨길 수 있으며 기본 테이블에 조인하지 않으면 매우 잘 수행됩니다.

+0

문제는 각 연도에 이전 및 이후 연도와 다를 수도 있고 그렇지 않을 수도있는 별도의 위치 변수가 있다는 것입니다. 따라서 'GROUP BY'절에서 하나의 변수 만 사용할 수는 없습니다. 그룹화 수준 값은 특정 연도의 특정 위치를보기 위해 테이블에서 조회해야합니다. 필자는 궁극적으로 긴 형식을 얻기 위해 여러 조합 쿼리를 사용하여이를 해결하여 매년 위치를 반환했습니다. – ako

+1

변수가 이름에 따라 변경되는 경우 내 경험에 따라 할 일은 해당 조합을 기반으로하는 위치보기를 결합하고 이에 대한 조인입니다. 이렇게하면 주요 쿼리의 복잡성을 숨길 수 있으며 기본 테이블에 조인하지 않으면 매우 잘 수행됩니다. –

+0

팁이 좋습니다. 나는 그것을 시도 할 것이다. – ako