Précédent   Forum du club des développeurs et IT Pro > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS Base
SAS Base Forum d'entraide sur SAS base : étape data, procédures non statistiques, procédures non graphiques, SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 08/01/2013, 03h31   #1
labuche1138
Futur Membre du Club
 
Inscription : juillet 2012
Messages : 33
Détails du profil
Informations forums :
Inscription : juillet 2012
Messages : 33
Points : 17
Points : 17
Par défaut Utilisation de retain

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)


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
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
;
Voici mon programme qui ne donne pas le résultat espéré:

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
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;
Merci pour votre aide
labuche1138 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 11h24   #2
labuche1138
Futur Membre du Club
 
Inscription : juillet 2012
Messages : 33
Détails du profil
Informations forums :
Inscription : juillet 2012
Messages : 33
Points : 17
Points : 17
Par défaut correct?

Bon je me réponds à moi même:

ce code à l'air correct:

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 
DATA sortie /*(keep= age anc S)*/;
SET entree;
BY age;
retain anc_old S_old x y;
 
IF first.age then do;
	anc_old=anc;
	S_old=S;
	output;
 
	IF last.age then output;
end;
 
else do;
 
	IF anc=anc_old+1 then do;
			anc_old=anc;
			S_old=S;
			output;
	end;
 
    else do;
 
		x=anc;
		y=S;
		j=anc-anc_old;
 
		do i=1 TO j-1;
		  anc=anc_old+i;
		  S=S_old;
		  output;
		  end;
		  anc=x;
		  S=y;
		  output;
		 anc_old=anc;
		 S_old=S;
		 end;
 
	end;
run;
labuche1138 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/01/2013, 13h40   #3
s_a_m
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 310
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 310
Points : 2 538
Points : 2 538
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 19h20   #4
labuche1138
Futur Membre du Club
 
Inscription : juillet 2012
Messages : 33
Détails du profil
Informations forums :
Inscription : juillet 2012
Messages : 33
Points : 17
Points : 17
Merci s_a_m
labuche1138 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h56.


 
 
 
 
Partenaires

Hébergement Web