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 :

Sélection de variables finissant par le même mot


Sujet :

SAS Base

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Sélection de variables finissant par le même mot
    Bonjour à tous,

    Je suis une petite nouvelle sur le forum et j'aurai besoin de quelques conseils.

    Je cherche à sélectionner dans une étape Data toutes les variables dont le nom finit par la lettre T (par exemple) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    data toto;
       set tata;
       keep toutes_les_variables_finissants_pas_T ;
    run;
    Je sais que pour sélectionner toutes les variables commançant par T, il faut appliquer la syntaxe T:. Y-a-t-il un équivalent pour le sens inverse ?

    Merci pour votre aide.

  2. #2
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Bienvenue Maggy,
    Voici un exemple qui pourrait t'aider !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    DATA TEST;
    input NOM $;
    CARDS;
    BNFGGFG
    FFDDT
    HGGGHGHGT
    PPMLLLT
    ;
    run;
     
    DATA TEST;
    set TEST;
    IF substr(NOM,length(COMPRESS(NOM)),1)='T';
    run;

    Brice

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour; je rajoute juste sa :
    si c'est pour selectionner des variables , il faut d'abord récupérer les noms de tes variables dans une table sas et appliquer par la suite la méthode de MEGAMIND2;

    je te propose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    proc contents data=MaTable noprint out=contenu;
     
    run;
     
     
    DATA mes_variables;
    set contenu;
    IF substr(name,length(COMPRESS(name)),1)='T';
    run;[/

    Citation Envoyé par MEGAMIND2 Voir le message
    Bienvenue Maggy,
    Voici un exemple qui pourrait t'aider !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    DATA TEST;
    input NOM $;
    CARDS;
    BNFGGFG
    FFDDT
    HGGGHGHGT
    PPMLLLT
    ;
    run;
     
    DATA TEST;
    set TEST;
    IF substr(NOM,length(COMPRESS(NOM)),1)='T';
    run;

    Brice

  4. #4
    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 : 51
    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
    Points : 6 064
    Points
    6 064
    Par défaut
    Sans plus d'explications sur ton contextetu fais cela si tu veux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    proc contents data=sashelp.class out=cnt (keep=name) noprint;
    run;
     
    proc sql ;
    select distinct name into : list separated by ' '
    from cnt
    where upcase(first(reverse(trim(name))))  = 'T'
    ;
    quit;
     
    data final;
    set sashelp.class;
    keep &list;
    run;

  5. #5
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    +1 rose,

    la solution de megamind fonctionne pour les observations et non les variables. La proc contents est un palliatif. Pour ma part, pour la deuxiéme étape (l'étape data) je serais parti vers une approche en utilisant la fonction reverse.. l'important est le résultat.

    pour en revenir au problème initial, stocker la liste de variable à l'issu de l'étape data (une proc sql par exemple...) permettra de retourner au jeu de données initial et d'y appliquer le filtre approprié

  6. #6
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Citation Envoyé par Manoutz Voir le message
    +1 rose,

    la solution de megamind fonctionne pour les observations et non les variables. La proc contents est un palliatif. Pour ma part, pour la deuxiéme étape (l'étape data) je serais parti vers une approche en utilisant la fonction reverse.. l'important est le résultat.

    pour en revenir au problème initial, stocker la liste de variable à l'issu de l'étape data (une proc sql par exemple...) permettra de retourner au jeu de données initial et d'y appliquer le filtre approprié

    Tu as raison Manoutz, Voici ce que je te propose. Et merci Julie!


    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
    DATA TEST;
    INPUT NOMT $ PRENOMT $ AGE $;
    CARDS;
    BNFGG BRE 20
    FFDDT BTF 30
    HGGGH HUJ 21
    PPMLT LIK 06
    ;
    run;
     
    PROC CONTENTS DATA=TEST OUT=_NOM;
    RUN;
     
    PROC SORT DATA=_NOM;
    	BY VARNUM;
    RUN;
     
    DATA _NOM;
    	SET _NOM;
    	IF substr(NAME,length(COMPRESS(NAME)),1)='T';
    RUN;
     
    PROC SQL;
    	SELECT NAME INTO: L_KEEP SEPARATED BY ' ' FROM _NOM;
     
    QUIT;
     
    	DATA TEST;
    		SET TEST;
    		KEEP &L_KEEP.;
    	RUN;
    Brice

  7. #7
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Merci à tous !

    J'y avais pensé de passer par la Proc contents.
    Mais, j'espérais qu'il y avait une petite astuce plus rapide, du style (pour récupérer toutes les variables commançant par T):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    data toto;
    set tata;
    keep T: ;
    run;
    J'avais essayé la solution (pour récupérer toutes les variables finissant par T) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    data toto;
    set tata;
    keep :T;
    run;
    mais cela aurait trop facile !

  8. #8
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Donc le problème est résolu Maggy?

    Brice

  9. #9
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Si personne ne connait l'astuce (je ne suis même pas sûre qu'elle existe), je vais rester sur la méthode avec la proc contents.

    Merci à tous

  10. #10
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Si jamais tu trouves une solution sans la passer par la proc contents, tu nous diras !

  11. #11
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 13
    Points : 8
    Points
    8
    Par défaut

  12. #12
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Bonjour Maggy.
    A moins d'une fonctionnalité non documentée, SAS ne propose que les raccourcis suivants pour énumérer des variables.
    Ca inclut effectivement les variables "dont le nom commence par" mais c'est tout ; pas "se termine par".
    La proc Contents et un peu de SQL pour faire une macro-variable est donc une excellente solution.
    Olivier

  13. #13
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Merci pour la doc

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par MEGAMIND2 Voir le message
    Si jamais tu trouves une solution sans la passer par la proc contents, tu nous diras !
    à adapter
    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
     
     %macro mac;
     
    %let dsid=%sysfunc(open(Sashelp.class,i));
    %let varlist=;
    %do i=1 %to %sysfunc(attrn(&dsid,nvars));
    /* ici on récupère les variables dont le type est caracère , N pour numérique*/
     
      %if (%sysfunc(vartype(&dsid,&i)) = C) %then
         %let varlist=&varlist %sysfunc(varname(&dsid,&i));
     
     
    %end;   %put variable caractère ***** &varlist.;
    %let rc=%sysfunc(close(&dsid));
    %mend;
     
    %mac;
    Dernière modification par Invité ; 28/01/2011 à 15h40.

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

Discussions similaires

  1. Somme des champs commencant par le même mot
    Par kemsy dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 29/10/2008, 18h47
  2. Remplacer un mot par lui-même ?
    Par tintin72 dans le forum Word
    Réponses: 10
    Dernier message: 14/10/2008, 14h36
  3. [RegEx] regex et mots commençant ou finissant par une entité html
    Par Ludo_17 dans le forum Langage
    Réponses: 1
    Dernier message: 04/06/2008, 13h47
  4. Sélection nom de module par une variable
    Par MarneusCalgarXP dans le forum Langage
    Réponses: 9
    Dernier message: 12/07/2007, 14h05
  5. [RegExp] Les mots finissant par un !
    Par Alexandre T dans le forum Langage
    Réponses: 1
    Dernier message: 08/02/2006, 18h41

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