2014-05-12 5 views
0

첫 번째 코드는 작동하는 것처럼 보이지만 두 번째 코드는 로그에 배열에 대한 잘못된 참조가 있다는 것입니다. 이전 분기 값을 재정의하지 않고 별도의 변수 인 특정 분기에 새 값을 할당하려고합니다. 따라서 두 번째 예는 특정 ID에 대한 값을 변경하지만 QR3 ~ QR10에 대해서만 값을 변경합니다. 둘째배열에 대한 잘못된 참조

data comb_new; 
    set comb_new; 
     array DQR(10) QR1-QR10; 
      do i = 1 to 10; 
       if id = "071800" then DQR(i) = 6; 
       end; 
      drop i; 
run; 

:

data comb_new; 
    set comb_new; 
     array p3t (8) QR3-QR10; 
      do i = 1 to 8; 
      if id = "141956" then p3t(i) = 6; 
      end; 
       if id = "461818" then p3t(i) = 6; 
       end; 
       if id = "261808" then p3t(i) = 6; 
       end; 
       if id = "261893" then p3t(i) = 6; 
       end; 
       if id = "261894" then p3t(i) = 6; 
       end; 
       if id = "011936" then p3t(i) = 6; 
       end; 
       if id = "141854" then p3t(i) = 6; 
       end; 
       if id = "061883" then p3t(i) = 6; 
       end; 
      drop i; 
run; 
+2

코드에는 많은 오류가 있지만 그 오류는 없어야합니다. END가 너무 많아 마지막 항목을 제외한 모든 항목을 제거하십시오. 'end'는'do' 루프를 종료합니다. if 문과는 아무런 관련이 없습니다. – Joe

+0

그 오류가 발생하는 이유는 첫 번째 끝에서 do 루프가 종료되기 때문입니다. 루프의 끝에서 'i'는 배열 외부의 9와 동일합니다. 그런 다음 값을'p3t [9]'에 할당하려고 시도하는데, 이것은 나쁘다. @ 조이 맞습니다. 'end;'문제를 고쳤습니다. – DomPazz

+0

잘못된 참조는 배열이 올바르게 사용되지 않았 음을 의미합니다 (대개 괄호 선택을 생략 함). 그럴 경우 Array Subscript Out of Bounds 오류가 발생합니다. 'data _null_; 배열 x [5]; x [6] = 3; 예를 들어, 실행; 이 에러는'data _null_; 배열 x [5]; x = 3; 실행; – Joe

답변

0

먼저 pat처럼 번호가없는 뭔가 p3t에서 배열 이름을 변경합니다. SAS는 배열 이름에 대해 더 까다 롭습니다. 그렇게함으로써 오류를 제거 할 수 있습니다.

두 번째로 첫 번째 DATA 단계가 끝난 후 데이터 세트 comb_new을 확인하십시오. 변수 QR3-QR10이 데이터 집합에 없으면 잘못된 참조가 발생합니다.