SAS宏if then else始终else

SAS宏if then else始终else,sas,sas-macro,Sas,Sas Macro,在制作热图的过程中,我遇到了一些问题。我所有的细胞都涂上了黄色!MLOGIC显示黄色的所有语句均为真,但单元格中的值不同?这里全是红色和白色。你能告诉我我的错误吗&谢谢!代码和日志如下所示: %macro main; ods html body='temp.html'; proc report data=step3 nowd; column kri_id range_mid_1 range_mid_2 %do i=1 %to 9; a2017_M0&i. %end; ; defi

在制作热图的过程中,我遇到了一些问题。我所有的细胞都涂上了黄色!MLOGIC显示黄色的所有语句均为真,但单元格中的值不同?这里全是红色和白色。你能告诉我我的错误吗&谢谢!代码和日志如下所示:

%macro main;

ods html body='temp.html';

proc report data=step3 nowd;
column  kri_id range_mid_1 range_mid_2 
%do i=1 %to 9;
a2017_M0&i. %end;
;
define kri_id / display;
define range_mid_1 / display;
define range_mid_2 / display;
%do i=1 %to 9;
define a2017_M0&i. / display;
%end;
%do p=1 %to 9;
compute a2017_M0&p.;
     %if a2017_M0&p. > range_mid_2
     %then call define(_col_, "style", "STYLE=[background=red]");

%else %if  range_mid_1 < a2017_M0&p. < range_mid_2
     %then call define(_col_, "style", "STYLE=[background=yellow]");
     ;endcomp;
%end;
;run;

ods html close;
ods html body='temp.html';
%mend; %main;
%macro main;
ods html body='temp.html';
过程报告数据=步骤3 nowd;
列kri_id range_mid_1 range_mid_2
%i=1%至9;
a2017_M0&i.%结束;
;
定义kri_id/显示;
定义范围\中间\ 1/显示;
定义范围\中间\ 2/显示;
%i=1%至9;
定义a2017_M0&i./展示;
%结束;
%do p=1%至9%;
计算a2017_M0&p。;
%如果a2017_M0&p>射程(中)2
%然后调用define(_col,,“style”,“style=[background=red]”);
%如果范围中1
日志文件如下

SYMBOLGEN:  Macro variable P resolves to 1
MLOGIC(MAIN):  %IF condition a2017_M0&p. > range_mid_2 is FALSE
SYMBOLGEN:  Macro variable P resolves to 1
MLOGIC(MAIN):  %IF condition range_mid_1 < a2017_M0&p. < range_mid_2 is TRUE
MPRINT(MAIN):   call define(_col_, "style", "STYLE=[background=yellow]") ;
MPRINT(MAIN):  endcomp;
MLOGIC(MAIN):  %DO loop index variable P is now 2; loop will iterate again.
SYMBOLGEN:  Macro variable P resolves to 2
MPRINT(MAIN):   compute a2017_M02;
SYMBOLGEN:  Macro variable P resolves to 2
MLOGIC(MAIN):  %IF condition a2017_M0&p. > range_mid_2 is FALSE
SYMBOLGEN:  Macro variable P resolves to 2
MLOGIC(MAIN):  %IF condition range_mid_1 < a2017_M0&p. < range_mid_2 is TRUE
MPRINT(MAIN):   call define(_col_, "style", "STYLE=[background=yellow]") ;
MPRINT(MAIN):  endcomp;
MLOGIC(MAIN):  %DO loop index variable P is now 3; loop will iterate again.
SYMBOLGEN:  Macro variable P resolves to 3
MPRINT(MAIN):   compute a2017_M03;
SYMBOLGEN:  Macro variable P resolves to 3
MLOGIC(MAIN):  %IF condition a2017_M0&p. > range_mid_2 is FALSE
SYMBOLGEN:  Macro variable P resolves to 3
SYMBOLGEN:宏变量P解析为1
逻辑(主):%如果条件a2017\U M0&p>范围_mid_2为假
SYMBOLGEN:宏变量P解析为1
M逻辑(主):如果条件范围中1范围_mid_2为假
SYMBOLGEN:宏变量P解析为2
M逻辑(主):如果条件范围中1范围_mid_2为假
SYMBOLGEN:宏变量P解析为3

在需要实际SAS代码逻辑的地方使用宏逻辑

您总是得到
%ELSE
子句的原因是字母
a
小于字母
r
,因此此测试总是错误的

%if a2017_M0&p. > range_mid_2

对于宏处理器
a2017\u M01
range\u mid\u 2
来说,它们只是文本字符串。宏处理器对数据集变量一无所知。

在需要实际SAS代码逻辑的地方使用宏逻辑

您总是得到
%ELSE
子句的原因是字母
a
小于字母
r
,因此此测试总是错误的

%if a2017_M0&p. > range_mid_2

对于宏处理器
a2017\u M01
range\u mid\u 2
来说,它们只是文本字符串。宏处理器对您的数据集变量一无所知。

谢谢!在你的帮助下,我在这里找到了答案。我必须使用IF-THE-ELSE而不使用%。然后比较变量

谢谢!在你的帮助下,我在这里找到了答案。我必须使用IF-THE-ELSE而不使用%。然后比较计算块中的变量

使用正则if then ekse在计算块中使用正则if then ekseTom谢谢。小问题。如果数据集中的列数不总是9?你现在知道怎么解决了吗?弄清楚你想运行什么SAS代码,并使用宏逻辑生成程序。汤姆,谢谢。小问题。如果数据集中的列数不总是9?现在您知道如何解决它了吗?找出您想要运行的SAS代码,并使用宏逻辑生成该程序。