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 :

"Tirer" valeur d'une cellule dans une table SAS


Sujet :

SAS Base

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 4
    Par défaut "Tirer" valeur d'une cellule dans une table SAS
    Bonjour,

    Malgré toute l'aide que j'ai pu trouver, toutes les discussions que j'ai pu trouver, s'approchant de mon problème, cela m'a permis d'avancer mais pas de résoudre celui-ci. J'espère ne pas demander quelque chose qui a déjà été résolu...

    Voilà ledit problème.
    J'ai procédé à l'import d'un tableau croisé dynamique. Voilà à quoi ressemble ma table sous SAS :

    Var1 date
    604024 01JAN2011
    . 02JAN2011
    . 03JAN2011
    922485 04JAN2011
    . 05JAN2011
    . 06JAN2011
    140535 07JAN2011
    . 08JAN2011
    . 09JAN2011

    Les points de la var1 sont des valeurs manquantes et, pour l'analyse que je souhaite faire par la suite, j'ai besoin de remplacer les valeurs manquantes entre chaque nombre par le nombre lui-même (en gros, comme "tirer" le nombre 604024 sous excel par exemple pour l'avoir jusqu'au nouveau nombre).

    Var1 date
    604024 01JAN2011
    604024 02JAN2011
    604024 03JAN2011
    922485 04JAN2011
    922485 05JAN2011
    922485 06JAN2011
    140535 07JAN2011
    140535 08JAN2011
    140535 09JAN2011

    Voilà mon code qui pour le moment ne me permet que d'obtenir des "1" à la place des nombre que je voudrais.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    data  Tab;
    set Tab;
    if var1=. then do;
    do while (var1=.);
    var1=1;
    end;
    end;
    run;
    Avant ça, j'ai tenter tout un tas de choses avec LAG ou RETAIN mais je n'ai rien obtenu de concluant.

    Merci de votre aide.

  2. #2
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Par défaut
    pourtant c'est bien RETAIN qu'il faut.
    quel était ton test avec ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 4
    Par défaut
    J'avais imaginé quelque chose comme ça, mais je n'ai que très peu utilisé la fonction RETAIN jusqu'à présent donc je ne la maîtrise pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    data  Tab;
    set Tab;
    retain var1 ;
    IF FIRST.var1 THEN var2 = var1;
    run ;
    Mon principal problème je pense est que je n'ai pas de variable d'identifiant me permettant de trier ma table pour pouvoir par exemple affecter facilement les valeurs à l'aide d'un ID et que ma variable Var1 ne peut pas être triée non plus ou je perd la structure de mon fichier ce qui ne m'arrange pas...

  4. #4
    Membre émérite

    Femme Profil pro
    SAS FRANCE - Support Clients France et Europe
    Inscrit en
    Février 2010
    Messages
    289
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : SAS FRANCE - Support Clients France et Europe
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 289
    Par défaut
    Bonjour,

    je pense qu'il faut juste créer une variable temporaire sur lequel le retain agira (dans votre code, en arrivant sur chaque ligne de la table en entrée, la variable du retain se retrouve écrasée par la valeur lue).


    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 data1 ;
    input var1 date date. ;
    cards ;
    604024 01JAN2011
    . 02JAN2011
    . 03JAN2011
    922485 04JAN2011
    . 05JAN2011
    . 06JAN2011
    140535 07JAN2011
    . 08JAN2011
    . 09JAN2011
     
    ;
    run ;
     
    data data2 (drop=_:);
    retain _save 0 ;
    set data1 ;
    if var1 ne . then _save=var1 ;
    else var1=_save ;
    run ;

    Cordialement,
    Géraldine Cade
    Support Clients SAS

  5. #5
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Par défaut
    Si tu n'as pas de groupe, je te propose cette décomposition pour que tu puisses regarder comment ca marche.

    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
    data test;
    input Var1 date date9.;
    cards;
    604024 01JAN2011
    . 02JAN2011
    . 03JAN2011
    922485 04JAN2011
    . 05JAN2011
    . 06JAN2011
    140535 07JAN2011
    . 08JAN2011
    . 09JAN2011
    ;
    run;
     
    data test2;
    set test;
    if var1 ne . then g++1;
    run;
     
    data test3;
    set test2;
    by g;
    retain var2;
    if first.g then var2=var1;
    ;
    run;

  6. #6
    Futur Membre du Club
    Inscrit en
    Août 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 4
    Par défaut
    Ah génial ! Les deux solutions fonctionnent parfaitement.
    1 jour entier à chercher et je n'avais pas trouvé...

    Merci énormément à vous deux.

    Petite question s'il vous reste un peu de temps pour y répondre : je comprends bien le code de Géraldine en revanche Datamétric comment fonctionne ce g++1 qui permet de créer cette variable d'identifiant ?

  7. #7
    Membre émérite
    Homme Profil pro
    Ingénieur Pilotage
    Inscrit en
    Avril 2009
    Messages
    405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur Pilotage
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 405
    Par défaut
    Le g++ est un compteur incrémental qui permet de "numéroter" toute ligne non nul ( en gros , il attribue un numéro à chaque valeur non nul ).

    Au départ , lors de sa création via le PDV , g = 0 , à chaque fois qu'une ligne non nulle est reconnue par sas , il rajoute 1 d'où g++ qui signifie aussi g=g+1

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

Discussions similaires

  1. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  2. [XL-2007] problème de codage en vba ("copie d'une partie d'une cellule dans une cellule vide")
    Par skipeemed dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 26/10/2010, 17h01
  3. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  4. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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