在宏中循环

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