【发布时间】:2013-06-06 19:37:58
【问题描述】:
我是 SAS 新手,想创建一个宏程序,为以后的 PROC GPLOT 创建 y 轴值。
用简单的英语来说,这个图表上有两个可能的最小值(和最大值)。轴范围取决于哪个最小值最小。否则,SAS 将不会显示轴范围之外的数据。我不希望 SAS 自动为我创建范围。我想自己定义范围。
所以,这是我对以下过程的尝试:a) 计算两个最小值,b) 比较两者,c) 将两者中的较小者存储在一个新的宏变量中。如果我能让这个工作,一个最大的程序将很容易做到。
%MACRO min;
%LET ymin1 = %SYSEVALF(&minresult - (((&minresult + &maxresult)/2) * .05);
%PUT ymin1 = &ymin1;
%LET ymin2 = %SYSEVALF(&min - (&min * .05));
%PUT ymin2 = &ymin2;
%IF &ymin1 > &ymin2
%THEN %LET ymin = ymin2;
%ELSE %LET ymin = ymin1;
%PUT ymin = &ymin;
%MEND min;
我感觉我在语法上做错了什么。任何帮助表示赞赏。
【问题讨论】:
-
一些注意事项 - 没有宏程序之类的东西;
macro是术语本身。PROC FCMP允许您创建函数和过程,但它们不是使用宏语言 - 而是使用接近数据步骤语言的东西。此外,您应该将 &min/&minresult/&max/&maxresult 定义为宏参数;即使它们作为全局宏变量存在,最好再次定义它们。您仍然可以调用 %min(&min,&max,&minresult,&maxresult) 并且它会正常工作。