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 :

Variable compteur avec condition


Sujet :

SAS Base

  1. #1
    Membre à l'essai
    Variable compteur avec condition
    Bonjour à tous;

    Je souhaite calculer le pourcentage de portées multiples cumulé (par brebis et par parité) selon la formule suivante:

    pourcentage de portées multiples= (nombre de portées multiples/portées totales)x 100.

    Ma base de données est la suivante:


    [TH]Parité[/TH]
    [TH]Brebis[/TH]
    [TH]Portée[/TH]
    1 AB11 1
    2 AB11 2
    3 AB11 1
    1 AB12 2
    2 AB12 1
    3 AB12 3
    4 AB12 1

    Quelqu'un aurait une idée?
    D'avance merci.

  2. #2
    Membre éprouvé
    Bonjour,
    Je te propose cette solution:
    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
     
    data test;
    input 
    Parite Brebis $ Portee;
    cards;
    1 AB11 1
    2 AB11 2
    3 AB11 1
    1 AB12 2
    2 AB12 1
    3 AB12 3
    4 AB12 1
    ; run;
     
     
    proc sql;
    create table test1 as select t.brebis, sum(portee/t1.tot) as p_mul format=percent8.2
    from test as t,
    (select 
    sum(portee) as tot from test) as t1
    group by brebis
    ; quit;


    Cordialement
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia.fr/certifications/session-decembre-2015-niveau-avance?uid=162

  3. #3
    Membre à l'essai
    Rebonjour,

    Merci pour votre réponse. J'ai essayé votre code, mais ça m'a donné une seule valeur par brebis. Or je dois avoir une valeur par parité (pour chaque parité un pourcentage). J'ai rajouté group by brebis, parite mais je ça ne me donne pas les bonnes valeurs.

  4. #4
    Membre éprouvé
    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
     
    data test;
    input 
    Parite Brebis $ Portee;
    cards;
    1 AB11 1
    2 AB11 2
    3 AB11 1
    1 AB12 2
    2 AB12 1
    3 AB12 3
    4 AB12 1
    ; run;
     
     
    proc sql;
    create table test1 as select t.Parite, t.brebis, sum(portee/t1.tot) as p_mul format=percent8.2
    from test as t,
    (select 
    sum(portee) as tot from test) as t1
    group by parite
    ; quit;
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia.fr/certifications/session-decembre-2015-niveau-avance?uid=162

  5. #5
    Membre éprouvé
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    proc sql;
    create table test1 as select t.Parite, t.brebis, sum(portee/t1.tot) as p_mul format=percent8.2
    from test as t,
    (select 
    sum(portee) as tot from test) as t1
    group by t.parite, t.brebis
    ; quit;
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia.fr/certifications/session-decembre-2015-niveau-avance?uid=162

  6. #6
    Membre à l'essai
    Merci beaucoup pour votre effort. ça ne me donne toujours pas les bonnes valeurs. La logique est la suivante (quand on calcule à main):


    Pour la première observation: %= 0/1 *100, 0 car la portée=1 (simple) et 1 car la brebis a eu une seule parité,
    Pour la deuxième observation: %= 1/2*100, 1 car la portée=2 (multiple) et 2 car la brebis a eu deux parités.
    Pour la troisième observation: %= 0/3*100, 0 car la portée=1 (simple) et 3 car la brebis a eu trois parités.

  7. #7
    Membre éprouvé
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    data test1;
    set test;
    if portee>1 then pm=1 ; else pm= 0;
    Val_cal=pm/parite;
    format val_cal percent8.2 ;
    run;
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia.fr/certifications/session-decembre-2015-niveau-avance?uid=162

  8. #8
    Membre à l'essai
    ça fonctionne. Je vous remercie.