在宏中循环
do loop within a macro
下面的代码返回以下错误消息:
Syntax error, expecting one of the following: a name, INPUT, PUT.
%macro run_calculation(amt, t, r);
data customer_value;
i=&r./100.;
do n=0 to t;
S=&amt.*[(1+ calculated i)^t - 1]/calculated i
end;
run;
%mend;
%run_calculation(amt=1000, t=8, r=5);
预期输出是 table 中每个 t 的 S 值。
几条评论:
- 您在分配 S 时缺少 semi-colon
;
。
- 不用
calculated i
,直接用i
- SAS 中的幂运算符是
**
而不是 ^
。
- 您在 do 循环语句中指向
t
而不是 macro-variable &t.
。
- 您递增
n
,而不是 t
,因此您需要在公式中使用 n
。
- 使用圆括号,而不是方括号。
- 您缺少显式输出语句以便为每个 n 获取 S 值。
%macro run_calculation(amt, t, r);
data customer_value;
i=&r./100.;
do n=0 to &t.;
S=&amt.*((1+i)**n - 1)/i;
output;
end;
run;
%mend;
%run_calculation(amt=1000, t=8, r=5);
i n S
0.05 0 0
0.05 1 1000
0.05 2 2050
0.05 3 3152.5
0.05 4 4310.125
0.05 5 5525.63125
0.05 6 6801.9128125
0.05 7 8142.0084531
0.05 8 9549.1088758
下面的代码返回以下错误消息:
Syntax error, expecting one of the following: a name, INPUT, PUT.
%macro run_calculation(amt, t, r);
data customer_value;
i=&r./100.;
do n=0 to t;
S=&amt.*[(1+ calculated i)^t - 1]/calculated i
end;
run;
%mend;
%run_calculation(amt=1000, t=8, r=5);
预期输出是 table 中每个 t 的 S 值。
几条评论:
- 您在分配 S 时缺少 semi-colon
;
。 - 不用
calculated i
,直接用i
- SAS 中的幂运算符是
**
而不是^
。 - 您在 do 循环语句中指向
t
而不是 macro-variable&t.
。 - 您递增
n
,而不是t
,因此您需要在公式中使用n
。 - 使用圆括号,而不是方括号。
- 您缺少显式输出语句以便为每个 n 获取 S 值。
%macro run_calculation(amt, t, r);
data customer_value;
i=&r./100.;
do n=0 to &t.;
S=&amt.*((1+i)**n - 1)/i;
output;
end;
run;
%mend;
%run_calculation(amt=1000, t=8, r=5);
i n S
0.05 0 0
0.05 1 1000
0.05 2 2050
0.05 3 3152.5
0.05 4 4310.125
0.05 5 5525.63125
0.05 6 6801.9128125
0.05 7 8142.0084531
0.05 8 9549.1088758