2017-02-08 1 views
1

다음은 증분 변수 "i"의 값을 기반으로 일련의 데이터 단계를 실행하는 코드입니다. 이후 나는 i의 값을 1 (숫자가 아닌 문자 값)로 지정했습니다. 이상적으로는 첫 번째 데이터 단계 블록을 실행해야하지만, 아래의 경우 두 번째 데이터 단계 블록이 실행 중입니다.프로그램 흐름 제어 - ssa

% & i. ; 로그 창에 1을 인쇄합니다.

%macro DSN; 
%let i = 1 ; 
data new_DSN; 
run; 
%if i = 1 %then %do;  
    data Dummy ; 
    run; 
    data DUMMY_ ; 
     set DUMMY new_DSN ; 
    run; 
%end; 
%else %if i ^= 1 %then %do ; 
    data DUMMY_ ; 
     set DUMMY_ new_DSN ; 
    run; 
%end; 
%mend DSN; 

%DSN; 

답변

5

귀하의 IF 문은 & I 매크로 변수를 호출하는 것이 아니라, 단순히 문자열을 비교하는 I 기술적으로 문자열을 말하기 때문에 실행하는 두 번째 루프는 "I"가 "1"로 동일하지 않은 이유도 설명 1.. % IF 문 양쪽에 앰퍼샌드를 넣어야합니다. 또한 코드 실행 위치를 쉽게 알 수 있도록 2 % PUT 문을 두었습니다. 아래를 참조

%macro DSN; 
%let i = 1 ; 
data new_DSN; 
run; 
%if &i = 1 %then %do; 
    %PUT First Loop Run; 
    data Dummy ; 
    run; 
    data DUMMY_ ; 
     set DUMMY new_DSN ; 
    run; 
%end; 
%else %if &i ^= 1 %then %do ; 
    %PUT Second Loop Run; 
    data DUMMY_ ; 
     set DUMMY_ new_DSN ; 
    run; 
%end; 
%mend DSN; 

%DSN; 

enter image description here