Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS STAT
SAS STAT Forum d'entraide sur les fonctionnalités liées à la statistique sur SAS : statistique descriptive, test, régression, classification
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 07/12/2010, 16h45   #1
Invité régulier
 
Astrid Genet
Inscription : novembre 2010
Messages : 43
Détails du profil
Informations personnelles :
Nom : Astrid Genet

Informations forums :
Inscription : novembre 2010
Messages : 43
Points : 7
Points : 7
Par défaut Remplacer des valeurs manquante par la moyenne des valeurs encadrantes

Bonjour,

J'ai un fichier contenant des mesures de température au pas quotidien. Hors certaines mesures sont manquantes et je souhaiterai les remplacer par la moyenne des valeurs encadrantes, c'est à dire faire la moyenne des mesures du jour d'avant et du jour d'aprés dans la case manquante. Lorsque deux (ou plus) jours manquent de façon consécutive, je voudrai mettre dans toutes les cases la même valeur qui serait la moyenne des températures encadrantes.

Ca me parait bien compliqué à réaliser. Il faut vraisemblablement partir sur une boucle de type:
"if temperature="" then do..."
mais je sèche sur la syntaxe de la moyenne des valeurs encadrantes, d'autant plus que dans certains cas on a plusieurs valeurs manquantes consécutives.
Ou alors une proc means, mais je ne vois absolument pas non plus la syntaxe qui me permettrait de faire ça.

Merci!

Astrid
AstridG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 09h21   #2
Membre éprouvé
 
Homme Rémi Bousquet
responsable adjoint service stat
Inscription : mars 2009
Messages : 334
Détails du profil
Informations personnelles :
Nom : Homme Rémi Bousquet
Âge : 35
Localisation : France

Informations professionnelles :
Activité : responsable adjoint service stat
Secteur : Finance

Informations forums :
Inscription : mars 2009
Messages : 334
Points : 464
Points : 464
Voici une table qui correspond je pense à ton problème :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DATA TABLE ;
input jour temp ;
format jour ddmmyy10. ;
cards ;
18263 1
18264 2
18265 .
18266 4
18267 .
18268 .
18269 .
18270 8
18271 .
;
run ;
La difficulté de ton problème vient de ce que l'on fasse appel à des lignes avant et des lignes après la ligne sur laquelle tu fais ton calcul, ce que SAS ne peut pas gérer. (lag() permet d'utiliser les lignes d'avant, mais pas celles d'après). Il faut donc procéder en plusieurs étapes.

Et voici une solution à ton problème, basée sur deux tris successifs, l'utilisation d'un retain, de la fonction missing() et de la fonction mean()

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
proc sort DATA = TABLE ; BY descending jour ; run ;
DATA TABLE ;
    SET TABLE ;
    retain temp_sup ;
    IF NOT missing(temp)
        then temp_sup = temp ;
run ;
proc sort DATA = TABLE ; BY jour ; run ;
DATA TABLE ;
    SET TABLE ;
    retain temp_inf ;
    IF NOT missing(temp)
        then temp_inf = temp ;
run ;
DATA TABLE ;
    SET TABLE ;
    IF missing(temp)
        then temp_retraite = mean(temp_inf, temp_sup)  ;
        else temp_retraite = temp ;
    DROP temp_inf temp_sup ;
run ;
La fonction mean permet de gérer simplement le cas où la première et/ou la dernière température est manquante. C'est plus propre que :
Code :
temp_retraite = (temp_inf + temp_sup) /2 ;
RemiBousquet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 21h35   #3
Rédacteur
 
Homme Stéphane
Consultant et formateur SAS et Cognos
Inscription : avril 2009
Messages : 1 791
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Consultant et formateur SAS et Cognos
Secteur : Conseil

Informations forums :
Inscription : avril 2009
Messages : 1 791
Points : 4 012
Points : 4 012
ca à l'air bien mais tu peux regarder la proc Expand pour voir si elle ne te simplifierai pas ce travail ?
__________________
N'oubliez pas de cliquer sur lorsque votre problème est réglé !

Moteur de recherche dans les papiers SAS
datametric est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 13h38   #4
Invité régulier
 
Astrid Genet
Inscription : novembre 2010
Messages : 43
Détails du profil
Informations personnelles :
Nom : Astrid Genet

Informations forums :
Inscription : novembre 2010
Messages : 43
Points : 7
Points : 7
Cette solution marche bien, merci beaucoup de vous être penchés sur la question!

Astrid
AstridG est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h10.


 
 
 
 
Partenaires

Hébergement Web