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

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    juin 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : juin 2019
    Messages : 12
    Points : 11
    Points
    11

    Par défaut Calcul d'une formule sur SAS

    Bonjour cher réseau.
    Je vous présente la structure de mon tableau:
    j'ai 106 variables qui sont: ID NNI CBRD Bdate Lact velage Milk5 Milk6 Milk7 ................Milk305
    mes individus sont des vaches, chaque vache est représentée dans une ligne.

    ID NNI CBRD Bdate Lact velage Milk5 Milk6 Milk7 ................ Milk305
    3305 MA3305 MO 12/06/2011 2 12/08/2016 21 15 16 ................ 22
    3306 MA3306 MO 12/06/2011 2 12/08/2016 23 16 19 ................ 20
    3307 MA3307 MO 12/06/2011 2 12/08/2016 21 25 19 ................ 29
    3308 MA3308 HO 10/05/2010 6 02/03/2019 11 16 16 ................ 21
    3309 MA3309 HO 10/05/2010 6 02/03/2019 11 15 16 ................ 18
    3310 MA3310 HO 10/05/2010 6 02/03/2019 21 25 26 ................ 19

    les variables Milkj présentent la production en lait le jour j

    Je voudrais calculer pour chaque vache la somme de la production maximale ( Milk la plus élevée) et des productions (Milk) pendant 5 jours avant et après ce max.
    en d'autre termes je dois chercher le max parmi Milk5 jusqu'au Milk305, le situer et l'additionner avec les valeurs de 5 milk avant et 5 milk après.
    J'espère que j'ai bien expliqué mon problème sachant que j'ai réussi à le résoudre avec Excel via cette formule.
    Code formule : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME(DECALER($A$1;;EQUIV(MAX($A$1:$KT$1);$A$1:$KT$1;0)-5-1;;11))
    Merci d'avance pour vos réponses.
    Cordialement.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Statisticien
    Inscrit en
    juillet 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Statisticien
    Secteur : Service public

    Informations forums :
    Inscription : juillet 2019
    Messages : 5
    Points : 21
    Points
    21

    Par défaut

    Bonjour,

    Je propose d'utiliser un array avec la fonction whichn pour retrouver l'index du maximum
    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
    data x;
    	/* valeurs pour exemple */
    	milk1=1;milk2=50;milk3=0;milk4=12;milk5=10;milk6=10;milk7=10;milk8=50;milk9=2;
     
    	array ar_milk[*] milk:;
     
    	maxi = max(of ar_milk[*]);
    	index_maxi = whichn(maxi, of ar_milk[*]);
     
    	/* somme des 5 avants, maxi et 5 après
    	On vérifie que l'index n'est pas en dehors des bornes */
    	calculs = 0;
    	do i = -5 to 5;
    		if 1 <= index_maxi+i <= dim(ar_milk) then calculs = sum(calculs,ar_milk[index_maxi+i]);
    	end;
    	drop i;
    	drop maxi;
    	drop index_maxi;
    run;
    2 questions restent cependant en suspend :
    • Que fait-t-on quand il y a moins de 5 jours avant/après le maximum ?
    • Quel jour choisir si plusieurs valent le maximum ?

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    juin 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : juin 2019
    Messages : 12
    Points : 11
    Points
    11

    Par défaut

    Bonjour merci infiniment pour votre réponse.
    Pour votre première question, en terme de lactation ,cela n'arrive pas (question de nature) d'ailleur le pic se situe invariablement entre 50 et +/-65 jours.
    Pour votre deuxième question, on prend en compte la première valeur max.
    Pour l'instruction array désolée mais je suis débutante et j'ai pas compris qu'est ce que je dois mettre dans /*les valeurs pour exemple*/, est ce que je dois écrire ces instruction pour chaque vache(ligne) et saisir les valeurs de milk1 jusqu'au milk305?

    Cordialement

  4. #4
    Membre à l'essai
    Homme Profil pro
    Statisticien
    Inscrit en
    juillet 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Statisticien
    Secteur : Service public

    Informations forums :
    Inscription : juillet 2019
    Messages : 5
    Points : 21
    Points
    21

    Par défaut

    Parfait pour les 2 questions, la réponse proposée convient donc

    Pour la ligne "les valeurs pour exemple", vous pouvez l'enlever. C'était pour tester si cela fonctionnait bien.
    L'importante commence à partir de l'instruction array : on crée un tableau (array), du nom de ar_milk, de dimension non précisée ([*]), et contenant toutes les variables dont le nom commence par milk (milk:).

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    juin 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : juin 2019
    Messages : 12
    Points : 11
    Points
    11

    Par défaut

    Citation Envoyé par Muse de Thamir Voir le message
    Parfait pour les 2 questions, la réponse proposée convient donc

    Pour la ligne "les valeurs pour exemple", vous pouvez l'enlever. C'était pour tester si cela fonctionnait bien.
    L'importante commence à partir de l'instruction array : on crée un tableau (array), du nom de ar_milk, de dimension non précisée ([*]), et contenant toutes les variables dont le nom commence par milk (milk:).
    Ce code marche parfaitement bien, je vous suis reconnaissante.
    Merci beaucoup:

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

Discussions similaires

  1. Recopier une formule sur x lignes
    Par marco361020 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 08/01/2008, 10h07
  2. Réponses: 13
    Dernier message: 16/11/2007, 10h05
  3. Réponses: 4
    Dernier message: 10/07/2007, 11h24
  4. Forcer le calcul d'une fonction sur des cellules masquées
    Par AAZRO dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/07/2007, 16h34
  5. [VBA-Excel] Calcul d'une formule avec une inconnue
    Par micwiss dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/10/2006, 16h04

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