新手自学sas,写了个计算现值的宏,运行的时候发现,参数代入数值是可以调用的,但是如果参数是变量名,就报错了,求助求助!
宏;
*计算现值;
%macro pv(r,n,c,p);
cpv=0;
%do i=1 %to &n;
cpv=cpv+&c/(1+&r)** &i;
%end;
tpv=cpv+&p/(1+&r)** &n;
output;
%mend pv;
调用1:
data test;
%pv(0.1,2,5,100);
run;
调用2:
data test;
r=0.1;
n=2;
c=5;
p=100;
%pv(r,n,c,p);
run;
如上所示,第一种调用是可以成功的,但是采用第二种方式调用则会报错,错误信息如下:
190 data test;
191 r=0.1;
192 n=2;
193 c=5;
194 p=100;
195 %pv(r,n,c,p);
ERROR: 在需要数值操作数的 %EVAL 函数或 %IF 条件中发现字符操作数。条件是: &n
ERROR: %TO 值(%DO I 循环中)无效。
ERROR: 宏 PV 将终止执行。
196 run;
NOTE: 由于出错,SAS 系统停止处理该步。
WARNING: 数据集 WORK.TEST 可能不完整。该步停止时,共有 0 个观测和 5 个变量。
WARNING: 数据集 WORK.TEST 由于该步已停止,而没有被替换。
NOTE: “DATA 语句”所用时间(总处理时间):
实际时间 0.03 秒
CPU 时间 0.03 秒