如果是那么SAS宏

时间:2013-06-06 19:37:58

标签: sas sas-macro

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

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

1 个答案:

答案 0 :(得分: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);