我的问题如下:
我有一个包含两列的数据集
number_of_years payment
4 100
5 123
2 52
我想创建新变量(或变量集然后对它们求和),并根据number_of_years列中的值添加值。
新变量应该得到以下值:
number_of_years payment new_variable
4 100 100*1.01**4 + 100*1.01**3 + 100*1.01**2 + 100*1.01**1
5 123 123*1.01**5 + 123*1.01**4 + 123*1.01**3 + 123*1.01**2 + 123*1.01*1
2 52 52*1.01**2 + 52*1.01**1
e.t.c.
我最初的想法是将number_of_years列中的值放入宏变量中,循环使用其值创建其他列然后对其求和,但它不起作用。
data uprava;
set work.data_diskontace;
%let value1=number_of_years;
%macro spocti(n);
%do i=1 %to &n;
new_variable&i = payment*1.01**&i;
%end;
%mend doit;
%spocti(value1);
run;
感谢您提出任何建议。
答案 0 :(得分:3)
你应该使用常规循环而不是宏循环,因为迭代次数是动态的,取决于number_of_years
变量。
data uprava;
set work.data_diskontace;
new_variable = 0;
do i = 1 to number_of_years;
new_variable = new_variable + payment*1.01**i;
end;
run;
答案 1 :(得分:2)