Bonjour,
je ne parviens pas à résoudre le problème suivant:
Pour une année de survenance donnée AN_SURV, et pour un mois de survenance donné MOIS_SURV, je dispose de mois d'ouverture MOIS_OUV affectés d'un nombre d'OUVERTS.
1. Par AN_SURV et par MOIS_SURV, je voudrais affecter les lignes des MOIS_OUV manquants entre deux MOIS_OUV existants affectés des valeurs OUVERTS=0.
Dans cet exemple, pour AN_SURV=1, MOIS_SURV=1, il manque les MOIS_OUV:6,7,8 et 10 à 16.
2.Je voudrais également créer des lignes si elles sont manquantes jusqu'à une valeur passée en paramètre. %moisfin=20 par exemple.
J'ai utilisé first.MOIS_OUV last.MOIS_OUV, utilisé retain et crée des sous-cas mais ça ne fonctionne pas.
Mon exemple:
Merci pour votre aide.
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
17 DATA entree ; format AN_SURV MOIS_SURV MOIS_OUV Ouverts 16.; AN_SURV=2008 ;MOIS_SURV=1 ;MOIS_OUV=1 ;Ouverts=100 ;output ; AN_SURV=2008 ;MOIS_SURV=1 ;MOIS_OUV=2 ;Ouverts=200 ;output ; AN_SURV=2008 ;MOIS_SURV=1 ;MOIS_OUV=3 ;Ouverts=30 ;output ; AN_SURV=2008 ;MOIS_SURV=1 ;MOIS_OUV=4 ;Ouverts=10 ;output ; AN_SURV=2008 ;MOIS_SURV=1 ;MOIS_OUV=5 ;Ouverts=5 ;output ; AN_SURV=2008 ;MOIS_SURV=1 ;MOIS_OUV=9 ;Ouverts=100 ;output ; AN_SURV=2008 ;MOIS_SURV=1 ;MOIS_OUV=17 ;Ouverts=99 ;output ; AN_SURV=2008 ;MOIS_SURV=2 ;MOIS_OUV=1 ;Ouverts=101 ;output ; AN_SURV=2008 ;MOIS_SURV=2 ;MOIS_OUV=2 ;Ouverts=201 ;output ; AN_SURV=2008 ;MOIS_SURV=2 ;MOIS_OUV=3 ;Ouverts=31 ;output ; AN_SURV=2008 ;MOIS_SURV=2 ;MOIS_OUV=4 ;Ouverts=11 ;output ; AN_SURV=2008 ;MOIS_SURV=2 ;MOIS_OUV=5 ;Ouverts=6 ;output ; AN_SURV=2009 ;MOIS_SURV=1 ;MOIS_OUV=1 ;Ouverts=1100 ;output ; AN_SURV=2009 ;MOIS_SURV=1 ;MOIS_OUV=5 ;Ouverts=1150 ;output ; Run ;
PS:
voici mon code qui ne fonctionne 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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 %let Moisfin=20; data sortie (drop= nb_ouverts prochain_mois_ouv mois_ouv i nbmois); set entree; by AN_SURV MOIS_SURV; retain nb_ouverts nbmois dernier_mois_ouv prochain_mois_ouv; if first.MOIS_OUV then do; nb_ouverts=ouverts; dernier_mois_ouv=MOIS_OUV; output; end; else do; if MOIS_OUV=dernier_mois_ouv+1 then do; nb_ouverts=ouverts; dernier_mois_ouv=MOIS_OUV; output; end; else do; prochain_mois_ouv=MOIS_OUV; nbmois=prochain_mois_ouv-dernier_mois_ouv; do i=1 to nbmois-1; MOIS_OUV=dernier_mois_ouv+i; output; end; MOIS_OUV=prochain_mois_ouv; ouverts=0; output; ouverts=0; dernier_mois_ouv=MOIS_OUV; end; end; if last.MOIS_OUV and MOIS_OUV ne &Moisfin. then do; nbmois=&Moisfin.-MOIS_OUV; do i=1 to nbmois; MOIS_OUV=MOIS_OUV+i; output; end; end; run;
Partager