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 :

Recuperer les champs de ta table dans une macro variable [DATA]


Sujet :

SAS Base

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 376
    Points : 199
    Points
    199
    Par défaut Recuperer les champs de ta table dans une macro variable
    Bonjour,

    Je souhaiterai récupérer les données d'une ligne entière d'une table dans une macro variable.

    J'effectue un parcours de toute la table pour laquelle je ne connais pas son nombre de champs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    PROC SQL noprint;
    	SELECT COUNT(*) INTO : nb_lignes FROM table;
    QUIT;
    %DO ligne = 1 %TO %SYSFUNC(trim(&nb_lignes.)) ;
    	DATA _NULL_ ;
    		SET table (obs = &ligne.);
    		call symputx ("donnees_ligne", _all_);
    	RUN;
    	%PUT &donnees_ligne; /*DataChamp1   DataChamp2   DataChamp3...*/
    %END;
    Je n'arrive pas à récupérer toutes les données d'une ligne en une seule fois dans une macro-variable sans spécifier le nom des colonnes.

    Comment puis-je faire ?

    Merci

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 53
    Points : 44
    Points
    44
    Par défaut
    ya moyen de recuperer les champs de ta table a partir de la proc contents en faisant un call symput?

    est ce que ton but est de recuperer les donnes de chaque champ de ta table ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 376
    Points : 199
    Points
    199
    Par défaut
    En effet, il s'agit bien de récupérer les données de chaque champ.

    J'aimerai éviter de faire une proc contents.
    L'idéal serait d'utiliser une étape data ou que du SQL.

    Merci

  4. #4
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 56
    Points : 72
    Points
    72
    Par défaut Solution avec la proc contents
    Voici une réponse rapide en utilisant la proc contents sur les 10 premières obs de la SASHELP.PRDSALE!

    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
    /*---------------------------------------------------------------------------+
    |  Récupération des noms des variables.                                      |
    +---------------------------------------------------------------------------*/
    proc contents data=sashelp.prdsale noprint out=contents;
    run;
     
    /*---------------------------------------------------------------------------+
    |  tri pour les avoir dans l'ordre des variables.                            |
    +---------------------------------------------------------------------------*/
    proc sort data=contents;
      by varnum;
    run;
     
    /*---------------------------------------------------------------------------+
    |  Création d'1 macro-variables pour chaque variable présente dans la table. |
    +---------------------------------------------------------------------------*/
    data contents;
      set contents;
      call symput (catt("var",strip(_N_)),  name);
      call symput ("nbvar", _N_);
    run;
     
    /*---------------------------------------------------------------------------+
    |  Création de la macro-variable avec toutse les modalités.                  |
    +---------------------------------------------------------------------------*/
    %macro recup_toutes_modalites_var();
    data _null_;
      length var_globale $250.;
      set sashelp.prdsale (obs=10);
     
      /*---------------------------------------------------------------------------+
      |  Initialisation de la macro-variable avec la 1ère valeur                   |
      +---------------------------------------------------------------------------*/
      var_globale=&var1;
     
      /*---------------------------------------------------------------------------+
      |  Si plus d'une variable, concaténation des autres modalités séparées par _ |
      +---------------------------------------------------------------------------*/
      %if &nbvar >=2 %then %do;
        %do i=2 %to &nbvar.;
            var_globale=cats(var_globale, "_", &&var&i.);    
        %end; 
      %end;
      /*---------------------------------------------------------------------------+
      |  Création des macros-variables                                             |
      +---------------------------------------------------------------------------*/
      call symput (catt("var_finale",strip(_N_)), var_globale);
    run;
     
    %do i=1% to 10;
      %put >== var_finale&i= &&var_finale&i.;
    %end;
    %mend;
    %recup_toutes_modalites_var();

  5. #5
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 56
    Points : 72
    Points
    72
    Par défaut Sans la proc contents
    Voici un exemple toujours sur la même table sans la proc contents!

    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
     
    %macro recup_toutes_modalites_var2();
     
    /*---------------------------------------------------------------------------+
    |  Récupération des noms des variables, ordonnées par ordre de la table.     |
    +---------------------------------------------------------------------------*/
      proc sql noprint;
        select distinct(name) into:MESVAR separated by ","
        from dictionary.columns
        where libname="SASHELP"
        and   memname="PRDSALE"
        order by varnum;
      quit;
     
     
    /*---------------------------------------------------------------------------+
    |  Création des macros-variables contenant les modalités de toutes les var.  |
    +---------------------------------------------------------------------------*/
      data _null_;
        set sashelp.prdsale (obs=10);
        length test $250.;
        test=catx(" ", &mesvar.);
        call symput(catt("var_numero", strip(_N_)), catx("_", &mesvar.));
      run;
     
      %do i=1% to 10;
        %put >== var_numero&i= &&var_numero&i.;
      %end;
     
    %mend;
    %recup_toutes_modalites_var2();
    PS:Si la fonction STRIP ne marche pas (seulement à partir de la version 9, il me semble), remplacer par compress(_N_)

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 376
    Points : 199
    Points
    199
    Par défaut
    Parfait !

    Merci beaucoup lucaslu pour tous ces codes.

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

Discussions similaires

  1. Récupérer nom d'une table dans une macro-variable
    Par joyeux_lapin13 dans le forum Macro
    Réponses: 5
    Dernier message: 02/11/2011, 10h03
  2. Relier les champs de deux tables dans une interface graphique
    Par laurentlorient dans le forum Débuter
    Réponses: 1
    Dernier message: 26/04/2009, 22h34
  3. Réponses: 2
    Dernier message: 24/02/2009, 17h40
  4. Réponses: 2
    Dernier message: 07/08/2007, 19h48
  5. Réponses: 4
    Dernier message: 21/06/2007, 13h33

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