IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SAS Base Discussion :

Travailler les données en fonction des dates [DATA]


Sujet :

SAS Base

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Ingénieur R&D
    Inscrit en
    Février 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Février 2019
    Messages : 9
    Points : 8
    Points
    8
    Par défaut Travailler les données en fonction des dates
    Bonjour,

    J'ai de nouveau des soucis sur ma programmation SAS, avec des dates cette fois-ci.

    - Problème 1:
    j'ai une table avec les intitulés suivants:
    Id
    Date
    Poids
    Moyenne_Poids
    --> par Id, j'ai plusieurs lignes avec différentes dates et parfois plusieurs lignes pour une même date.

    Mon problème est que : quand la cellule 'Poids' est vide pour une date donnée, je la remplisse avec la valeur de la colonne 'Moyenne_Poids' de la date précédente
    Si poids date_N = vide, alors poids = moyenne_poids de date_N-1.

    de même, si j'ai par exemple date N-1 et date N-2 de vide, je veux qu'il puisse aller chercher directement à la dernière date qui a une valeur de Moyenne_Poids.




    - Problème 2:
    J'ai une table avec les intitulés suivants:
    Id
    Date
    Poids

    J'ai une ligne par Id et par Date avec le poids correspondant.
    Je souhaite lisser ma donnée de poids sur une semaine, soit pour une date_N, je souhaite faire la moyenne de la date_N-3 à la date_N+3 pour avoir une moyenne de 7 jours.
    J'essaie avec des if, mais je n'arrive pas à mes fins. peut-être faut-il une proc sql plutôt ?


    J'espère que mes demandes sont assez claires, n'hésitez pas sinon.

    Merci de votre aide !

    Bonne journée

  2. #2
    Futur Membre du Club
    Femme Profil pro
    Ingénieur R&D
    Inscrit en
    Février 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Février 2019
    Messages : 9
    Points : 8
    Points
    8
    Par défaut HELP
    Bonjour,

    Est-ce que quelqu'un pourrait m'aider avec le message ci-dessous svp ?
    Ca devient assez urgent et je suis toujours bloquée.

    Merci par avance

    Bonne journée

  3. #3
    Membre éprouvé
    Avatar de m.brahim
    Homme Profil pro
    SAS / BIG DATA
    Inscrit en
    Juillet 2011
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : SAS / BIG DATA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 461
    Points : 1 119
    Points
    1 119
    Billets dans le blog
    14
    Par défaut
    Bonjour,
    Pourrais-tu, stp, nous envoyer un échantillon de la table que tu as et les résultats attendus?
    Merci
    Cordialement
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia....avance?uid=162

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Ingénieur R&D
    Inscrit en
    Février 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Février 2019
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Nom : BDD.jpg
Affichages : 239
Taille : 225,7 Ko

    Ci-dessus une extraction de ma table.
    La colonne Fiche présente l'Id de mes individus.
    La colonne BW présente un poids à une date donnée.
    La colonne BW_Mean représente la moyenne des poids pour une même journée pour un Id.
    Il peut y avoir plusieurs ligne de poids pour une même date et un même Id.
    Par exemple, pour l'Id 59, le 29/11/2018, il n'y a rien dans la ligne BW.
    Je souhaiterais remplir cette case vide, avec la moyenne de poids de la veille (BW_Mean, Id 59, date du 28/11/2018), soit avec la valeur 41.05.

    Et si jamais la date du 28/11 était également vide, qu'il comprenne qu'il doit remonter à la date du 27/11 par exemple et remplir les 2 dates vides avec le BW_Mean de l'Id concerné du 27/11.

    --> je ne sais pas si la demande est claire pour ce 1er problème ?




    pour le 2ème point :

    Nom : BDD2.jpg
Affichages : 227
Taille : 169,1 Ko


    Ci-dessus ma table. J'ai 1 ligne par Id et par date avec un poids dans la colonne BW_Mean.
    Je souhaite faire une moyenne lissée sur 7 jours.
    Soit par exemple pour la date du 24/11/2018, Id 59 --> je souhaite avoir une moyenne des poids compris entre le 21/11/2018 et le 27/11/2018.
    Et je souhaite faire ça pour chaque ligne de date.
    A la fin, je dois obtenir la même table de sortie, mais avec des valeurs différentes de BW_Mean : dan la table actuelle Id 59 , le 24/11 il y a 38.7 --> avec la moyenne des 7 jours il y aura 37.98 (environ).
    Je souhaite faire ça pour toutes les dates. peut-être que pour els 3 premières dates ca va poser problème dans le sens où je ne pourrais pas faire sur 7 jours ?


    N'hésitez-pas si ce n'est toujours pas très clair.

    Merci de votre retour

    Bonne journée

  5. #5
    Membre éprouvé
    Homme Profil pro
    Statisticien/développeur BI
    Inscrit en
    Janvier 2012
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Statisticien/développeur BI
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2012
    Messages : 326
    Points : 1 142
    Points
    1 142
    Par défaut
    Bonjour,

    pour le premier problème, je te propose une solution en étape data :
    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
    data test1;
    input fiche :8. BW :8. date :ddmmyy. bw_mean :8.;
    format date ddmmyy8.;
    cards;
    59 41.2 25/11/2018 41.35
    59 42.7 26/11/2018 43.475
    59 41.5 28/11/2018 41.05
    59 40.6 28/11/2018 41.05
    59 . 29/11/2018 .
    59 . 30/11/2018 .
    59 42 01/12/18 42
    63 . 20/11/2018 .
    63 29.7 21/11/2018 29.7
    63 . 22/11/2018 .
    ;
    run;
     
    proc sort data=test1;
    by fiche date bw;
    run;
     
    data test1 (drop=temp);
    set test1;
    by fiche;
    retain temp;
    if not first.fiche and bw = . then bw = temp;
    else temp = bw_mean;
    run;
    et pour le second en sql :
    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
     
    data test2;
    input fiche :8. date :ddmmyy. bw_mean :8.;
    format date ddmmyy8.;
    cards;
    58 20/11/2018 35.65
    58 21/11/2018 36.025
    58 22/11/2018 37.3875
    58 23/11/2018 39.6
    58 24/11/2018 38.7
    58 25/11/2018 38.5
    58 26/11/2018 38.7
    58 27/11/2018 39.4
    58 28/11/2018 40.7
    58 29/11/2018 41.65
    58 30/11/2018 42.46666
    58 01/12/2018 40.2857
    58 02/12/2018 37.6
    ;
    run;
     
     
    proc sql;
    	create table test22 as select distinct
    		t1.fiche,
    		t1.date,
    		t1.bw_mean,
    		mean(t2.bw_mean) as bw_mean_glissant
    	from test2 t1
    		left join test2 t2 
    			on (t1.fiche = t2.fiche and t2.date between t1.date-3 and t1.date+3)
    	group by 1,2,3;
    quit;
    Pour ce problème, si il y a moins de 7 jours présents dans la table source pour une période donnée, on fera la moyenne sur le nombre de jours présents.

    Bon courage

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Ingénieur R&D
    Inscrit en
    Février 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Février 2019
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Merci beaucoup !
    C'est exactement ce qu'il me fallait !

    Encore merci
    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 17
    Dernier message: 10/03/2017, 15h21
  2. Transformer tableau + dupliquer les lignes en fonction des dates
    Par jbachet dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 21/07/2016, 14h08
  3. [2012] Extrait les données en sautant des dates
    Par Knight.Solidary dans le forum SSIS
    Réponses: 1
    Dernier message: 24/12/2013, 17h10
  4. [AC-2007] Récupérer des données en fonction de date la plus récente
    Par m6riil dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 22/04/2013, 20h42
  5. [XSL] Trier les données en fonctions des parametres?
    Par titoff85 dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 11/08/2007, 08h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo