2017-02-08 7 views
1

Ниже приведен код выполнения набора шагов данных на основе значения переменной инкремента «i». Поскольку я присвоил значение i 1 (числовое, а не знаковое значение). В идеале первый блок данных должен выполнить, но в следующем случае выполняется второй блок данных.Управление потоком программы - sas

% положить & 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 макропеременной, а просто сравнивая строку я 1. Это также объясняет, почему ваш второй цикл работает потому, что технически говоря строку «Я» не равно «1». Вам просто нужно поставить амперсанд перед I в обоих отчетах% IF. Я также поставил два% 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