0

我是 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;

我有一种感觉,我在语法上做错了什么。任何帮助表示赞赏。

4

1 回答 1

2

简单的解决方案是跳过 %if 内容,只从 ymin1/2 定义 ymin:

%let ymin = %sysfunc(min(&ymin1,&ymin2));

除了第一个 ymin 声明中缺少 ) 之外,您遇到的特定语法错误%let ymin = ymin2;应该是%let ymin=&ymin2;. 否则它只包含文本“ymin2”,而不是宏变量的内容。

整个宏:

%MACRO min(minresult,maxresult,min,max);
%LET ymin1 = %SYSEVALF(&minresult - (((&minresult + &maxresult)/2) * .05));
%PUT ymin1 = &ymin1;
%LET ymin2 = %SYSEVALF(&min - (&min * .05));
%PUT ymin2 = &ymin2;
%let ymin = %sysfunc(min(&ymin1,&ymin2));
%PUT ymin = &ymin;
%MEND min;

%min (5,6,3,4);
于 2013-06-06T19:54:05.087 回答