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 :

Application d'une macro sur les variables de ma base


Sujet :

Macro

  1. #1
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 94
    Points : 101
    Points
    101
    Par défaut Application d'une macro sur les variables de ma base
    Bonjour
    J'ai une macro où base est ma base et var est une variable de ma base
    je veux tout simplement appliquer cette macro sur tous les variables de ma base. Comment je peux faire?

  2. #2
    Responsable SAS


    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Points : 16 219
    Points
    16 219
    Par défaut
    Bonjour,
    Si tu nous ne donnes pas le code de ta macro nous n'allons pas pouvoir t'aider car nous ne savons aucunement comment fonctionne ta macro et donc comment l'utiliser.
    Les balises code
    FAQ SAS
    Rubrique SAS

    Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.

  3. #3
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 94
    Points : 101
    Points
    101
    Par défaut
    voila ma macro
    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
    %macro cA(e,b);
    data &b.tab ;
    set &e;
    	i=1;
    	do while(scan(&b, i, '/') ne " ") ;
    		&b._modal=scan(&b, i, '/');
    		&b._rep=_n_ ;
    		i=i+1;
    		output;
    	end;
    	drop i;
    	run;
    	proc freq data=&b.tab noprint;
    Tables &b._modal / out=&b._freq;
    PROC EXPORT DATA=&b._freq
    			OUTFILE="C:\Users\windows7\Desktop\final2.xls"
    			DBMS=excel REPLACE ;
     
    run;	
    %mend cA;
    Je veux utiliser les tableaux freq de chaque var pour les analyser,c'est pour cette raison que je veux les exporter dans un fichier excel.
    Merci d'avance de m'aider.

  4. #4
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 94
    Points : 101
    Points
    101
    Par défaut
    J'ai essayé ce code mais ça fonctionne pas.Vous pouvez m'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
    15
    16
    17
    18
    19
    20
    21
    22
    %macro loop_on_all_var (table = ) ;
        proc contents data = &table. noprint 
            out = WORK.CONTENTS ;
        run ;
        proc sql ;    
            select distinct(NAME)
            into   :LIST_VARIABLES
            separated by ' '
            from WORK.CONTENTS
            ;
            select COUNT(NAME)
            into   :NB_VARIABLES
            from WORK.CONTENTS
            ;
        quit ;                                           
        %do loop_on_variable = 1 %to &NB_VARIABLES. ;
            %put variable &loop_on_variable. : %scan(&LIST_VARIABLES., &loop_on_variable.) ;
    		%cA(&table.,&NAME.);
     
        %end ; 
    %mend ; 
    %loop_on_all_var (table = bd) ;

  5. #5
    Membre éprouvé
    Avatar de m.brahim
    Homme Profil pro
    SAS / BIG DATA
    Inscrit en
    Juillet 2011
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : SAS / BIG DATA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 461
    Points : 1 119
    Points
    1 119
    Billets dans le blog
    14
    Par défaut
    Bonjour,

    Je te propose cette solution:

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
    data test;
    client =1;
    var55="/ nom/ prénom /adresse1 / adresse2";
    var45="/ nom1/ prénom1 /adresse11 / adresse21 /";
    output;
    client=2;
    var55="/ nom/ prénom /";
    var45="/ nom1/ prénom1 /";
    output;
    run;
     
    data test1;
    client =1;
    var="/ nom/ prénom /adresse1 / adresse2";
    var1="/ nom1/ prénom1 /adresse11 / adresse21 /";
    output;
    client=2;
    var="/ nom/ prénom /";
    var1="/ nom1/ prénom1 /";
    output;
    run;
    proc sql;
       select memname into: lst_var separated by '-' 
          from sashelp.vstable
          where upcase(libname)='WORK' and
                upcase(memname) like'TEST%';
    quit;
    %let cnt=%sysfunc(countw(&lst_var));
     
    DATA _null_;
    do i=1 TO &cnt;
    call symputx ('liste_tab'||trim(LEFT(i)),scan("&lst_var",trim(LEFT(i)),'-'));
    end;
    run;
     
    %macro cont();
    %do i=1 %to &cnt;
    proc contents DATA=&&liste_tab&i noprint out=_contents&i ;
    run ;
     
    data  _contents&i (keep=name MEMNAME) ;
    set _contents&i;
    if type=2;
    run;
    %end;
    %mend;
    %cont();
     
    data fin;
    set _contents:;
    run;
     
    %macro cA(e=,b=);
    data &b._tab ;
    set &e.;
    	i=1;
    	do while(scan(&b, i, '/') ne " ") ;
    		&b._modal=scan(&b, i, '/');
    		&b._rep=_n_ ;
    		i=i+1;
    		output;
    	end;
    	drop i;
    run;
    proc freq data=&b._tab noprint;
    Tables &b._modal / out=&b._freq;
    PROC EXPORT DATA=&b._freq
    			OUTFILE="C:\sas\final2.xls"
    			DBMS=excel REPLACE ;
     
    run;
     
    %mend;
     
    data _null_;
    set fin;
    call execute('%ca(e='||strip(memname)||', b='||strip(name)||' )');
    run;
    Cordialement
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia....avance?uid=162

  6. #6
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 94
    Points : 101
    Points
    101
    Par défaut
    merci de m'avoir répondu.J'ai essayé ce code mais le fichier excel final2 n'est pas créé??

  7. #7
    Membre éprouvé
    Avatar de m.brahim
    Homme Profil pro
    SAS / BIG DATA
    Inscrit en
    Juillet 2011
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : SAS / BIG DATA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 461
    Points : 1 119
    Points
    1 119
    Billets dans le blog
    14
    Par défaut
    C'est quoi le message d'erreur?
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia....avance?uid=162

  8. #8
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 94
    Points : 101
    Points
    101
    Par défaut
    Je n'ai pas de msg d'erreur mais lorsque j'ouvre la table fin ,il m'indique que c'est une table vide

  9. #9
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 94
    Points : 101
    Points
    101
    Par défaut
    voila le message que j'ai eu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column).
          393:30   393:54
    NOTE: Variable memname is uninitialized.
    NOTE: Variable name is uninitialized.
    NOTE: There were 0 observations read from the data set WORK.FIN.

  10. #10
    Membre éprouvé
    Avatar de m.brahim
    Homme Profil pro
    SAS / BIG DATA
    Inscrit en
    Juillet 2011
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : SAS / BIG DATA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 461
    Points : 1 119
    Points
    1 119
    Billets dans le blog
    14
    Par défaut
    Il faut reprendre le code dès le début.

    Pour commencer, que revoit la macro variable: lst_var?
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia....avance?uid=162

  11. #11
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 94
    Points : 101
    Points
    101
    Par défaut
    Vous voulez dire la macro variable ca?
    cette macro c'set pour séparer les chaines des modalités d'une variable comme /client/nom/, après elle me donne le tableau de fréquence et elle exporte ce dernier.
    la macro fonctionne convenablement le problème est que je n'ai pas réussi à l'appliquer sut toutes les variables de ma base et à exporter les tableaux de fréquences de mes variables dans un fichier excel.

  12. #12
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    482
    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 : 482
    Points : 1 547
    Points
    1 547
    Par défaut
    Bonjour,
    Avant d’exporter le résultat tu peux essayer cette macro qui permet de créer le tableau de modalités et le tableau de fréquences sachant que :
    - « e » est ta base.
    - « Vexclue » est la variable à exclure. Ici c’es la variable Client.
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    data test;
    client =1;
    var55="/ nom/ prénom /adresse1 / adresse2";
    var45="/ nom1/ prénom1 /adresse11 / adresse21 /";
    output;
    client=2;
    var55="/ nom/ prénom /";
    var45="/ nom1/ prénom1 /";
    output;
    run;   
     
    %let vexclue=Client ;
    %macro Freq_CA(e); 
    proc contents data=&e (drop=&vexclue ) out=out_conts (keep=name) noprint ; 
    run; 		
    proc sql noprint ;	
    select name, left( put(count (name), 3.) )
    into  :var1 - :var99, :cnt
    from out_conts ;    %PUT _USER_ ;       
    quit;
     
    %do j = 1 %to &cnt. ;
    data Tab_&&var&j. ;
    set &e;
    	i=1;
    	do while(scan(&&var&j, i, '/') ne " ") ;
    		&&var&j.._modal=scan(&&var&j, i, '/');
    		&&var&j.._rep=_n_ ;
    		i=i+1;
    		output;
    	end;
    	drop i;
    	run;		
     
    proc freq data=Tab_&&var&j. noprint ;
    tables &&var&j.._modal / out = out_&&var&j.._modal ;
    run;		 
    %end ;
    %mend; 		 %Freq_CA(test);
    Ward

  13. #13
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 94
    Points : 101
    Points
    101
    Par défaut
    merci énormément ça marche (y)

  14. #14
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    482
    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 : 482
    Points : 1 547
    Points
    1 547
    Par défaut
    Si la macro fonctionne correctement pour la création des tables des modalités et les tables des fréquences, on peut ajouter la proc export pour les exporter. A vérifier !
    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
    %let vexclue=Client ;
    %macro Freq_CA(e); 
    proc contents data=&e (drop=&vexclue ) out=out_conts (keep=name) noprint ; 
    run; 		
    proc sql noprint ;	
    select name, left( put(count (name), 3.) )
    into  :var1 - :var99, :cnt
    from out_conts ;    %PUT _USER_ ;       
    quit;
     
    %do j = 1 %to &cnt. ;
    data Tab_&&var&j. ;
    set &e;
    	i=1;
    	do while(scan(&&var&j, i, '/') ne " ") ;
    		&&var&j.._modal=scan(&&var&j, i, '/');
    		&&var&j.._rep=_n_ ;
    		i=i+1;
    		output;
    	end;
    	drop i;
    	run;		
     
    proc freq data=Tab_&&var&j. noprint ;
    tables &&var&j.._modal / out = out_&&var&j.._modal ;
    proc export data=out_&&var&j.._modal
    			outfile="C:\Users\windows7\Desktop\out_&&var&j.._modal...xls"
    			dbms=excel replace ;
    run;		 
    %end ;
    %mend; 		 %Freq_CA(test);
    Ward merci (Y)

  15. #15
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 94
    Points : 101
    Points
    101
    Par défaut
    merci ward ouiii ça marche mais j'ai eu les tables chacune dans un fichier excel donc j'ai changé un peu les codes pour les afficher dans une seule page et ça m'a donné le résultat désiré
    voila le code
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    data test;
    client =1;
    var55="/ nom/ prénom /adresse1 / adresse2";
    var45="/ nom1/ prénom1 /adresse11 / adresse21 /";
    output;
    run;
    %let vexclue=Client ;
    %macro Freq_CA(e); 
    proc contents data=&e (drop=&vexclue ) out=out_conts (keep=name) noprint ; 
    run; 		
    proc sql noprint ;	
    select name, left( put(count (name), 3.) )
    into  :var1 - :var99, :cnt
    from out_conts ;    %PUT _USER_ ;       
    quit;
     
    %do j = 1 %to &cnt. ;
    data Tab_&&var&j. ;
    set &e;
    	i=1;
    	do while(scan(&&var&j, i, '/') ne " ") ;
    		&&var&j.._modal=scan(&&var&j, i, '/');
    		&&var&j.._rep=_n_ ;
    		i=i+1;
    		output;
    	end;
    	drop i;
    	run;		
     %end ;
    proc template;
    define style saut;
    parent = styles.default;
    style body from body / pagebreakhtml = _UNDEF_;
    end;
    run;
    ods html file='C:\Users\windows7\Desktop\table.xls' style=saut;
    %do j = 1 %to &cnt. ;
    PROC FREQ DATA = Tab_&&var&j ;
       TABLES &&var&j.._modal   / norow nocol nocum nopercent ;
    run ;
    %end ;
    ods html close;
     
    %end ;
    %mend; 		 %Freq_CA(test);

  16. #16
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    482
    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 : 482
    Points : 1 547
    Points
    1 547
    Par défaut
    OK et Bravo. Bon courage et Bonne continuation... (Y)

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

Discussions similaires

  1. [XL-2007] Application d'une macro sur plusieurs feuilles
    Par cattivo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/01/2015, 10h24
  2. Réponses: 4
    Dernier message: 05/07/2009, 16h38
  3. Comment annuler les effets d'une macro sur les feuilles?
    Par jolzeviking dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/06/2008, 14h29
  4. Réponses: 1
    Dernier message: 25/02/2008, 18h43
  5. Une documentation sur les variables $_
    Par belocom dans le forum Langage
    Réponses: 3
    Dernier message: 23/11/2007, 10h37

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