【发布时间】:2014-10-01 20:54:32
【问题描述】:
我是使用 SAS 的新手,我很难尝试将类似函数的宏的输出值分配给宏变量。测试后,我检查了该值是否计算正确,但是一旦我尝试分配它,程序就会崩溃。在这里你可以找到代码
%MACRO TP_BULLET(ZCURVE,TAU,YF=1);
/* KEEP ONLY THE ZERO CURVE UNTIL MATURITY*/
DATA _TEMP;
SET &ZCURVE;
IF MATURITY > &TAU THEN DELETE;
RUN;
PROC SQL NOPRINT;
SELECT DISTINCT 1- DF
INTO :NUME
FROM _TEMP
GROUP BY MATURITY
HAVING MATURITY = MAX(MATURITY);
QUIT;
PROC SQL NOPRINT;
SELECT SUM(DF)
INTO :DENO
FROM _TEMP;
QUIT;
PROC DELETE DATA=_TEMP;RUN;
%LET TP = %SYSEVALF(&YF*&NUME / &DENO);
&TP
%MEND TP_BULLET;
%MACRO TESTER2;
%LET K = %TP_BULLET(ZCURVE,TAU,YF=1);
%PUT .......&K;
%MEND TESTER2;
%TESTER2;
我得到的错误如下
WARNING: Apparent symbolic reference DENO not resolved.
WARNING: Apparent symbolic reference NUME not resolved.
ERROR: A character operand was found in the %EVAL function or %IF condition where a numeric operand is required. The condition was:
1*&NUME / &DENO
所以我认为 DATA 步骤未能创建 sas 表 _TEMP,但我不知道如何解决它。提前感谢您的任何帮助或建议
【问题讨论】:
-
如果您想要一个函数类型的宏,请考虑查看 PROC FCMP。另外,请查看您的宏变量范围。如果在本地创建,那么一旦宏结束,宏变量就不存在了。