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 :

Recoder sans trier


Sujet :

SAS Base

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Data Scientist Junior
    Inscrit en
    Janvier 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Data Scientist Junior

    Informations forums :
    Inscription : Janvier 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Recoder sans trier
    bonjour je me trouve devant un projet ou je trouve des dificultées. quelqu'un peut m'aider?? et merci

    Il faut recoder une variable dans une table qui est énorme. La table, qui s’appelle Table, est par exemple comme suit.
    Id x y Code
    2351 12,34 76,50 AZ
    8963 32,12 16,20 AF
    Il faut cependant imaginer que cette table contient des millions d’observations. La variable Code doit être recodée. Les nouveaux codes sont enregistrés dans la table Sas
    TableRecodage :

    Code Nouveau
    AZ BJ
    AF QR
    . . .

    Il faudrait trier les deux tables en fonction de la variable Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    PROC sort DATA = Table OUT = TableT ;
    BY Code ;
    RUN ;
    PROC sort DATA = TableRecodage OUT = TableRecodageT ;
    BY Code ;
    RUN ;
    Puis ensuite utiliser une instruction MERGE dans une étape
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DATA :
    DATA NouvelleTable ;
    MERGE TableT TableRecodageT ;
    BY Code ;
    Code = Nouveau ;
    DROP Nouveau ;
    RUN ;
    Il vous faut trouver une solution qui évite le tri de la table Table.
    Vous pouvez dans un premier temps constituer deux tables Sas, la première avec
    les anciennes valeurs de la variable à recoder, la seconde avec les nouvelles valeurs :

    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 AnciennesValeurs NouvellesValeurs ;
    LENGTH Id $ 9 ;
    SET TableRecodage ;
    Id = "Ancien" || LEFT(_N_) ;
    Valeur = Code ;
    OUTPUT AnciennesValeurs ;
    Id = "Nouveau" || LEFT(_N_) ;
    Valeur = Nouveau ;
    OUTPUT NouvellesValeurs ;
    KEEP Id Valeur ;
    RUN ;
    PROC transpose DATA = AnciennesValeurs OUT = AnciennesValeursTransp ;
    VAR Valeur ;
    ID Id ;
    RUN ;
    PROC transpose DATA = NouvellesValeurs OUT = NouvellesValeursTransp ;
    VAR Valeur ;
    ID Id ;
    RUN ;
    Ensuite, le début de l’étape DATA pour recoder serait comme suit (en supposant
    que la table de recodage comporte 45 observations) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DATA NouvelleTable ;
    IF _N_ EQ 1 THEN DO ;
    SET AnciennesValeursTransp ;
    ARRAY AnciennesValeurs Ancien1 - Ancien45 ;
    SET NouvellesValeursTransp ;
    ARRAY NouvellesValeurs Nouveau1 - Nouveau45 ;
    END ;
    SET Table ;
    ...
    RUN ;
    Enfin, il vous reste à programmer une recherche dans le vecteur AnciennesValeurs
    pour trouver la valeur de la variable Code afin de la remplacer par sa nouvelle valeur.
    Une autre solution repose sur l’utilisation de la PROC format en utilisant un format dynamique.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 133
    Points : 371
    Points
    371
    Par défaut
    bonsoir

    le plus simple serait effectivement de créer un format en modifiant la table tablerecodage de façon à en faire une table CNTLIN pour un PROC FORMAT, puis, si l'ancien codage ne doit pas être conservé (et uniquement dans ce cas), de passer par un DATA / MODIFY et d'indiquer CODE=put(CODE,format_créé). (pas de création de nouvelles variables possible avec un DATA / MODIFY...)

    Maintenant, un DATA / MODIFY, ça porte forcément sur une même et unique table... il faut être sûr de son coup parce qu'on a vite fait de faire n'importe quoi (et sans aucune possibilité de revenir en arrière en cas de problème...)

    C'est donc "dangereux" mais ça me semble être le plus rapide...

    Sébastien Ringuedé

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Data Scientist Junior
    Inscrit en
    Janvier 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Data Scientist Junior

    Informations forums :
    Inscription : Janvier 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    merci , mais est ce que je fais un proc fromat avec une modify en même temps ? j'aimerai bien que vous m'eclaircir la démarche
    merci beaucoup

Discussions similaires

  1. texture transparente sans trier les polygones ?
    Par RedSkidy dans le forum OpenGL
    Réponses: 10
    Dernier message: 24/06/2015, 23h55
  2. Réponses: 4
    Dernier message: 09/05/2013, 00h14
  3. dessiner avec tchart sans trier
    Par jeffray03 dans le forum Composants VCL
    Réponses: 15
    Dernier message: 08/09/2010, 14h00
  4. Trier des objets sans Comparable
    Par Shabata dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 13/03/2006, 13h55
  5. Réponses: 3
    Dernier message: 14/11/2005, 11h08

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