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 :

Mettre les valeurs d'une macrovariables dans des macrovariables


Sujet :

Macro

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 34
    Points : 28
    Points
    28
    Par défaut Mettre les valeurs d'une macrovariables dans des macrovariables
    Bonjour tt le monde,
    est ce que quelqu'u peut m'aider pour résoudre un problème qui me prive d'automatiser ma procédure. Il d'agit d'une macrovariable dont les valeus sont inconnues au départ, tt ce que j'ai comme information c'est le nombre de valeurs de ma ma variable macro;

    par exemple :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    &list_valeurs = var_1 var_2 var_3 .............var_i ,
    ce que jai donc c le i

    ce que je veux faire c'est de mettre chaque var_i dans une macro appart.

    aidez moi svp.

    jai essyé de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     do i=1 to i ;
    %let macro_tick= %scan(&list, &i, ' ');
     end;
    mais ça marche pas.


    merci d'avance.

  2. #2
    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
    Bonjour SASMetrics,

    qq petites précisions sur ton post:


    qd tu affectes une valeur à une macro variable n'utilise pas le &, utlisé pour résoudre cette macro (à moins que le & soit utilisé pour résoudre une autre macro variable au sein de cette macro variable)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %let list_valeur =var_1 var_2 var_3 var_4;
    pour créer des macros variables en dynamique, utilise plutot le call symput que le %let(je suppose que tu veux autant de macros variables macro_tick que d'itérations de i)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	call symputx ("macro_tick"||compress(put(&i.,3.)), scan("&list_valeur.", &i., " "));

    ce qui donne:

    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
    %let list_valeur =var_1 var_2 var_3 var_4;
     
    %put &list_valeur.;
     
    %macro test(nb=);
    data test;
    %do i=1 %to &nb.;	
    	call symputx ("macro_tick"||compress(put(&i.,3.)), scan("&list_valeur.", &i., " "));
    	test= scan("&list_valeur.", &i., " ");
    	output;
    %end;	
    run;
    %mend;
    %test(nb=4);
     
    %put _user_;

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 34
    Points : 28
    Points
    28
    Par défaut
    Bonjour,

    Merci bp pour tes eclarssiments, mais le problème c'est que le nombre de mes variables var_i je le connais pas car : je les ai crée avec les statements suivants :

    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
    PROC SQL ;
    CREATE TABLE TICKERS AS SELECT PORTFOLIO_VALUE._NAME_ 
    FROM WORK.PORTFOLIO_VALUE AS PORTFOLIO_VALUE
    WHERE PORTFOLIO_VALUE._NAME_ IN ("ACR", "ADH", "ADI", "AGM", "ZDJ") ;
    QUIT ;
     
    proc sql  ;
    SELECT _name_ INTO : list separated BY ' '
    FROM TICKERS  ;
    quit ;
     
    data _null_ ;
    set tickers ;
    call symput('numb_tick', _N_) ;
    run ;

    En plus de ça lorsque j'exécute la procédure que m'avez faites, je trouve pas la totalité de mes macrovariables, je me trouve seulemnt avec 10 macrovariables alors que je dois avoir 32.

    Merci bp pour votre interactivité.

  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
    C'est un _Name_ dans une macro variable que 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
    15
    16
    PROC SQL ;
    CREATE TABLE TICKERS AS SELECT PORTFOLIO_VALUE._NAME_
    FROM WORK.PORTFOLIO_VALUE AS PORTFOLIO_VALUE
    WHERE PORTFOLIO_VALUE._NAME_ IN ("ACR", "ADH", "ADI", "AGM", "ZDJ") 
    ORDER BY _NAME_;
    QUIT ;
    
    data _null_ ;
    set tickers ;
    call symputx(CATS('tick',_n_), _NAME_) ;
    call symput('numb_tick', _N_) ;
    run ;
    
    %put tick1 = &tick1;
    %put tick2 = &tick2;
    %put tick&numb_tick = &tick&numb_tick;
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

  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
    Avec ce code tu vas considérer plusieurs fois la catégorie de _name_ lorssque cette catégorie est présente plusieurs fois dans le fichier source. C'est probablement de là que viennent nos différences.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    PROC SQL ;
    CREATE TABLE TICKERS AS SELECT PORTFOLIO_VALUE._NAME_ 
    FROM WORK.PORTFOLIO_VALUE AS PORTFOLIO_VALUE
    WHERE PORTFOLIO_VALUE._NAME_ IN ("ACR", "ADH", "ADI", "AGM", "ZDJ") ;
    QUIT ;
     
    proc sql ;
    SELECT _name_ INTO : list separated BY ' '
    FROM TICKERS ;
    quit ;
    essaye ce code, et précise ce que tu veux:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    proc sql ;
    SELECT distinct _name_ INTO : list separated BY ' '
    FROM PORTFOLIO_VALUE(where=(_NAME_ IN ("ACR", "ADH", "ADI", "AGM", "ZDJ"))) ;
    quit ;

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/08/2012, 18h43
  2. Réponses: 2
    Dernier message: 10/06/2011, 23h36
  3. [XL-2007] mettre les valeurs d'une feuille excel dans un formulaire
    Par dragoes64 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/05/2011, 10h20
  4. [XL-2003] mettre les valeur d une textbox dans excel
    Par alex santus dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/02/2010, 22h19

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