Bonjour,

J'ai une table exemple ici :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
data mouvements;
input id $
compteur /*numero de mouvement par id*/
max /*max compteur*/
PM_debut /*pm au 31/12*/
taux
montant_mvt
;
CARDS;
ID001 1 3 1000 0.002 -500
ID001 2 3 1000 0.002 -50
ID001 3 3 1000 0.002 200
ID002 1 2 500 0.002 900
ID002 2 2 500 0.002 -200
ID003 1 1 300 0.002 600
;
J'aimerais créer les variables pm_avant_mvt; pm_apres_mvt; taux_rachat; CBVNR_avant; CBVNR_apres tel que dans le fichier excel ci-joint
-> exemple.xlsx

Pour cela, je pensais faire un boucle et utiliser do et retain. Pour chaque ligne de mouvement je veux que mes variables s'incrémente grâce à la précédente.

J'ai tenté de faire ceci, mais ça ne marche pas :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
data test;
set mouvements;
retain pm_avant_mvt; /*si compteur = 1 (si mouvement n°1) alors PM_avant_mvt = PM_debut x (1+taux) sinon PM_avant_mvt = PM_apres_mvt (n-1) x (1+taux)*/
retain pm_apres_mvt; /*est egal à PM_avant_mvt + montant_mvt*/
retain taux_rachat; /*si montant_mvt < 0 alors taux rachat = montant_mvt/PM_avant_mvt*/
retain CBVNR_avant; /*si compteur = 1 (si mouvement n°1) alors CBVNR_avant = PM_debut sinon CBVNR_avant = CBVNR_apres (n-1)*/
do compteur = 1 to max by id;
if first.id and compteur = 1 then PM_avant_mvt = PM_debut*(1+taux) and PM_apres_mvt = PM_avant_mvt + montant_mvt;
else PM_avant_mvt = PM_apres_mvt*(1+taux) and PM_apres_mvt = PM_avant_mvt + montant_mvt;
if montant_mvt < 0 then taux_rachat = montant_mvt/PM_avant_mvt;
else taux_rachat = 0;
if first.id and compteur = 1 then CBVNR_avant = PM_debut and CBVNR_apres = CBVNR_avant*(1+taux_rachat);
else CBVNR_avant = lag(CBVNR_apres) and CBVNR_apres = CBVNR_avant*(1+taux_rachat);
output;
end;
run;
Quelqu'un peut-il m'aider?

Merci beaucoup!