根据条件动态创建变量SAS

时间:2016-08-11 11:12:32

标签: 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**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;

感谢您提出任何建议。

2 个答案:

答案 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)

不需要宏这是一个汇聚到

的几何系列

enter image description here

最简单的解决方案是:

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;