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 :

Tables qui comptent les valeurs manquantes


Sujet :

Macro

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2019
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2019
    Messages : 14
    Points : 15
    Points
    15
    Par défaut Tables qui comptent les valeurs manquantes
    Bonsoir,
    je bloque sur un erreur bizarre, je veux créer des tables qui comptent les valeurs manquantes mais je suis bloqué sur un erreur qui apparaître seulement pour une seule table !!!!!!!!!!!!
    Voici le code et l'erreur
    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
    %macro val_manquantes(BIB,TAB,ENV);
    	/*proc sql noprint;
    	select name into:list_var separated by ' ' from dictionary.columns
    	where upcase(libname)="&BIB." and upcase(memname)="&TAB.";
    	quit; 
     	*/
     
    	/*	Créer une macro variable list_varnmiss contenant la liste des variables de la table &BIB..&TAB. concaténées à nmiss()  */
    	proc sql noprint;
    	select cat('nmiss(', strip(name), ') as ', strip(name), ' ') into:list_varnmiss separated by ',' 
    	from dictionary.columns
    	where upcase(libname)="&BIB." and upcase(memname)="&TAB.";
    	quit;
     
    	/*  Calculer le nombre des valeurs maquantes par BO  */
    	proc sql;
    	create table WORK.VALEURSCOMPTEES_&TAB. as select distinct
    		cat(LB_BO,'_VAL_MANQUANTE' ) as STATS,
    		LB_BO,DT_IMAGE,&list_varnmiss.
    	from &BIB..&TAB.
    	group by STATS;
    	quit;
     
    	/*	Creer une macro variable list_vartotaux contenant la liste des variables de la table &BIB..&TAB. concaténées à count()  */
    	proc sql noprint;
    	select cat('count( ID_CONTRAT) as ', strip(name), ' ') into:list_vartotaux separated by ',' 
    	from dictionary.columns
    	where upcase(libname)="&BIB." and upcase(memname)="&TAB.";
    	quit;*/
     
    	/*  Calculer le nombre total d'observations des variables par BO  */
    /*	proc sql;
    	create table WORK.VALEURSCOMPTEES1_&TAB. as select 
    		cat(LB_BO,'_TOT' ) as STATS
            ,&list_vartotaux.
    	from &BIB..&TAB.
    	group by STATS;
    	quit;
     
    	/* Concatener les deux tables de calcul des valeurs manquantes et de calcul des totaux  */
    	Data Valeurs_mq_&TAB._&ENV.;
    	set WORK.VALEURSCOMPTEES_&TAB. WORK.VALEURSCOMPTEES1_&TAB.;
    	run;
    %mend;
    %val_manquantes(BUD_MOAR,T_FLUX,R);
    Nom : erreur.PNG
Affichages : 50
Taille : 16,2 Ko

  2. #2
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    avril 2008
    Messages
    1 847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : avril 2008
    Messages : 1 847
    Points : 4 099
    Points
    4 099
    Par défaut
    Bonjour.
    Dans l'étape qui crée WORK.VALEURSCOMPTEES&TAB, tu veux aussi conserver les variables LB_BO et DT_IMAGE. Sauf qu'elles sont aussi incluses dans la liste de variables à alimenter avec des NMISS et que ta macro-variable contient des syntaxes type NMISS(Z) AS Z. Il y a donc un doublon de noms de variables. Il faudrait 1) soit changer les noms des variables créées (NMISS(Z) as nbMiss_Z par exemple), 2) soit éliminer dans la première proc SQL les colonnes LB_BO et DT_IMAGE des variables à traiter.
    Et sinon il y a la proc FREQ qui ferait ça pas mal, sans macros :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    PROC FORMAT ;
      VALUE varNum LOW-HIGH="Renseigné" OTHER="Manquant" ;
      VALUE $varCar LOW-HIGH="Renseigné" OTHER="Manquant" ;
    RUN ;
    PROC FREQ DATA=... ;
      TABLE _ALL_ / MISSING ;
      FORMAT _NUMERIC_ varNum. _CHARACTER_ $varCar. ;
    RUN ;
    Code auquel on peut ajouter un OUT= ou un ODS OUTPUT si tu veux créer une table, et un WHERE pour ne voir que les effectifs manquants.
    Bon courage.
    Olivier

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2019
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2019
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    Pour la première solution, j'ai pas compris comment changer le nom. vous voulez dire ça ?
    code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    proc sql noprint;
    	select cat('nmiss(', strip(name), ') as ', strip(nb_name), ' ') into:list_varnmiss separated by ',' 
    	from dictionary.columns
    	where upcase(libname)="&BIB." and upcase(memname)="&TAB.";
    	quit;

  4. #4
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    avril 2008
    Messages
    1 847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : avril 2008
    Messages : 1 847
    Points : 4 099
    Points
    4 099
    Par défaut
    Oui, dans cette partie du code. Dans le CAT, ce qui suit AS construit le nom des nouvelles variables. Si on leur ajoute un préfixe ou un suffixe, ça devrait éliminer l'erreur.
    Bon courage.
    Olivier

Discussions similaires

  1. [Macro] Erreur macro sas
    Par bibette dans le forum Macro
    Réponses: 2
    Dernier message: 07/07/2008, 22h04
  2. Erreur macro variable
    Par chrystelle78 dans le forum Macro
    Réponses: 2
    Dernier message: 18/04/2008, 16h37
  3. Excel VBA > Message d'erreur " Macro desactivés "
    Par alec-- dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/06/2007, 13h58
  4. [VBA-E]contenu d'une cellule gestion erreur macro
    Par matou_aouh dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/03/2006, 10h18
  5. [Dev-Cpp] Erreur "Macro Names Must be Identifiers"
    Par TheRedLed dans le forum Dev-C++
    Réponses: 6
    Dernier message: 07/06/2005, 20h12

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