SAS%在循环之前执行%

时间:2015-07-01 04:06:01

标签: loops macros sas

作为我的一部分,需要完成循环,直到满足条件。我使用的代码如下:

%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)条件是   假;循环将再次迭代。

1 个答案:

答案 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;