Lag et/ou retain le retour
Bonjour,
J'aimerais pouvoir récupérer, pour un couple {date/echelle x}, dans le cas où ma variable duree est vide, la valeur de la variable durée du couple {date précédente/echelle x}.
J'ai fait des tentatives avec la fonction lag ou encore du retain, mais pour le moment je n'ai pas trouvé la solution.
La discussion suivante était prometteuse mais je n'ai pas réussi à l'adapter à mon cas :
[URL="http://www.developpez.net/forums/d1380496/logiciels/solutions-d-entreprise/business-intelligence/sas/sas-base/fonction-lag-sas/"]
Voici un extrait des données avec dans duree mes données initiales et dans duree_esperee ce que je n'ai pas et que je cherche à obtenir in fine :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| data truc;
input datea echelle $ sal duree duree_esperee;
format datea ddmmyy10.;
cards;
15000 1 150 8 8
15000 2 151 8 8
15000 3 152 10 10
15000 E 154 . .
15012 1 200 . 8
15012 2 201 . 8
15012 3 202 . 10
15012 E 204 . .
15040 1 251 13 13
15040 2 252 11 11
15040 3 253 9 9
15040 E 255 . .
15100 1 301 . 13
15100 2 302 . 11
15100 3 303 . 9
15100 E 305 . .
15110 1 310 15 15
15110 2 311 15 15
15110 3 312 15 15
15110 E 314 . .
;
run; |
Voici où j'en suis (mais ni la version sans commentaire => qui me renvoie bien des valeurs pour les lignes qu'il faut, mais à chaque fois la seule première valeur à cause du "first.") ni la version commentée (qui me renvoie les bonnes valeurs mais pas aux bonnes lignes car juste décalées par un "bête" lag) ne fonctionnent.
Code:
1 2 3 4 5 6 7
| data truc2;
set truc;
by datea echelle;
retain duree_modelisee 0;
/*if first.datea and first.echelle
then */duree_modelisee = lag(duree);
run; |
Je précise que je ne peux pas utiliser un lagx() car le x est différent d'un groupe d'observations à l'autre.
D'avance merci pour toutes les idées proposées !