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 :

Automatiser un programme sur 52 table


Sujet :

Macro

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Automatiser un programme sur 52 table
    Bonjour, alors voila je m'explique, Je possède une base de données de 52 table ce qui donne au total un peu plus de 9000 variables. J'ai donc ecrit un programme qui me permet d'avoir une base cahier de variable avec le nom le libeller le format de chaque variable de chaque base, je cherche maintenant a faire un peu la meme mais avec les valeurs manquantes.

    pour cela j'ai un code qui me permet d'avoir les valeurs manquantes de chaques variables pour une base :
    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
     
    proc sort data=caye0014.cahiervar nodupkey out=table_unique ; by table ;  run ; 
     
    %macro CalculNmiss();
     
    data _null_ ;
    set  table_unique ;
    if _n_=1 ; 
    call symput("tab_entree",table) ;
    run ; 
     
    data inter ;
     set caye0014.&tab_entree.;
     array cha _character_;
     array num _numeric_;
    do over cha;
     if missing(cha) then do;
     NAME=vname(cha);
     output;
     end;
    end;
    do over num;
     if missing(num) then do;
     NAME=vname(num);
     output;
     end;
    end;
    run;
     
     
    proc sql;
    create table NA_1 as
    select distinct NAME, count(*) as nmiss
    from inter
    group by NAME
    ;
    quit;
     
    data NA_1 ; set NA_1 ; table="&tab_entree." ; run ;
     
    %Mend CalculNmiss;
    %CalculNmiss ();
    je cherche maintenant a ce que cette macro le fasse automatiquement de base1 a base52

    Merci d'avance !

    Bien cordialement

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

    Une solution pour ton problème :

    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
    proc sort data=caye0014.cahiervar nodupkey out=table_unique ; 
    by table ;  
    run ; 
     
    %macro CalculNmiss();
     
    data _null_ ;
    set  table_unique ;
    call symputx (compress("tab_entree"||_n_), table) ;
    Call symputx ("Tot",_n_);
    run ; 
     
    %Do i = 1 %To &Tot;
    	data inter ;
    	set caye0014.&&tab_entree&i.;
    	array cha _character_;
    	array num _numeric_;
    	do over cha;
    		if missing(cha) then do;
    			NAME=vname(cha);
    			output;
    		end;
    	end;
    	do over num;
    		if missing(num) then do;
    			NAME=vname(num);
    			output;
    		end;
    	end;
    	run;
     
    	proc sql;
    	create table NA_1 as
    	select distinct NAME, count(*) as nmiss
    	from inter
    	group by NAME;
    	quit;
     
    	data NA_1 ; 
    		set NA_1 ; 
    		table="&&tab_entree&i." ; 
    	run ;
    %End;
    %Mend CalculNmiss;
    %CalculNmiss ();
    Je croyais que la boucle DO OVER n'étais plus utilisable sous SAS, à moins que tu ne sois sur une ancienne version ?

    Flo00154

Discussions similaires

  1. Automatiser une étape DATA sur plusieurs tables
    Par horacia dans le forum Macro
    Réponses: 1
    Dernier message: 19/12/2017, 14h05
  2. Automatiser une alerte mail sur une table
    Par Tekkeur dans le forum Développement
    Réponses: 4
    Dernier message: 08/05/2017, 14h49
  3. Automatisation clique droit sur programme externe
    Par DevnetZ dans le forum Visual Studio
    Réponses: 0
    Dernier message: 11/04/2016, 05h37
  4. Réponses: 2
    Dernier message: 27/08/2014, 08h49
  5. auditer l'activité d'un programme sur une table
    Par aline dans le forum Oracle
    Réponses: 10
    Dernier message: 25/09/2006, 16h26

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