2014-11-14 4 views
0

실종을 대체하는 논리는 매우 명확하지만 SAS로 가져 가면 시작하기가 너무 복잡합니다.SAS에서 모드로 누락 값 채우기

+1

두 가지 제안 사항. 먼저 라이센스가있는 사용자는 PROC EXPAND 및 PROC STDIZE를 살펴보십시오. 둘 다 당신이하는 일과 관련된 옵션을 가지고 있습니다. 둘째, 시도해보십시오. 모드로 바꾸려면 첫 번째 단계는 해당 모드를 계산 _하는 것입니다. 그렇게하지 않으면, 당신이 여기에있는 것을 게시하고 더 의미있는 도움을 얻을 수 있습니다. 문제를 명확히하기에 충분한 데이터를 게시하고 최소한 모드를 계산하고 간단한 사례를 해결하는 코드를 게시하십시오. – Joe

+0

아직도 고민 중입니까? – Kostya

답변

1

코드가 제공되지 않았으므로 시작하기위한 지침을 제공 하겠지만 구체적인 내용은 사용자에게 알려주십시오.

먼저 데이터의 월 열을 만든 다음 매월 각 키의 모드를 계산하십시오. 또한이 새로운 데이터를 자체 데이터 세트에 저장할 수 있습니다.

data temp; 
    set original_data; 
    month = month(date); 
run; 

proc univariate data=temp modes; 
    var values; 
    id key month; 
    out=mode_data; 
run; 

그러나이 과정은 당신이 원하는하지 않을 수 매우 구체적인 방법으로 모드를 계산 (넥타이의 경우 가장 낮은 디폴트는 아무것도 두 번 이상 발생하지 않는 경우에는 모드를 생산하지 않음) 문서 : http://support.sas.com/documentation/cdl/en/procstat/63104/HTML/default/viewer.htm#procstat_univariate_sect027.htm

이것이 작동하지 않는다면 proc sql을 사용하여 각 키, 월, 값 조합의 수를 구하고 거기에서 자신의 모드를 계산하는 것이 좋습니다.

proc sql; 
    create table mode_data as select distinct 
    key, month, value, count(*) as distinct_count 
    from temp 
    group by key, month, value; 
quit; 

거기에서 데이터의 모든 달을 포함하는 테이블을 만들 수 있습니다.

proc sql; 
    create table all_months as select distinct month 
    from temp; 
quit; 

는 모드 데이터에서 누락 개월 만에 다시 병합하고 "오래된 모드"에 대한 이전 달을 검색 할 lag 또는 retain 기능을 사용하는 것을 잊지 마십시오. 값이 없을 때

그런 다음 단순히 다시 우리가 위에서 만든 임시 데이터 세트로 완전히 채워 모드 데이터를 병합 모드에 누락 된 값을 전가 (즉, 값 =입니다.) 당신이 시작하는 데 도움이

희망을.