2013-07-16 4 views
1

여기에 학습 SAS ...SAS DATA 단계에서 주파수 수를 어떻게 계산합니까?

내가 데이터 다음과 같습니다 salesPeople라는 세트가 각 personID를 들어

personID  personZip 
123   47382 
123   47382 
123   47382 
123   47382 
123   47382 
123   47382 
123   47382 
123   47382 
123   76737 
123   76737 
123   76737 
123   Smallville 
123   Smallville 
123   Smallville 
654   27767 
654   27767 
654   27767 
654   27767 
654   27767 
654   27767 
654   27767 
654   83764 
654   83764 
654   83764 
654   83764 
654   Metropolis 
654   Metropolis 
654   Metropolis 
654   Metropolis 
...   ... 

을, 수백 관측까지있을 수 있습니다. 대다수는 동일한 우편 번호로 표시됩니다. 1-3 개의 다른 유효한 우편 번호가있을 수 있습니다. 그리고 각 사람마다 도시 우편 번호 (이 경우 Smallville에있는 47382) 대신 도시 이름 (예 : Smallville)이있는 여러 관측이 있습니다. 이 데이터 세트에서 도시 이름은 personZip 열에서 항상 가장 자주 입력되는 personZip에 해당합니다.

내가하고있는 목적을 위해 도시 이름의 모든 인스턴스를 가장 일반적인 personZip으로 바꾸는 것이 좋을 것이라고 가정하는 것이 안전합니다. 예를 들어, Smallville47382Metropolis으로 바꾸고, 27767으로 바꾸는 것이 좋습니다. 사실 그것이 바로 내가하고 싶은 일입니다. salesPeople 데이터 세트에는 수천 개의 고유 한 personID 값이 있으며 수십만 개의 관측 값이 있습니다.

내가 원하는 것은 각 personID에 대해 가장 자주 나타나는 personZip을 확인한 다음 유효하지 않은 도시 이름을 해당 우편 번호로 바꾸는 것입니다. 가장 자주 발생하는 personZip 값을 확인하고 저장하여 salesPeople 데이터 세트와 다시 병합 할 수있는 가장 좋은 방법은 무엇입니까?

답변

1

proc summary을 통한 수동 방식입니다. 아마도 SQL을 사용하여이 작업을 수행하는 더 짧은 방법이있을 것입니다.

proc summary data=salespeople nway; 
    class personid personzip; 
    output out=tmp (drop=_type_); 
run; 

proc sort data=tmp; 
    by personid descending _freq_; 
run; 

data tmp; 
    set tmp; 
    by personid; 
    if first.personid; 
    /* default zip code is most common code */ 
    rename personzip = defaultzip; 
run; 

proc sort data=salespeople; 
    by personid; 
run; 

data salespeople; 
    merge salespeople (in=a) tmp (in=b); 
    by personid; 
    /* replace all non-numeric zips with default value */ 
    /* assumes non-numerics are rare */ 
    if personzip * 1 = '' then personzip = defaultzip; 
run; 
+0

굉장합니다. 다시 한번 감사드립니다! 전에 PROC SUMMARY를 보지 못했습니다. 그런데'(in = a)'와'(in = b)'는 최종 데이터 단계에서 필요하지 않습니까? 아니면 암묵적으로 어떻게 든 사용됩니까? – Clay

+1

'proc summary'와'proc means'는 SAS에서 관찰 그룹에 대한 요약 통계를 얻는 방법입니다. 'in = x' 물건은 기본적으로 포함하는 경향이있는 상용구 코드입니다. 이 예제에서는 필요하지 않습니다. SAS 문서에서 그들이하는 일에 대한 자세한 내용을 보려면'merge' 문을 확인하십시오. –

관련 문제