BookmarkSubscribeRSS Feed
Mdelarosa
Calcite | Level 5

Hola a todos.  Quiero hacer el calculo de la TIR de forma automatica para varios registros.
Tengo una tabla donde vienen las variables que contienen el monto inicial, los pagos y el plazo. por ejemplo:

IDMonto inicialpagoplazo
1100010010
............
n240015016


Estoy tratando de utilizar la función INTRR(freq, c0, c1[..., cn]), pero quiero que los valores de c1 hasta cn sean dinamicos.
El primer caso seria: tir = INTRR(1, -1*Monto inicial, 100,100,100,100,100,100,100,100,100,100).

Quiero utilizar esa función de manera que los pagos cambien de forma automatica para cada registro.

Con la funcion: repeat(pago, plazo), logro hacer el vector de los pagos, pero si la meto dentro de la funcion INTRR no funciona, INTRR(1, -1*Monto inicial, repeat(pago, plazo)).
Acontinuación pongo el codigo:

 

data Ventas;
set work.ventas_agosto;
flujo=repeat(pago,plazo);
tir= irr(1,-1*monto_inicial,flujo);
run;

 

 

Muchas gracias de antemano.

5 REPLIES 5
sardav
SAS Employee
Perdón por preguntar..., te refieres a la Tasa Interna de Retorno?
Es para que estemos de acuerdo en lo que quieres calcular.
Mdelarosa
Calcite | Level 5

Si, lo que quiero calcular es la Tasa interna de retorno.

sardav
SAS Employee

Entonces te comento que:

1) La función REPEAT se utiliza para variables alfanuméricas. Y repite dentro de una misma variable, así que no veo como te puede servir para tu caso.

2) Por lo que veo una alternativa es usar ARRAYS en el 'Paso Data'. Sabés lo que son los arrays? (espero que sí...)

Una idea de como sería un primer paso para tu código sería:

 

%let cte=10; /*es el monto*/
%let rep=7; /*es el plazo*/

data Ventas;
set SASUSER.TIR;
plazo=&rep;
monto=&cte;
array var{&rep};

do i=1 to dim(var);
var{i}=&cte;
end;
tir= irr(1,-1*monto_inicial,var1--var&rep);
run;

 

Todo indentado (o sea con sangrías), desde ya!

Espero que te sirva. 😊

 

 

Mdelarosa
Calcite | Level 5

Hola, gracias por la ayuda, pero, probe tu codigo y no resuelve mi duda, eso solo sirve para ese caso que estas poniendo.
No lo puedo utilizar para una tabla con muchos registros a los que quiero calcular sus TIR.
No es eficiente cambiar esas dos macro variables que estas poniendo miles de veces.

sardav
SAS Employee

Hola!

Lo de las dos variables macro es tan solo para probar y ver si eso es el resultado que necesitas.

Recuerda que el programa que escribí es "...Una idea de como sería un primer paso para tu código...

Sabes como agregar una tabla? O quieres/necesitas que intente yo hacer una segunda versión?

Te envío saludos.

sas-innovate-2024.png

Available on demand!

Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.

 

Register now!

Discussion stats
  • 5 replies
  • 673 views
  • 0 likes
  • 2 in conversation