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 :

[Macro] table SAS: comment deleter des colonnes vides


Sujet :

Macro

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 90
    Points : 36
    Points
    36
    Par défaut [Macro] table SAS: comment deleter des colonnes vides
    Salut,

    J'ai dans une table SAS des colonnes vides ce qui me crée un problème pour exporter cette table en Excel ( ERROR: Error attempting to CREATE a DBMS table. ERROR: Execute error: Too many fields defined..)

    Je pense que si j'arrive à deleter ces colonnes vides, ca peut marcher.


    Maintenant question comment deleter une colonne vide?

  2. #2
    Membre actif

    Profil pro
    Inscrit en
    Avril 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 233
    Points : 254
    Points
    254
    Par défaut
    Qu'est-ce qu'une colonne vide pour toi ?
    1) C'est une colonne de la liste que tu connais - fais une étape data avec l'instruction drop.
    2) Ce sont toutes les colonnes après une colonne donnée - trouve la liste des colonnes dans la view sashelp.VCOLUMN, ensuite comme dans 1).
    3) C'est une colonne où aucune ligne n'a pas d'information - avec l'aide de même view que dans 2), et une macro, trouve la liste des colonnes (je ferais une proc sql avec un count(distinct NOM_DE_LA_COLONNE) pour détecter des colonnes avec une seule valeur présente), ensuite comme dans 1).
    4) Une autre définition ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 90
    Points : 36
    Points
    36
    Par défaut
    une colonne avec toute les lignes sans valeur .

  4. #4
    Membre actif

    Profil pro
    Inscrit en
    Avril 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 233
    Points : 254
    Points
    254
    Par défaut
    Justement, c'est le cas 3). Si tu as des questions - n'hésite pas.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 90
    Points : 36
    Points
    36
    Par défaut
    Un drop est suffisant pour se débarasser des colonnes vident, seul truc vraiment ch... c'est le fait de taper (200 fois voir plus ) le nom des variables.

    y'a t'il une autre solution plus simple ?

  6. #6
    Membre actif

    Profil pro
    Inscrit en
    Avril 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 233
    Points : 254
    Points
    254
    Par défaut
    J'ai bien proposé une solution automatique :
    1) Créer une table à une colonne "COLUMN_TO_DROP" pour garder les noms des colonnes à supprimer.
    2) Créer un macro à un paramètre (nom d'une colonne) qui (avec la proc sql que j'ai mentionnée plus haut) vérifie si la colonne est vide, si oui - insère son nom dans la table de 1)
    3) Avec l'aide de sashelp.VCOLUMN parcourir toutes les colonnes de la table, pour chaque colonne appeler le macro de 2)
    4) Après 3) on doit avoir une table avec la liste des noms des colonnes vides. Lire son contenu dans une variable macro, avec laquelle générer l'instruction drop de l'étape data.

    Ça prendra le temps comparable avec la saisie manuelle de 200+ noms :-) Par contre c'est recyclable et surtout plus enrichissant.

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

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Bonjour.
    En SAS 9, la proc Freq peut compter le nombre de valeurs distinctes de toutes les variables d'une table (option NLEVELS, identique au COUNT DISTINCT de SQL mais plus automatique). On pourrait résoudre ton problème en générant ce tableau avec Freq, en le sauvegardant dans une table (avec ODS OUTPUT), en le relisant avec du SQL pour voir quelles colonnes sont vides, et mettre leurs noms dans une macro-variable, avant de se servir de la macro-variable dans un DROP.
    Aucune saisie manuelle à l'horizon !
    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
    DATA work.test ;
    	INFILE CARDS MISSOVER DSD DLM = " " ;
    	INPUT (v1-v30) (:2.) ;
    CARDS ;
    1  2  3
    4  5
    .  6 7  9  10
    ;
    RUN ;
    ODS OUTPUT nLevels = work.cardinalites ;
    PROC FREQ DATA=work.test NLEVELS ;
    	TABLE _ALL_ / NOPRINT ;
    RUN ;
    PROC SQL NOPRINT ;
    	SELECT STRIP(tableVar) INTO : listeDrop SEPARATED BY ","
    	FROM work.cardinalites
    	WHERE NnonMissLevels = 0
    	;
    	ALTER TABLE work.test DROP &listeDrop ;
    QUIT ;
    Olivier

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/11/2014, 16h12
  2. comment éliminer des colonnes vides dans un fichier csv
    Par xavier81 dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 10/05/2012, 23h30
  3. Réponses: 1
    Dernier message: 08/12/2009, 22h35
  4. Comment créer une table sas pour gérer des queries
    Par arnaldo1974 dans le forum Administration et Installation
    Réponses: 1
    Dernier message: 02/12/2009, 14h39
  5. Comment definir des colonnes...
    Par sbeu dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/10/2005, 07h27

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