Bonjour,
J'ai une table exemple ici :
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
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 ;
-> 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 :
Quelqu'un peut-il m'aider?
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;
Merci beaucoup!
Partager