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] Modification de valeur pour un grand nombre de variables


Sujet :

Macro

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut [Macro] Modification de valeur pour un grand nombre de variables
    Bonjour,

    j'ai une table SAS avec enormément de variables pour laquelle je souhaite modifier les 0 en 2. Je ne veux pas que cela soit uniquement un format d'affichage via la proc format mais bien la valeur qui change.

    N'y a t il pas un autre moyen que de prendre une par une les variables et faire la modif, Je pourrais utiliser une macro mais ca représente la même charge de travail.

    merci pour toutes info

  2. #2
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    je ne sais pas si l'utilisation d'un array est très rapide par rapport à une macro!!!
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 16
    Points : 22
    Points
    22
    Par défaut
    Bonsoir,

    L'array est probablement la méthode la plus rapide pour réassigner une valeur pour de nombreuses variables. Voici un petit exemple pour illustrer l'array et pour présenter une solution alternative.

    1. je crée un data set pour l'exemple.
    2. Solution 1 : je mets à jour les variables A1 et A3 via un array.
    3. Solution 2 : je crée le programme SAS de manière automatique via un DATA _NULL_ et le dictionnaire DICTIONARY. COLUMNS.


    Cordialement,

    Véronique

    ______________________________
    Véronique Bourcier
    veronique.bourcier@sasreference.fr
    www.sasreference.fr
    Blog pour se former au logiciel SAS


    1. Création du data set pour l'exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    data orig;
    z=0;
    a1=0;
    a2=0;
    a3=0;
    output;
    z=1;
    a1=1;
    a2=0;
    a3=0;
    output;
    run;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    proc print data=orig;
    run;
    2. Solution avec l'array

    2.1 Création d'un array
    : l'array est nommé SASREF. Il contient deux variables A1 et A3. La position des variables dans l'array est définie automatiquement car on utilise l'étoile. A1 a donc la position 1 et A3 la position 2.

    2.2 Appel de l'array: les variables contenus dans l'array sont appelées dans une boucle allant de 1 à 2. Ces nombres correspondent à la position des variables dans l'array. La fonction DIM demande à SAS de retrouver automatiquement la dimension de l'array. Ici, il y a deux variables. La dimension est donc 2. Pour faire référence à une variable de l'array, on site le nom de l'array et la position de la variable dans l'array.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    data orig (drop=i);
       set orig;
       array sasref {*} a1 a3;
       do i=1 to dim(sasref);
          if sasref{i}=0 then sasref{i}=2;
       end;
    run;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    proc print data=orig;
    run;
    Pensez à faire usage de la syntaxe a: si vous voulez lister toutes les variables commençant par a. Pour lister toutes les variables numeriques, on remplacera a1 a2 par _numeric_, etc.

    3. Data _NULL_

    3.1 Lister les variables à mettre à jour dans un fichier de référence

    Créer un data set REF contenant dans la variable NAME la liste de toutes les variables contenant la lettre A dans leur nom parmi les variables du data set WORK.ORIG.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    proc sql;
       create table ref as 
          select name 
          from dictionary.columns
          where upcase(libname)='WORK' and
                upcase(memname)='ORIG' and
                upcase(name) like '%A%';
    quit;
    3.2 Créer un programme SAS RENAME.SAS

    Ce programme qui est désigné par l'intermédaire du mot-clé SASREF. A la lecture de la première variable dans le fichier REF, taper les instruction DATA et SET. Pour chacune des variables listées dans le fichier REF, changer les valeurs 0 en 2. Après la lecture de la dernière variable, ajouter l'instruction RUN.

    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
    filename sasref 'C:/sasref/rename.sas';
    data _null;
       set ref end=eof;
       file sasref;
       if _N_=1 then
          do;
    	     put 'data orig;';
    		 put '   set orig;';
    	  end;
       put 'if ' name '=0 then ' name '=2;';
       if eof then
          do;
    	     put 'run;';
    	  end;
    run;
    3.3 Exécution du programme :

    Exécutez le code contenu dans le programme RENAME.SAS. Désassigner la référence SASREF pour pouvoir s'en reservir par la suite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    %include sasref;
    filename sasref clear;

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/03/2008, 11h22
  2. [MySQL] INSERT ou UPDATE pour un grand nombre d'enregistrements
    Par Phil.Antrope dans le forum Requêtes
    Réponses: 1
    Dernier message: 10/12/2007, 17h24
  3. [SQL] Optimisation pour un grand nombre d'insertions
    Par ddelec24 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 30/08/2007, 14h33
  4. Macro Solver pour un grand nombre de ligne
    Par hochimi dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/07/2007, 23h20
  5. Réponses: 7
    Dernier message: 10/05/2007, 16h24

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