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

Macro Discussion :

Macro pour lire les codes d'une base


Sujet :

Macro

  1. #1
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 94
    Points : 101
    Points
    101
    Par défaut Macro pour lire les codes d'une base
    Bonjour
    J'ai besoin de votre aide j'ai une base codée et je dois remplacer les codes par les modalités en utilisant une macro.
    par exemple
    client var1 var2 var3
    1 1/2/3 oui 1/2/5
    2 2/3 non 2/5
    3 1/5 non 1/2/4
    4 4/5 oui 5/6

    Il y a des variables qui sont codés comme var1 et var3 et d'autres qui ne le sont pas comme client et var2. chaque code présente une modalité :
    1=appartement 2=voiture ...
    Comment je peux faire s'il vous plait?

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 483
    Points : 1 552
    Points
    1 552
    Par défaut
    Bonjour,
    Je pense que tu n'as pas besoin d'une macro pour résoudre ce problème. Voici une proposition :
    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
     
    data base ;
    input client var1$ var2$ var3$ ;
    cards ;
    1 1/2/3 oui 1/2/5
    2 2/3 non 2/5
    3 1/5 non 1/2/4
    4 4/5 oui 5/6
    ; run ;	
     
    data t1 (keep=client col var) ;
    set base;
    nb1 = countc(var1, '/')+1 ;  
    nb3= countc(var3,  '/')+1 ;  
    do i = 1 to nb1 ;				
    col = compress(scan(var1, i, '/')); 
    var='var1' ;
    output;					
    end;
    col=var2;
    var='var2' ;
    output ;
    do j = 1 to nb3 ;				
    col = compress(scan(var3, j, '/')); 
    var='var3' ;
    output;					
    end;
    run;
    Cdt Ward

  3. #3
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 94
    Points : 101
    Points
    101
    Par défaut
    merci mais ce n'est pas ce que je cherche, je cherche à remplacer les codes par les modalités, exp 1/2/3 devient appartement/voiture/maison

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 483
    Points : 1 552
    Points
    1 552
    Par défaut
    Bonjour,
    Il faudrait préciser ou donner un exemple de la table attendue. Essayes ce code :
    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
     
    data base ;
    input client var1$ var2$ var3$ ;
    cards ;
    1 1/2/3 oui 1/2/5
    2 2/3 non 2/5
    3 1/5 non 1/2/4
    4 4/5 oui 5/6
    ; run ;	 
     
    proc format;
      value $colfmt
      '1' = 'Appartement'
      '2' = 'Maison'
      '3' = 'Voiture'
      '4' = 'Vélo' 
      '5' = 'Moto'
      '6' = 'Magasin';
    run;
     
    data t1 (keep=client _:) ;
    set base;	 
    length _var1 $30. _var2 $10. _var3 $30. ; 
    nb1 = countc(var1, '/')+1 ;  
    nb3= countc(var3,  '/')+1 ;  
    do i = 1 to nb1 ;				
    col = compress(scan(var1, i, '/')); 
    if i =1 then _var1=put(col, $colfmt.);
    else _var1=cats(_var1, '/', put(col, $colfmt.)) ; 
    end;
    _var2=var2 ;
    do j = 1 to nb3 ;				
    col = compress(scan(var3, j, '/')); 
    if j =1 then _var3=put(col, $colfmt.);
    else _var3=cats(_var3, '/', put(col, $colfmt.)) ; 			
    end;
    run;
    Bon courage
    Ward

  5. #5
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 94
    Points : 101
    Points
    101
    Par défaut
    Je vous remercie de m'avoir répondu

  6. #6
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 94
    Points : 101
    Points
    101
    Par défaut
    Est ce que c'est possible de la mettre en macro pour traiter à chaque fois une variable ?
    J'ai essayé ce code
    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
    %macro A(var1,colfmt);
    data bas13 (drop=nb i  col _var1) ;
    length &var1 $500. ; 
    set bd;	 
    length _var1 $500. ; 
    nb = countc(&var1, '/')+1 ;    
    do i = 1 to nb ;				
    col = compress(scan(&var1, i, '/')); 
    if i =1 then _var1=put(col, $colfmt.);
    else _var1=cats(_var1, '/', put(col, $colfmt.)) ; 
    end;
    &var1=_var1;
    run;
    %mend;
    %A(Q12,colfmt);
    Mais ça m'a pas donné le résultat voulu, les modalités ne sont pas complètes et à chaque fois en ajoutant une variable ça m'efface la dernière variable traitée par exp en mettant %A(Q12,colfmt) et aprés %A(Q13,colfmt) ça m'efface q12 et m'affiche q13 avec des modalités qui ne sont pas complètes meme en agrandissant la longueur .
    exp
    Nom : Capture.JPG
Affichages : 136
Taille : 10,3 Ko

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 483
    Points : 1 552
    Points
    1 552
    Par défaut
    Bonjour,
    C'est la version corrigée de la macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    %macro A(var, fmt);
    data Tab (keep=client _&var.) ;  
    set bas13 ;
    length _&var. $50. ; 
    nb = countc(&var., '/')+1 ;
    do j = 1 to nb  ;				
    col = compress(scan(&var., j, '/')) ; 
    if j =1 then _&var.=put(col, $&fmt..);
    else _&var.=cats(_&var., '/', put(col, $&fmt..)) ; 
    end;
    run;
    %mend;		%A(Q12, colfmt);
    Ward

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

Discussions similaires

  1. [CR XI] Problème pour lire les données d'une base DB2 ZOS
    Par et13113 dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 12/03/2012, 13h23
  2. [AC-2007] Remplir un treeview pour lire les données d'une base
    Par Dready67 dans le forum IHM
    Réponses: 1
    Dernier message: 01/11/2011, 19h48
  3. Problème pour lire les donnée d'une table externe
    Par mardoch dans le forum SQL*Loader
    Réponses: 6
    Dernier message: 17/07/2008, 16h41
  4. Réponses: 3
    Dernier message: 10/08/2006, 17h43
  5. Req pour lister les vues d'une base ?
    Par nanou9999 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 05/07/2006, 08h12

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