Précédent   Forum des professionnels en informatique > 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 Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/03/2011, 20h51   #1
Invité de passage
 
Inscription : février 2011
Messages : 22
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 22
Points : 0
Points : 0
Par défaut Fonction lag et valeurs manquantes

Bonjour

Voici le genre de table dont je dispose :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
DATA test;
input id $ code $;
datalines ;
1 1235
2  .  
3  .  
4 0123
5  .  
6  .  
7  .  
 ;
 run;
J'aimerai remplacer les valeurs manquantes par le code qui se trouve au dessus et ceci jusque la prochaine valeur de code renseignée.

Voici l'illustration sur la table crée précédemment :

1 1235
2 1235
3 1235
4 0123
5 0123
6 0123
7 0123

J'ai pensé à utiliser la fonction lag mais je rencontre quelques problèmes.
Est ce que quelqu'un a une idée??
Pour info j'utilise SAS 9 sur server!!

Merci d'avance
Ondine_sas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 21h42   #2
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 823
Points : 2 823
Bonsoir.
J'aurais utilisé un RETAIN plutôt qu'un LAG.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DATA test (DROP=memoire) ;
input id $ code $;
retain memoire ;
IF NOT missing(code) then memoire=code ;
else code=memoire ;
datalines ;
1 1235
2 .
3 .
4 0123
5 .
6 .
7 .
;
run;
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/03/2011, 21h49   #3
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Beau gosse
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 08h53   #4
Invité de passage
 
Inscription : février 2011
Messages : 22
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 22
Points : 0
Points : 0
Merci beaucoup Olivier.

Bonne journée
Ondine_sas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 09h08   #5
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 823
Points : 2 823
En SAS 9 il y avait plus "élégant" (pour la note artistique), avec la fonction COALESCE plutôt que IF/ELSE. Mais le RETAIN reste indispensable puisqu'il assure la mémorisation de la dernière valeur non manquante.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
DATA test (DROP=memoire) ;
input id $ code $;
retain memoire ;
 memoire = COALESCE(code,memoire) ;
 code = COALESCE(code,memoire) ;
datalines ;
1 1235
2 .
3 .
4 0123
5 .
6 .
7 .
;
run;
proc print ;
run ;
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h16.


 
 
 
 
Partenaires

Hébergement Web