SAS宏if then else始终else
在制作热图的过程中,我遇到了一些问题。我所有的细胞都涂上了黄色!MLOGIC显示黄色的所有语句均为真,但单元格中的值不同?这里全是红色和白色。你能告诉我我的错误吗&谢谢!代码和日志如下所示: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
%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代码,并使用宏逻辑生成该程序。