SAS는

2014-12-11 5 views
3

에 요청하지 않고 숫자에 문자 변수로 변환되어 I 다음 SAS 코드가 :SAS는

DATA WORK.temp; 
SET WORK.proj; 

RETAIN prev_time 
     prev_name 
     prev_type 
     count 0; 

FLAG = 0; 

IF((prev_name = name) AND (prev_type NE type) AND (prev_type = 'x')) THEN DO; 
    TimeDifference = time - prev_time; 
    IF(TimeDifference < 10*60) THEN DO; 
     FLAG = 1; 
     count + 1; 
     END; 
    END; 
prev_time = time; 
prev_type = type; 
prev_name = name; 
RUN; 

내가 내 문자 값의 수치로 변환 된 것을 말해 메모를 얻을 프로그램을 실행하면 :

참고 : 잘못된 숫자 데이터, 이름 = 'somename'

참고 : 문자 값의 수치

참고로 변환 된 잘못된 숫자 데이터, 이름 = 'othername'

SAS는이 변환 작업을 수행하지 않았으며 출력에 오류가 발생했습니다. 어떤 생각이 원인이 무엇입니까?

감사합니다.

답변

3

당신은 SAS에 (암묵적으로) 묻습니다.

단지 숫자 인 0네 변수를 설정 count 0으로 설정하지 않는
RETAIN prev_time 
     prev_name 
     prev_type 
     count 0; 

. 따라서 prev_name은 숫자이며 prev_name=name (나중에 IF 문과 할당에 모두 포함)이라고 말하면이 메모를 받게됩니다.

당신은 여기를 볼 수 있습니다

data test; 
    retain x y z 0; 
    put x= y= z=; 
run; 

세 가지 변수는 단지 z 0으로하지 초기화됩니다. 코드의 개행 문자는 의미가 없습니다 (SAS에서는 정상입니다).

또한, 귀하의 count 변수는 자동으로 당신이했던 방식을 사용하여 유지 :

count+1; 

합 연산자는 유지, 그리고 실종을 더한 것이 (가 누락되지 않음) 한 것을 의미한다 sum()처럼 작동 .

여기서 가장 간단한 해결 방법은 retain 문에서 count 0을 제거하고 나머지는 그대로 사용하는 것입니다.

+0

감사합니다. @Joe. 여기에있는 예제를 읽었습니다 : http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000214163.htm,하지만 지금은 그들이 말하는 것을 잘못 해석 한 것을 알게되었습니다. 나는이 문제를 해결하기 위해 카운트 변수를 먼저 넣는 것이라고 생각한다. 너무 빠른 것에 대한 추가 포인트! – Rookatu

+0

두 개의 retain 문이 필요하거나 retain 문에서 0 개의 초기화를 제거해야합니다. 그대로,'count' 변수를 retain에서 완전히 제거 할 수 있습니다 - 누락을 시작하여 자동으로 보존되고 해를 입히지 않습니다. – Joe

관련 문제