控制程序流程 - sas

时间:2017-02-08 05:03:44

标签: sas sas-macro

以下是基于增量变量“i”的值执行一组数据步骤的代码。因为我已将i的值分配给1(数字而非字符值)。理想情况下,第一个数据步骤块需要执行,但在下面的情况下,第二个数据步骤块正在执行。

%put& 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;

1 个答案:

答案 0 :(得分:5)

您的IF语句不是调用& I宏变量,而只是将字符串I与1进行比较。这也解释了为什么您的第二个循环运行,因为从技术上讲,字符串“I”不等于“1”。你只需要在两个%IF语句中将&符号放在I前面。我还放了两个%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