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 :

Attribution de valeurs


Sujet :

SAS Base

  1. #1
    Membre à l'essai
    Homme Profil pro
    phD en génétique animale
    Inscrit en
    Juillet 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : phD en génétique animale
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2015
    Messages : 11
    Points : 11
    Points
    11
    Par défaut Attribution de valeurs
    Bonjours,
    j'ai une base de la forme:

    id n_ac dc_1 var1 var2 var3 dc_2 var1 var2 var3 dc_4 var1 var2 var3;
    HJ001 1 23/12/2013 12 0.3 0.2 25/01/2014 15 0.3 0.3 03/03/2014 14 0.4 0.3
    HJ001 2 05/03/2015 17 . . 17/04/2015 16 0.4 . 28/05/2015 . . .
    HJ002 1 13/08/2013 13 0.2 0.1 22/09/2013 13 0.4 0.4 17/10/2013 . 0.1 0.2
    HJoo2 2 12/08/2014 15 . . 30/09/2014 14 . . 02/11/2014 14 0.2 .
    HJ002 3 02/02/2015 12 0.4 . 14/04/2015 10 0.1 0.1 . . . .
    etc ...
    id=identifiant
    n_ac=numéro de l'activité
    dc_n=des dates de contrôles
    var1 var2 et var3: des mesures

    comment j'écrit un programme SAS (ou macro) qui permet à chaque individu (id) de remplacer les valeurs manquantes de var2 et var3 lors de l'activité n par les valeurs de var2 et var3 (s'ils existent) de l'activité précédente n-1 à condition qu'il existe une date de contrôle (dc_n) et une valeur var1.

    (en réalité j'ai +ke 31 000 identifiants différents, les n_ac varient de 1 à 7 et le nombre de contrôle est 12 mais chaque individu à un nombre de contrôle (nombre des dates de contrôles) et un nombre d'activité variables)

    c'est très intéressant pour moi, je compte sur votre aide. merci

  2. #2
    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,

    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
    23
    24
    25
    26
    27
    28
    29
    30
     
    data test;
    format dc_1 dc_2 dc_3  date9.;
    input id $ n_ac dc_1 date9. var11 var12 var13 dc_2 date9. var21 var22 var23 dc_3 date9. var31 var32 var33;
    cards;
    HJ001 1 23dec2013 12 . 15 17APR2015	16	0.4	. 28MAY2015	. . .
    HJ002 2 12SEP2014 15 . . 30SEP2014	14 . . 02NOV2014 14	0.2	.
    ;run;
     
    data test1 (drop=i);
    set test;
    array var1(*) var1:;
    array var2(*) var2:;
    array var3(*) var3:;
    do i =1 to dim(var1)-1;
    if dc_1 ne .  and var1(1) ne . then do ;
    if var1(i+1)=. then var1(i+1)=var1(i);
    end;
    end;
    do i =1 to dim(var2)-1;
    if dc_2 ne .  and var2(1) ne . then do ;
    if var2(i+1)=. then var2(i+1)=var2(i);
    end;
    end;
    do i =1 to dim(var3)-1;
    if dc_3 ne .  and var3(1) ne . then do ;
    if var3(i+1)=. then var3(i+1)=var3(i);
    end;
    end;
    run;
    Cordialement
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia....avance?uid=162

  3. #3
    Membre à l'essai
    Homme Profil pro
    phD en génétique animale
    Inscrit en
    Juillet 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : phD en génétique animale
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2015
    Messages : 11
    Points : 11
    Points
    11
    Par défaut attribution de valeurs
    Merci M. barahim pour votre intérêt à ma question!

    la solution que vous m'avez proposé ne répond pas à mes attentes,
    en fait ce que je vous avoir c'est juste de remplacer les valeurs manquantes de var2 et var3, pour un individu donné (id)) lors d'une activité (n_ac) par les mêmes valeurs var2 et var3 de l'activité précédente (s'il existe) de ce même individu. (s'il n'existe pas de valeurs, ça reste une valeur manquante). la conditoin obligatoire il faut qu'il y est une date et une var1.
    par exemple:

    HJ001 1 22/05/2013 15 0.3 0.2 13/06/2013 17 0.2 0.3 18/07/2013 17 0.3 .
    HJ001 2 17/10/2014 17 . . 20/11/2014 15 . 0.4 03/01/2015 . 0.3 .

    devient:
    HJ001 1 22/05/2013 15 0.3 0.2 13/06/2013 17 0.2 0.3 18/07/2013 17 0.3 .
    HJ001 2 17/10/2014 17 0.3 0.2 20/11/2014 15 0.2 0.4 03/01/2015 . . .

    en adoptant le code proposé j'ai remarqué que tout à décaler, et certains variables ne sont plus à leurs propres colonnes.
    cordialement

  4. #4
    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
    En effet, dans le message précédent, j'ai réalisé un traitement horizontal.

    A tester de nouveau 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    data test;
    format dc_1 dc_2 dc_3  date9.;
    input id $ n_ac dc_1 date9. var11 var12 var13 dc_2 date9. var21 var22 var23 dc_3 date9. var31 var32 var33;
    cards;
    HJ001 1 22apr2013 13 1.3 0.2 13jun2013 3 0.2 0.3 18jul2013 17 0.3 7
    HJ001 2 17oct2014 4 . . 20nov2014 15 . 0.4 03jan2015 . 0.3 .
    HJ001 3 17oct2014 27 . . 20nov2014 15 . 0.4 03jan2015 4 0.3 .
    HJ002 1 22apr2013 3 0.3 0.2 13jun2013 1 4 12 18jul2013 12 65 .
    HJ002 2 17oct2014 37 . . 20nov2014 15 . 0.4 03jan2015 7 0.3 5
    HJ002 3 17oct2014 . . . 20nov2014 15 . 0.4 03jan2015 7 0.3 .
    ;run;
     
    proc sort data =test out=test1; by id n_ac;run;
     
    data test2 (drop=temp11 temp12 temp13 temp21 temp22 temp23 temp31 temp32 temp33);
    set test1;
    by id n_ac;
    temp11=lag(var11);
    temp12=lag(var12) ;
    temp13=lag(var13) ;
    temp21=lag(var21) ;
    temp22=lag(var22) ;
    temp23=lag(var23) ;
    temp31=lag(var31) ;
    temp32=lag(var32) ;
    temp33=lag(var33) ;
     
    if first.id and n_ac then do; 
    temp11=var11;
    temp12=var12;
    temp13=var13;
    temp21=var21;
    temp22=var22;
    temp23=var23;
    temp31=var31;
    temp32=var32;
    temp33=var33;
    end;
     
    if var11 ne . and dc_1 ne .  then do; 
    if var12=.  then var12=temp12 ; 
    if var13 =. then var13=temp13 ; 
    end;
    else do;
    var12=. ;
    var13=.;
    end;
     
     
    if var21 ne . and dc_2 ne .  then do; 
    if var22=.  then var22=temp22 ;
     
    if var23=. then var23=temp23 ; 
     
    end;
     
    else do;
    var22=. ;
    var23=.;
    end;
     
     
    if var31 ne . and dc_3 ne .  then do; 
    if var32=.  then var32=temp32 ;
    if var33 =.  then var33=temp33 ; 
     
    end;
     
    else do;
    var32=. ;
    var33=.;
    end;
     
    run;
    Si tu as des questions n'hésiter pas
    Cordialement
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia....avance?uid=162

  5. #5
    Membre à l'essai
    Homme Profil pro
    phD en génétique animale
    Inscrit en
    Juillet 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : phD en génétique animale
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2015
    Messages : 11
    Points : 11
    Points
    11
    Par défaut Attribution de valeurs
    super m.brahim
    ça marche cette fois-ci, avec mes remerciements les plus distinguées.

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

Discussions similaires

  1. Problème d'attribution de valeurs
    Par Spinoza23 dans le forum Débuter
    Réponses: 15
    Dernier message: 06/05/2008, 11h33
  2. Réponses: 4
    Dernier message: 31/07/2007, 21h52
  3. Envoi de formulaire avec attribution de valeur
    Par nicovoa dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/08/2006, 18h22
  4. [Débutant] Nouvelle attribution de valeur ??
    Par BBoys85 dans le forum Access
    Réponses: 9
    Dernier message: 27/06/2006, 15h03
  5. Attribution de valeur à une matrice
    Par Progs dans le forum C++
    Réponses: 13
    Dernier message: 24/09/2005, 23h43

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