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 :

Création de macro variable GLOBALES


Sujet :

Macro

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 11
    Points : 9
    Points
    9
    Par défaut Création de macro variable GLOBALES
    Bonjour,

    J'ai un fichier contenant le nom de plusieurs fichiers comportant entre autres des datetimes dans le titre.
    Je veux créer autant de macros variables que de noms . Prenant l'exp de 3 fichiers.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    PROC SQL  NOPRINT;
       SELECT 'CC_PP_T_SQ_TAB120170306094048.csv'   INTO :var1 FROM nomfichier;
       SELECT 'CC_GN_SQ_TAB220170306094049.csv'     INTO :var2 FROM nomfichier;
       SELECT 'CC_GR_ZE_SQ_TAB320170306094050.csv' INTO :var33 FROM nomfichier;
    QUIT;
    Là ça va marcher. Mais ce que je veux faire, c'est de créer des macro variables qui pour chacune d'elles va pointer sur le nom du fichier peut importe la date, car l'objectif est de d'automatiser le programme sous unix.
    Par exemple, dès que le nom contient TAB1, le programme prendra "'CC_PP_T_SQ_TAB1_yyyymmddhhmmss" comme valeur de la 1ere variable macro.

    Quelqu'un peut-il m'aider, je suis bloquée.

    Merci
    Neila

    quelqu'un a t il une idée.

    c'est un peu urgent.

    Merci

    Neila

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Dataminer
    Inscrit en
    Septembre 2016
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Dataminer
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 29
    Points : 38
    Points
    38
    Par défaut
    Salut,

    Tu as essayé avec un "where" tout bête ?

    Tu crées une macro variable avec le nombre de ligne de ta table et ensuite tu mets une requête SQL dans une boucle qui tourne autant de fois que tu as d'observations (ici elle va tourner i fois), avec une requête SQL du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    proc sql;
    select nom_des_champs_dans_ta_table into: var&i. from monfichier
    where nom_des_champs_dans_ta_table like "%TAB&i.";
    quit;

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Skewness Voir le message
    Salut,

    Tu as essayé avec un "where" tout bête ?

    Tu crées une macro variable avec le nombre de ligne de ta table et ensuite tu mets une requête SQL dans une boucle qui tourne autant de fois que tu as d'observations (ici elle va tourner i fois), avec une requête SQL du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    proc sql;
    select nom_des_champs_dans_ta_table into: var&i. from monfichier
    where nom_des_champs_dans_ta_table like "%TAB&i.";
    quit;
    J'ai fait ca , le count me donne 16, mais le reste ne marche pas .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    proc sql;
    SELECT COUNT(*) INTO :i TRIMMED FROM listing;
    select mavar into: file&i. from LISTING
    where mavar like "%TAB&i.";
    quit;
    Merci

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Dataminer
    Inscrit en
    Septembre 2016
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Dataminer
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 29
    Points : 38
    Points
    38
    Par défaut
    En fait quand je parlais de boucle, je voulais dire dans une macro.
    Quelque chose du style :

    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
     
     
    %MACRO attrib;
     
    /* Nombre des observations de la table concernée */
     
    proc sql; select count(*) into: n from listing; quit;
     
    /* Et ensuite une boucle qui ferait fonctionner la création des macros */
     
    %DO i = 1 %TO &n.;
     
    proc sql;
    select mavar into: file&i. from listing
    where mavar like "%TAB&i.%"
    ;
    quit;
     
    %END;
     
    %MEND attrib;
     
    %attrib;
    Attention les macros variables sont ici en local. Il faut donc rajouter un petit quelque chose pour les mettre en global.
    Il est possible de faire plus simplement mais en tout cas je pense que ça doit marcher.

  5. #5
    Membre régulier
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2017
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Novembre 2017
    Messages : 63
    Points : 82
    Points
    82
    Par défaut
    Bonjour,

    Pourquoi ne pas simplement avoir vos noms de fichier dans une table avec une colonne contenant le nom de fichier complet et une autre contenant le nom de fichier sans la date ce qui vous permettrait d'automatiser vos processus par sous-groupes de fichier?

    En fait, dans quel objectif souhaitez vous créer ces Macro-Variables?

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Bonjour ,

    Effectivement, j'ai crée une table où j'ai les noms des fichiers.
    Ce que je veux faire, c'est que de créer une macro variable pour chaque nom de fichier à importer (6 a chaque update de date).
    Dans le programme que je veux automatiser , je veux dans le path où lire les fichiers (qui correspondent aux tables), au lieu d'avoir le nom, je donne &file1, &file2, ..etc

    La solution proposée par Skewness que je remercie en passant , dès fois elle marche, et là en ce moment, il me donne juste le nom de &file1, les autres non.
    J'ai rajouté GLOBAL file&i juste après le %do.

    Merci

  7. #7
    Membre régulier
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2017
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Novembre 2017
    Messages : 63
    Points : 82
    Points
    82
    Par défaut
    Je vous invite à regarder la syntaxe call execute.

    Lorsque vous parcourez votre table référençant vos nom de fichier, vous pouvez faire appel à une macro dont le paramètre (le nom du fichier à importer) est la valeur de la variable indiquée pour l'observation en cours.

    C'est beaucoup plus pratique (je trouve) que de passer par la création de multiples macro-variables. A la place, vous utilisez simplement les observations dans votre table.

  8. #8
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Les noms de cette table vont changer à mesure que de nouveaux fichiers vont rentrer, et par conséquent la valeur.
    D'où je veux que cette soit dans une macro variable.
    Merci

  9. #9
    Membre expérimenté
    Homme Profil pro
    Attaché statisticien
    Inscrit en
    Mai 2011
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Attaché statisticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 687
    Points : 1 581
    Points
    1 581
    Par défaut
    Bonjour,

    j'avoue que le problème exposé n'est pas d'une grande clareté...

  10. #10
    Membre confirmé
    Homme Profil pro
    Consultant Finance/Assurance
    Inscrit en
    Décembre 2013
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Finance/Assurance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 198
    Points : 638
    Points
    638
    Par défaut
    Bonjour,

    Si je comprends bien tu as un dossier dans lequel tu as des CSV et tu souhaites faire un import automatique.
    Voici une solution pour créer autant de macro variable que de fichier CSV (à adapter).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Data _Null_;
    rc = filename("IF", "C:\test");
    did = DOPEN("IF");
    If rc = 0 then do;
    	Do i = 1 to dnum(did);
    		name = dread(did,i);
    		Call symputx (compress("File"||i),Name);
    	End;
    End;
    Run;
    Dans cet exemple j'ai un dossier qui se nomme "Test" et qui contient mes fichiers.
    Je crée un filename et je test si celui ci est bien créé (RC = 0 dans ce cas).
    J'ouvre le dossier "Test" avec la fonction DOPEN.
    Puis je boucle autant de fois qu'il y a de fichiers dans mon dossier grâce à la fonction DNUM.
    La fonction DREAD permet d'obtenir le nom des fichiers avec leur extension.
    Je stock le résultat dans des macro variables que je pourrais utiliser ensuite pour un import automatique dans une macro.

    Flo00154

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/01/2010, 17h02
  2. création d'une variable globale
    Par TaymouWan dans le forum C#
    Réponses: 7
    Dernier message: 03/04/2009, 17h13
  3. Suppression de macro-variables globales impossible
    Par raf64flo dans le forum Macro
    Réponses: 12
    Dernier message: 18/04/2008, 13h33
  4. Suppression de macro-variables globales
    Par raf64flo dans le forum Macro
    Réponses: 2
    Dernier message: 09/04/2008, 15h25

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