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éléction des variables


Sujet :

SAS Base

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Février 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Egypte

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Février 2014
    Messages : 32
    Points : 23
    Points
    23
    Par défaut Séléction des variables
    Salut tout le monde
    en faite je cherche à écrire un code SAS qui me permet de tirer à partir de la table matable les nom des variables que leurs observation contiennent le symbole ">" . pour que je puisse faires des instructions pour ces variables ?

  2. #2
    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 : 46
    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.
    Avec un ARRAY et une proc SQL, comme Alers te le proposait dans un autre post traitant exactement de la même question (ou alors je n'ai pas vu la différence).
    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 work.tunistat ; /* création d'un jeu d'essai */
      INPUT var1 $ var2 $ var3 $ var4 $ var5 $ var6 $ var7 $ var8 $ var9 $ var10 $ ;
    DATALINES ;
    a < b c d < e f < g
    < h < < < i j k l m
    n o p q r s t u v w
    ;
    RUN ;
     
    DATA work.variables ;
      SET work.tunistat ;
      ARRAY mesVariables $ var1-var10 ;
      DO OVER mesVariables ; /* sur chaque élément de l'Array */
        IF INDEX(mesVariables,"<")>0 /* si cette variable contient un "<" */ 
            THEN DO ;
               nomVar = VNAME(mesVariables) ; /* on stocke le nom de la variable */
               OUTPUT ; /* on conserve en sortie */
        END ;
      END ;
    RUN ; /* au final, il y aura des doublons si plusieurs observations d'une même variable contiennent des < */
    PROC SQL NOPRINT ;
      SELECT DISTINCT nomVar /* DISTINCT = sans doublons */
                INTO : listeVar SEPARATED BY " "
      FROM work.variables
      ;
    QUIT ;
    /* affichage de la valeur de la macro-variable LISTEVAR dans la log */
    %PUT la liste est &listeVar ;
    Bon courage.
    Olivier

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Février 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Egypte

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Février 2014
    Messages : 32
    Points : 23
    Points
    23
    Par défaut
    Dans mon cas lorsque je cite la prémiere variable et la dérniere variable séparé par "-" je croise l'erreur suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ERREUR: Suffixe numérique manquant dans la liste de variables numérotées
    quel est le probléme ma table dispose de plus 100 variables les sept prémieres sont numériques le reste est alphanumérique j'ai mais la prémiere variable alphanumérique et la dérniere mais ça fonctionne pas

  4. #4
    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 : 46
    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
    Dans tes variables numériques il n'y aura pas de <, on peut donc les oublier.
    Une alternative est d'écrire ARRAY mesVariables $ _CHARACTER_ ; et éviter ainsi de les nommer explicitement.
    Bon courage.
    Olivier

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Février 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Egypte

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Février 2014
    Messages : 32
    Points : 23
    Points
    23
    Par défaut MACRO ET APPEL
    je viens de créer un porgramme macro dans lequel deux variables macro une table et un nom de variable .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    %Macro SEPARATION (ds,variable) ;
    ...........
    %Mend ;
     
    %SEPARATION(work.table3var);
    je trouve la table3 vide sachant que lorsque je fais avec les macros ça fonctionne correctement .

  6. #6
    Membre actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 347
    Points : 235
    Points
    235
    Par défaut
    C'est peut-être à cause de la fin de semaine mais je n'ai pas du tout compris ton dernier message. ^^

    Peux-tu déjà écrire ici le macro-programme que tu as concocté histoire qu'on puisse t'aider à le corriger si problème il y a ?

    Tu dis que tu trouves ta table3 vide mais que ça fonctionne avec des macros. Que veux-tu dire par là ? Quand tu passes par un programme sans macro tu as une table3 vide, mais avec une macro tu obtiens un autre résultat ?

    Peut-être que tu ne vois rien dans la log mais que quelque chose cloche. Deux options qui pourraient t'aider à repérer ton problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    OPTION MPRINT; /* Inscrit dans la log le code SAS exécuté (tu n'as que le résultat des data step et procédures si tu n'utilises pas cette option. */
     
    OPTION MLOGIC; /* Indique la valeur de tes variables quand tu fais des %IF. */

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Février 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Egypte

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Février 2014
    Messages : 32
    Points : 23
    Points
    23
    Par défaut MACRO et Variable
    je suis désolé , j'ai pas bien posé le probléme
    au premier lieu j'ai stocké mes variables à traiter comme Olivier a mentionné .
    maintenant j'ai crée un macro programme comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    %Macro SEPARATION (ds,variable) ;
    ...........
    %Mend ;
    l'objectif est de générer le macro programme pour toutes les variables stockés au début .
    ça ve dire je veux éviter d'écrire à chaque foi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    %SEPARATION(work.table1,var1);
    %SEPARATION(work.table2,var2);
    %SEPARATION(work.table3,var3);
    .................
    Voila .
    Merci encore une fois .

  8. #8
    Membre actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 347
    Points : 235
    Points
    235
    Par défaut
    A brûle-pourpoint je dirais que tu peux créer une seconde macro, très courte, dans laquelle tu ferais une boucle %DO i = 1 %TO ta valeur maximale.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    %MACRO boucle(nombre=);
    %DO i = 1 %TO &nombre.;
         %SEPARATION(work.table&i.,var&i.);
    %END;
    %MEND;
    Et si tu as un nombre de variables et tables qui n'est pas fixe et que tu n'as pas envie d'entrer le nombre, tu dois sans aucun doute pouvoir le stocker automatique dans une macro variable avant.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Février 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Egypte

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Février 2014
    Messages : 32
    Points : 23
    Points
    23
    Par défaut
    dsl la liste des variables pour laquelle je veux génrer mon macro programme est dirivé du programe précédant
    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 work.tunistat ; /* création d'un jeu d'essai */
      INPUT var1 $ var2 $ var3 $ var4 $ var5 $ var6 $ var7 $ var8 $ var9 $ var10 $ ;
    DATALINES ;
    a < b c d < e f < g
    < h < < < i j k l m
    n o p q r s t u v w
    ;
    RUN ;
     
    DATA work.VARIABLES ;
      SET work.tunistat ;
      ARRAY mesVariables $ var1-var10 ;
      DO OVER mesVariables ; /* sur chaque élément de l'Array */
        IF INDEX(mesVariables,"<")>0 /* si cette variable contient un "<" */ 
            THEN DO ;
               nomVar = VNAME(mesVariables) ; /* on stocke le nom de la variable */
               OUTPUT ; /* on conserve en sortie */
        END ;
      END ;
    RUN ; /* au final, il y aura des doublons si plusieurs observations d'une même variable contiennent des < */
    PROC SQL NOPRINT ;
      SELECT DISTINCT nomVar /* DISTINCT = sans doublons */
                INTO : listeVar SEPARATED BY " "
      FROM work.VARIABLES
      ;
    QUIT ;
    /* affichage de la valeur de la macro-variable LISTEVAR dans la log */
    %PUT la liste est &listeVar ;
    Donc la liste est nommée LISTEVAR
    donc je devais écrire DISTEVAR au lieu de nombre dans votre propsition ??

  10. #10
    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
    Bonsoir,
    Dans ce cas la, une ligne à changer dans la proc sql d’Olivier et une petite modification da la macro d’Alers. L’idée est de stocker chaque nom de variable de la liste dans une macro variable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    PROC SQL NOPRINT ;
      SELECT DISTINCT nomVar, LEFT(PUT(COUNT(*), 4.)) /* DISTINCT = sans doublons */
                INTO : mac1-:mac999, :nombre
      FROM work.VARIABLES
      ;
    QUIT ;	
     
    %MACRO boucle ;
    %DO i = 1 %TO &nombre.;
         %SEPARATION(work.table&i., mac&i.);
    %END;
    %MEND;	 %boucle ;
    Bon weekend à vous tous

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

Discussions similaires

  1. [C#] Récupération des variables system...
    Par smyley dans le forum Windows Forms
    Réponses: 7
    Dernier message: 04/08/2005, 11h39
  2. Réponses: 4
    Dernier message: 15/12/2002, 04h19
  3. Gestion des variables - mémoire ?
    Par RIVOLLET dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2002, 12h44
  4. [VB6] [Fichier] Enregistrer des variables de structure
    Par de.bo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/10/2002, 11h09
  5. Réponses: 4
    Dernier message: 18/07/2002, 13h32

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