控制程序流 - sas
Controlling program flow - sas
下面是根据增量变量 "i" 的值执行一组数据步骤的代码。由于我已将 i 的值分配给 1(数字而非字符值)。理想情况下,第一个数据步块需要执行,但在下面的情况下,第二个数据步块正在执行。
%放&我。 ;将 1 打印到日志 window.
%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;
您的 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;
下面是根据增量变量 "i" 的值执行一组数据步骤的代码。由于我已将 i 的值分配给 1(数字而非字符值)。理想情况下,第一个数据步块需要执行,但在下面的情况下,第二个数据步块正在执行。
%放&我。 ;将 1 打印到日志 window.
%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;
您的 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;