2011-08-16 4 views
1

내 데이터 세트에는 두 가지 변수 ID와 진단이 있습니다. ID 및 진단을 기반으로 데이터 집합에 행 번호를 할당하려고합니다.proc rank in sas

내가 사용한 코드는;

proc sort data = temp; 
by ID diagnosis; 
run; 

proc rank data = temp out = temp1; 
by id; 
var diagnosis; 
ranks = diag_rank; 
run; 

그 제공 씨 오류 : 목록에서 변수 진단 유형

내 진단 텍스트와 numric 값을 모두가 알고에게 일치하지 않습니다. 이 문제를 해결할 수있는 방법이 있습니까? 고마워.

답변

3

고유 한 행 번호를 찾는 경우 다음이 작동해야합니다. 당신은 ID 및 진단에 따라 조건부 행 번호가 필요한 경우

data temp; 
    set temp; 
    retain row_number 0; 
    row_number + 1; 
run; 

, 다음 시도 :

data temp; 
    set temp; 
    by ID diagnosis; 
    retain row_number; 
    if first.ID then do; 
     row_number = 0; 
    end; 
    row_number + 1; 
run; 

는 경우, 다른 한편으로는, 당신은에 부과 할 것을 순위의 어떤 명시적인 순서가있다 정렬 된 문자 값 이외의 DIAGNOSIS 변수를 사용하는 경우 사용자 정의 형식을 사용하여 각 문자 값을 숫자에 매핑 한 다음이 형식을 사용하여 다음과 같이 데이터 단계에서 row_number 변수를 작성할 수 있습니다.

proc format; 
    value $diag_row 
    "67" = 2 
    "A234" = 4 
    "B45" = 3 
    "V456" = 1 
    other = 999 
    ; 
run; 

data temp; 
    set temp; 
    format row_number 8.0; 
    row_number = put(diagnosis,$diag_row.); 
run; 
+0

감사합니다. 당신은 최고입니다. 그것은 일했다 :) – Nupur

0

Nupur, VAR 문은 숫자 변수 만 필요합니다. DIAGNOSIS가 문자로 정의되었지만 숫자 값만 포함하는 경우 INFORMAT 문을 사용하여 새 숫자 변수를 작성하십시오. 귀하의 예제의 시작 부분에 다음을 추가하고 작동합니다 : 당신의 진단은 문자 값을 포함하는 경우

data temp; 
    set temp(rename=(diagnosis=diag_char)); 
    format diagnosis 8.0; 
    diagnosis = input(diag_char , 8.0); 
    drop diag_char; 
run; 

그러나, 당신은 진단을 재 분류 또는 아마도 숫자 값으로 값을 변환하는 중 하나가 필요합니다 (이 경우 말이된다).

+0

안녕하세요, 답장을 보내 주셔서 감사합니다. 제 진단에는 V456, A234, 67, B45 같은 가치가 있습니다. 이것을 문자 또는 변수로 변환 할 수 없습니다. 이 문제를 해결할 방법이 있습니까? – Nupur

0

행 번호 만 사용하려는 경우 따옴표와 공백없이 기본 변수 "_ N_"을 사용할 수 있습니다.

조건부 일 경우 Rwill의 대답을 따르십시오 ..

관련 문제