作为我的一部分,需要完成循环,直到满足条件。我使用的代码如下:
%IF &maxvif ge &thresh %THEN
%DO %UNTIL (&maxvif lt &thresh)
....
%END;
然而,它无法正常运行。即使& maxvif = 4.05,它仍然说(& maxvif lt& thresh)是假的。因此,这个循环永远不会停止。
下面是日志的一部分,两个宏变量都已正确解析,但最终评估出错了。
SYMBOLGEN:宏变量MAXVIF解析为4.050694277
SYMBOLGEN:宏变量THRESH解析为10
MLOGIC(BACKWARDVIF):%DO%UNTIL(& maxvif lt& thresh)条件是 假;循环将再次迭代。
答案 0 :(得分:2)
您的病情正在评估为文字。在文本比较" 10" < " 4.05"因为" 1" < " 4",就像" AZ" < " BB"由于" A" < " B"
为了充实@ Reeza的评论,这里有一个示例宏似乎按预期工作。这是%sysevalf
的全部内容:
%Macro testme(thresh,maxvif);
%Do %until (%sysevalf(&maxvif > &thresh ));
%Put "In Do Loop: maxvif= &maxvif -- thresh = &thresh";
%Let maxvif = %sysevalf(&maxvif + 1);
%End;
%Put "--- DONE! maxvif= &maxvif -- thresh = &thresh";
%Mend;
%testme(7,4.05123)
打印到日志:
In Do Loop: maxvif= 4.05123 -- thresh = 7
In Do Loop: maxvif= 5.05123 -- thresh = 7
In Do Loop: maxvif= 6.05123 -- thresh = 7
--- DONE! maxvif= 7.05123 -- thresh = 7;