Loops 根据条件动态创建变量,SAS
我的问题如下: 我有一个包含两列的数据集Loops 根据条件动态创建变量,SAS,loops,sas,Loops,Sas,我的问题如下: 我有一个包含两列的数据集 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**
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;
感谢您提出的建议。您应该使用常规循环而不是宏循环,因为迭代次数是动态的,取决于
年数
变量
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;
您应该使用常规循环而不是宏循环,因为迭代的数量是动态的,取决于
年数变量
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;
不需要宏这是一个收敛到
最简单的解决方案是:
data have;
input years payment;
cards;
4 100
5 123
2 52
;
run;
data want;
set have;
new_variable = (1.01*(1-1.01**years)/(1-1.01))*payment;
run;
不需要宏这是一个收敛到
最简单的解决方案是:
data have;
input years payment;
cards;
4 100
5 123
2 52
;
run;
data want;
set have;
new_variable = (1.01*(1-1.01**years)/(1-1.01))*payment;
run;
谢谢,我也找到了使用数组的解决方案。@jirijansa我的解决方案简单多了!不需要循环、阵列等。。。只是基本的数学谢谢,我也找到了使用数组的解决方案。@jirijansa我的解决方案简单多了!不需要循环、阵列等。。。只是基础数学