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 :

Nom de variable paramétrable


Sujet :

SAS Base

  1. #1
    Membre actif
    Inscrit en
    Novembre 2003
    Messages
    543
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 543
    Points : 239
    Points
    239
    Par défaut Nom de variable paramétrable
    Bonjour,

    Je souhaiterais affecter à une variable, les valeurs dépendant d'une autre variable dont le nom est donné par une troisième.

    Par exemple, supposons qu'il existe une fonction (appelons-la "fonction"), telle que X=fonction(Y), où Y désigne une troisième variable quelconque.

    Est-ce possible sous SAS ?

  2. #2
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Nom de variable paramétrable
    Bonjour enicnath,

    Est-ce que le programme suivant répond à votre question ou est-ce que le nom de la variable est lui aussi dans la table ?

    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
    data test;
      input V1 V2;
      cards;
    2 3
    4 5
    6 7
    8 9
    ;
    run;
     
    %macro test(var);
      data test;
        set test;
        valeur=&var;
      run;
     
      proc print data=test noobs;
      run;
    %mend;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    %test(V1);
    
    V1    V2   valeur
     2     3      2
     4     5      4
     6     7      6
     8     9      8
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    %test(V2);
    
    V1    V2   valeur
     2     3      3
     4     5      5
     6     7      7
     8     9      9
    Cordialement,

  3. #3
    Membre actif
    Inscrit en
    Novembre 2003
    Messages
    543
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 543
    Points : 239
    Points
    239
    Par défaut
    Bonjour mgdondon,

    Merci de votre réponse.
    L'idée est un peu celle-là, mais ma question portait plutôt sur une possibilité hors macro-sas.
    L'instruction X=fonction(Y) aurait un peu le rôle d'une instruction du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select (Y);
        when ('A') X=A;
        when ('B') X=B;
    ....
    end;
    où A, B, ... sont des variables.

    Mais je n'ai rien vu dans la doc qui permette de réaliser ce genre d'instruction (sauf effectivement en passant par une macro) ; je ne serais pas étonné que ça ne soit pas possible

  4. #4
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Fonction vvaluex
    Bonjour eninath,

    Si le nom de la variable est dans la table, vous pouvez utiliser la fonction vvaluex() :

    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 V1 V2 nomvar $2.;
      cards;
    2 3 V1
    4 5 V1
    6 7 V2
    8 9 V2
    ;
    run;
     
    data test;
      set test;
      valeur = vvaluex(nomvar);
    run;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    V1    V2    nomvar   valeur
     2     3      V1       2
     4     5      V1       4
     6     7      V2       7
     8     9      V2       9
    Cordialement,

  5. #5
    Membre actif
    Inscrit en
    Novembre 2003
    Messages
    543
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 543
    Points : 239
    Points
    239
    Par défaut
    Bonjour mgdondon,
    C'est exactement ce que je recherche.
    Mon objectif est de traiter cette question dans une instruction array. Voici un exemple
    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
    data test (drop=V1 V2 NV1 NV2);
      input V1 V2 NV1 NV2;
    	array MesVar V1 V2;
    	do over MesVar; 
    		NomVar=vname(MesVar); 
    		Valeur=vvaluex(compress('N'!!NomVar)); 
    		output;
    	end;
      cards;
    3 4 2 3
    4 3 4 5
    3 3 6 7
    4 4 8 9
    ;
    run;
    proc print data=Test; run;
    L'avantage est que le nom de la variable en paramètre de la fonction vvaluex est complètement paramétrable.
    Super !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/04/2013, 09h42
  2. paramétrer un nom de variable en VB
    Par schwarzy2 dans le forum VB.NET
    Réponses: 12
    Dernier message: 25/08/2008, 08h37
  3. [SQL SERVER 2000] Noms de variables dynamiques
    Par cassoulet dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 08/09/2004, 11h44
  4. Nom de variable
    Par lilia dans le forum Flash
    Réponses: 4
    Dernier message: 07/08/2004, 13h11
  5. Generer des noms de variables avec une boucle
    Par moutanakid dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/07/2004, 17h45

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