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 :

opération elementaire en sas


Sujet :

SAS Base

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2009
    Messages : 67
    Points : 43
    Points
    43
    Par défaut opération elementaire en sas
    bonjour,
    je dois trouver un chiffre à partir de mes données, le chiffre est calculé par la façon suivante:
    tipv=( MINCOFPF+ MINCOFAL+ MINCOFNH+ MINCORMI+ MINCORMA+ MINCOAAH+ MINCOAPI+ MINCOMAE+ MINCOAIE+ MINCOPRE+ MINCODOM)
    /( MPFVPF+ MPFVFNAL+ MPFVFNH+ MPFVRMI+ MPFVRMA+ MPFVAAH+ MPFVAPI+ MPFVMAEH+ MPFVAIE+ MPFVPRE+ MPFVDOM)*100;

    mais il y a une autre variable qui s'appelle ges qui a les deux modalités T et F,
    quand ges="F" il faur prendre les valeurs des variables suivantes:
    MPFVPF+MPFVAAH+ MPFVAPI+ MPFVMAEH

    et pour les autre c'est quand ges="T"

    j'ai procédé comme suivant:
    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
    data tauxpv; set tauxpv;
    if ges="T" then do;
    mincotot=MINCOFPF+ MINCOFAL+ MINCOFNH+ MINCORMI+ MINCORMA+ 
    MINCOAAH+ MINCOAPI+ MINCOMAE+ MINCOAIE+ MINCOPRE+ MINCODOM;
    dun=MPFVFNAL+ MPFVFNH+ MPFVRMI+ MPFVRMA+ MPFVAIE+ 
    MPFVPRE+ MPFVDOM;
    ddeux=0;
    end;
    else do;
    ddeux=MPFVPF+MPFVAAH+ MPFVAPI+ MPFVMAEH;
    end;
    tipv=mincotot/(dun+ddeux)*100;
    run;
    proc sql;
    select mincotot,dun,ddeux,tipv
    from tauxpv;
    quit;
    et le résultat est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     The SAS System        09:55 Monday, June 8, 2009  54
     
                             mincotot       dun     ddeux      tipv
                             --------------------------------------
                                    0         0  5.7221E8         0
                             24929966  2.4518E8         0  10.16799
    et je dois avoir 3.0499 comme réponse

  2. #2
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 89
    Points : 73
    Points
    73
    Par défaut
    suggestion :
    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
    data tauxpv; 
       set tauxpv;
     
       mincotot = MINCOFPF+ MINCOFAL+ MINCOFNH+ MINCORMI+ MINCORMA+ 
                     MINCOAAH+ MINCOAPI+ MINCOMAE+ MINCOAIE+ MINCOPRE+
                     MINCODOM;
       dun =  MPFVFNAL+ MPFVFNH+ MPFVRMI+ MPFVRMA+ MPFVAIE+ 
                 MPFVPRE+ MPFVDOM;
     
       if ges="T" then do;
          ddeux=0;
       end;
       else do;
          ddeux=MPFVPF+MPFVAAH+ MPFVAPI+ MPFVMAEH;
       end;
     
       tipv=mincotot/(dun+ddeux)*100;
    run;
     
    proc sql;
    select mincotot,dun,ddeux,tipv
    from tauxpv;
    quit;

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 249
    Points : 290
    Points
    290
    Par défaut
    Bonjour,

    Réduire le code permet souvent de mieux voir l'algorythme...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    data resultat (keep = mincotot dun ddeux tipv) ; 
       set tauxpv ; 
       mincotot = sum(of MINCO:) ;
       dun =  (ges = 'T') * sum(MPFVFNAL, MPFVFNH, MPFVRMI, MPFVRMA, MPFVAIE, MPFVPRE, MPFVDOM) ;
       ddeux = (ges = 'F') * sum(MPFVPF, MPFVAAH, MPFVAPI, MPFVMAEH) ; 
       tipv = mincotot / (dun + ddeux) * 100 ;
    run ;
    proc print noobs label ; run ;
    Bon courage !

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2009
    Messages : 67
    Points : 43
    Points
    43
    Par défaut ca marche pas
    merci à tous les deux,
    mais j'ai toujours les mêmes résultats:
    The SAS System 10:08 Tuesday, June 9, 2009 5

    Obs mincotot dun ddeux tipv

    1 0.00 0.00 572214654.82 0.0000
    2 24929965.94 245180936.19 0.00 10.1680

    il me reste seulement de faire l'opération suivante:
    mincotot/(dun+ddeux)*100;
    24929965.94/(245180936.19+572214654.82)*100
    et j'arrive pas à écrire le bon code (j'ai les bons chiffres il me manque que ca)
    pour obtenir mon resultat: 3.0499

  5. #5
    Membre actif

    Profil pro
    Inscrit en
    Avril 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 233
    Points : 254
    Points
    254
    Par défaut
    Je ne vois pas d'où tu sors 572214654.82. Dans ton exemple ddeux = 0 (c'est d'ailleurs toi qui l'a mis à zéro dans ton programme).
    ddeux = 572214654.82 dans la ligne précédente - est-ce que c'est cela que tu veux faire ? Prendre des données des deux lignes consécutives et faire des calculs ?

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2009
    Messages : 67
    Points : 43
    Points
    43
    Par défaut oui
    oui c'est ça que je veux faire, j'ai mal exprimé peut-être avant.

    je veux la valeure de ddeux de la première ligne (ges="F")
    et les deux valeures de la 2eme ligne (ges="T")

    et après faire l'opération

    merci

  7. #7
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 89
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par ghatfan99 Voir le message
    Obs mincotot dun ddeux tipv

    1 0.00 0.00 572214654.82 0.0000
    2 24929965.94 245180936.19 0.00 10.1680

    Est-ce que tes données pour le calcul se trouve sur 2 observations ou sur la même?

    Si tes données sont sur 2 observations , "retain" pourrait t'être utile pour retenir un résultat d'un enregistrement à l'autre.

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2009
    Messages : 67
    Points : 43
    Points
    43
    Par défaut mymi
    merci
    tu peux m'expliquer comment je peux garder la valeur de ddeux de la premire ligne de resultat pour la utiliser apres avec les données de deuxieme ligne

  9. #9
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 89
    Points : 73
    Points
    73
    Par défaut
    Pour retenir une valeur d'une observation à l'autre, tu "déclares" une variable avec retain devant (tu peux aussi l'initialisé à une certaine valeur pour la première observation).

    Dans l'exemple ci-dessous, je change la valeur de "maValeur" seulement si _N_ est pair. Donc lorsque _N_ est pair maValeur = Var, si _N_ est impair maValeur contient la valeur de Var dans l'observation précédente.

    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
    DATA test ;
       input var ;
       cards ;
    1
    2
    3
    4
    5
    ;
    run ;
     
     
    data _NULL_;
       set test;	
       RETAIN maValeur 0;
       IF mod(_N_,2) = 0 then maValeur = var;
       put maValeur var;
    run ;

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 153
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par ghatfan99 Voir le message
    merci à tous les deux,
    mais j'ai toujours les mêmes résultats:
    The SAS System 10:08 Tuesday, June 9, 2009 5

    Obs mincotot dun ddeux tipv

    1 0.00 0.00 572214654.82 0.0000
    2 24929965.94 245180936.19 0.00 10.1680

    il me reste seulement de faire l'opération suivante:
    mincotot/(dun+ddeux)*100;
    24929965.94/(245180936.19+572214654.82)*100
    et j'arrive pas à écrire le bon code (j'ai les bons chiffres il me manque que ca)
    pour obtenir mon resultat: 3.0499
    SI TU PEUX NOUS DIRE AVEC UN PEU PLUS DE PRECISION, UN PETIT EXEMPLE DE TES DONNEE ... JE PENSE QU'ON POURRA MIEUX T'AIDER..

    BON COURRAGE

  11. #11
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2009
    Messages : 67
    Points : 43
    Points
    43
    Par défaut données
    bonjour,
    je dois trouver la valeur d'un indicateur, cet indicateur est constitué de 22 variables, 11 en nominateur et 11 en dominateur. ces 22 variables ont des valeurs, mais qui décide ces valerus c'est une autre variable dans la table(variable: GES) et elle a deux modalités "F" et "T", le nominateur et 7 variables de dominateur prennent leurs valeurs quand ges="T", les 4 qui restes quand ges="F", après il faut juste faire le fraction multiplié par 100.
    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
     
    rsubmit;
    DATA resultat (keep = mincotot dun ddeux tipv) ; 
       SET tauxpv ; 
       mincotot =(ges='T') *sum(MINCOFPF, MINCOFAL, MINCOFNH, MINCORMI, MINCORMA, 
    MINCOAAH, MINCOAPI, MINCOMAE, MINCOAIE, MINCOPRE, MINCODOM) ;
       dun =  (ges = 'T')  *sum(MPFVFNAL, MPFVFNH, MPFVRMI, MPFVRMA, MPFVAIE, MPFVPRE, MPFVDOM) ;
       ddeux = (ges = 'F')  *sum(MPFVPF, MPFVAAH, MPFVAPI, MPFVMAEH) ; 
    tipv = mincotot / (dun + ddeux) * 100 ;
    run ;
    endrsubmit;
     
    rsubmit;
    proc print data=resultat;
    run ;
    endrsubmit;
    et le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        The SAS System       10:08 Tuesday, June 9, 2009  16
     
                  Obs       mincotot             dun           ddeux      tipv
     
                   1            0.00            0.00    572214654.82     0.0000
                   2     24929965.94    245180936.19            0.00    10.1680
    pourtant dans le calcul de fraction j'ai besoin de la valeur de ddeux de la première ligne: 572214654.82
    et mon problème est que j'arrive pas à la faire entre dans le formule de calcul:
    tipv = mincotot / (dun + ddeux) * 100 ;
    j'espere que je suis claire, j'ai besoin de cette valeur pour demain pour la présenter à mon responsable de stage.
    merci d'avance
    Images attachées Images attachées  

  12. #12
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 89
    Points : 73
    Points
    73
    Par défaut
    Est-ce que Gestion est ta variable "ges"?

    est-ce que t'as toujours une ligne avec ges = "F" et ensuite une ligne avec ges= "T"?

  13. #13
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2009
    Messages : 67
    Points : 43
    Points
    43
    Par défaut oui
    oui, c'est gestion ma variable (ges), et j'ai deux ligne seulement, je les ai obtenu à partir de la table d'origine:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    rsubmit;
    proc sql;
    create table tauxpv
    as select * 
    from bgescaf.gsbug381
    where (ges="T" or ges="F") and (ddrefenr >= "01jan2008"d and dfrefenr <= "31dec2008"d) ; 
    quit;
    endrsubmit;
    j'obtine 2 lignes et 98 colonnes.

  14. #14
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 89
    Points : 73
    Points
    73
    Par défaut
    essaie ça (c'est n'est pas ce qu'il y a de plus "clean" mais ça devrait marcher).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    DATA resultat (keep = mincotot dun ddeux tipv) ; 
       SET tauxpv ; 
       retain valDdeux;
       mincotot =(ges='T') *sum(MINCOFPF, MINCOFAL, MINCOFNH, MINCORMI, MINCORMA, 
    MINCOAAH, MINCOAPI, MINCOMAE, MINCOAIE, MINCOPRE, MINCODOM) ;
       dun =  (ges = 'T')  *sum(MPFVFNAL, MPFVFNH, MPFVRMI, MPFVRMA, MPFVAIE, MPFVPRE, MPFVDOM) ;
       ddeux = (ges = 'F')  *sum(MPFVPF, MPFVAAH, MPFVAPI, MPFVMAEH) ; 
       if _N_ = 1 then valDdeux = ddeux;
       else do;
           tipv = mincotot / (dun + valddeux) * 100 ;
           output;
       end;
    run ;

  15. #15
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2009
    Messages : 67
    Points : 43
    Points
    43
    Par défaut ca marche
    merci beaucoup pour ton aide.
    cordialement
    GR

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

Discussions similaires

  1. [jsp]Date et opérations
    Par o151181 dans le forum Servlets/JSP
    Réponses: 17
    Dernier message: 09/04/2004, 16h41
  2. [Builder] Effectuer une opération quand une resource a changé
    Par Satch dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 08/04/2004, 13h22
  3. opérations sur les bits d'un byte
    Par petitours dans le forum C++Builder
    Réponses: 4
    Dernier message: 10/02/2004, 20h42
  4. opérations sur les dates
    Par coucoucmoi dans le forum Débuter
    Réponses: 2
    Dernier message: 12/08/2003, 11h45
  5. opération en XSL
    Par rastapopulos dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 12/03/2003, 22h39

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