Bonjour,
je cherche à combler les vides d'un tableau de valeurs en utilisant retain.
Ma tentative de programme comble le premier vide correctement, mais pas les autres, et donne la valeur S du retain à toutes les suivantes.
Pour un age donné, je souhaite combler les valeurs anc manquantes et que la variable S prenne la valeur S précédente. (exemple pour age_01: anc=8 est manquant, je voudrai créer cette valeur avec un S=0.78)
Voici mon programme qui ne donne pas le résultat espéré:
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
45
46
47
48
49
50
51 /*exemple de test*/ Data entree; input age$ anc 2. S 6. ; cards; age_01 0 0.95 age_01 1 0.9 age_01 2 0.88 age_01 3 0.86 age_01 4 0.84 age_01 5 0.82 age_01 6 0.8 age_01 7 0.78 age_01 9 0.76 age_01 10 0.74 age_01 11 0.72 age_01 12 0.7 age_01 13 0.68 age_01 14 0.66 age_01 15 0.64 age_01 17 0.62 age_01 19 0.6 age_01 22 0.56 age_01 23 0.54 age_01 25 0.52 age_01 28 0.5 age_01 30 0.48 age_01 32 0.46 age_01 35 0 age_02 0 1 age_02 1 0.93 age_02 2 0.915 age_02 4 0.885 age_02 5 0.87 age_02 6 0.855 age_02 7 0.84 age_02 8 0.825 age_02 9 0.81 age_02 10 0.795 age_02 14 0.735 age_02 15 0.72 age_02 16 0.705 age_02 17 0.69 age_02 18 0.675 age_02 19 0.66 age_02 21 0.645 age_02 24 0.63 age_02 29 0.615 age_02 33 0 ;
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31 data sortie/*(keep= age anc S)*/; set entree; by age; retain anc_old S_old; if first.age then do; anc_old=anc; S_old=S; output; end; else do; if anc=anc_old+1 then do; anc_old=anc; S_old=S; output; end; else do; inter=anc-anc_old; do i=1 to inter-1; anc=anc_old+1; S=S_old; output; end; anc_old=anc; S_old=S; end; end; run;
Partager