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

SAS Base Discussion :

Créer plusieurs tables à partir des valeurs d'une variable


Sujet :

SAS Base

  1. #1
    Membre du Club
    Homme Profil pro
    statisticien
    Inscrit en
    Juin 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : statisticien
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2017
    Messages : 54
    Points : 46
    Points
    46
    Par défaut Créer plusieurs tables à partir des valeurs d'une variable
    Bonjour à tous,

    J'ai une tables contenant des informations pour plusieurs établissements et je souhaiterais diviser cette table en fonction de la dernière variable "établissement". C'est à dire que si une ligne dans ma table a comme établissement "2BMAY" une table qui se nomme "2BMAY" soit créée et que dans celle-ci toutes les lignes de ma première table ayant comme établissement "2BMAY" soit collées dedans.

    J'ai cherché sur le forum et j'ai essayer d'adapter 2 codes trouvés à mon programme, mais ils ne fonctionnent pas car ma variable établissement peut commencer par un ou deux chiffres.
    Ci-dessous les codes avec respectivement leur message d'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
    PROC SORT DATA=liste_investigation OUT=liste_investigation_temp ;
      BY etablissement ;
    RUN ;
    DATA _NULL_ ;
        SET liste_investigation_temp ;
        BY etablissement ; /* on lit les données par bloc */
    	RETAIN id ;
    	IF FIRST.etablissement THEN DO ;
    	  id=0 ;
          DECLARE HASH hid (ORDERED: "A") ; /* les données sont triées */
          hid.DEFINEKEY ("id") ; /* l'identifiant est le n° de ligne. Aucun intérêt mais il en faut un */
          hid.DEFINEDATA ("IPP", "DATNAIS", "NUM_IDPAT", "DATINCID", "APPAREIL_REG", "COMMENTAIRE", "MOTIF_INVEST", "ETABLISSEMENT") ;  /* variables conservées dans le résultat */
          hid.DEFINEDONE () ;
        END ;
    	id = id + 1 ;
        hid.ADD() ;
    	IF LAST.etablissement THEN
        hid.OUTPUT (DATASET: "work."!!TRANSLATE(STRIP(etablissement),"____"," '.-")) ;/* on crée une table en sortie qui s'appelle comme la valeur de PRODUCT, modulo l'élimination des caractères spéciaux */
    RUN ;
    Message d'erreur :
    ERROR: La valeur 2BMAY n'est pas un nom SAS valide.
    ERROR: Une erreur s'est produite durant la méthode instance OM_OUTPUT(505) de "DATASTEP.HASH"
    et 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
    proc sql noprint; 
    SELECT DISTINCT etablissement INTO :listtab separated BY " "
    FROM liste_investigation;
    CREATE TABLE listtab AS
    SELECT DISTINCT etablissement AS code
    FROM liste_investigation;
    quit;
     
    DATA _null_;
    SET listtab;
    call symput("code"||compress(put(_n_,3.)), code);
    call symput("nbcode",put(_n_,3.));
    run;
    %macro manageoutput;
    DATA &listtab ;
    SET liste_investigation;
    %do i=1 %TO  &nbcode.;
    IF etablissement="&&code&i." then output "&&code&i.";
    %end;
    run;
     
    %mend manageoutput;
    %manageoutput;
    Me créer les tables mais sans le chiffre au début donc les tables sont vides :
    WARNING: The data set WORK.BMAY may be incomplete. When this step was stopped there were 0
    observations and 8 variables.
    WARNING: Table WORK.BMAY non remplacée car cette étape a été interrompue.
    Quelqu'un aurait une idée comment corriger le code afin que mes tables soient créés avec le(s) chiffre(s) en début de nom de table ? Ou aurait une alternative à me proposer car moi je sèche depuis plusieurs jours.

    Merci par avance.

  2. #2
    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 : 46
    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.
    Ajouter un underscore au début de chaque nom de table créée suffirait. Par exemple dans la solution hash tables...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hid.OUTPUT (DATASET: "work._"!!TRANSLATE(STRIP(etablissement),"____"," '.-")) ;
    Bon courage.
    Olivier

  3. #3
    Membre du Club
    Homme Profil pro
    statisticien
    Inscrit en
    Juin 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : statisticien
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2017
    Messages : 54
    Points : 46
    Points
    46
    Par défaut
    Bien vu.
    Merci beaucoup.

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

Discussions similaires

  1. [DATA] Créer des nouvelles colonnes a partir des valeurs d'une colonne
    Par ChrisMaire dans le forum SAS Base
    Réponses: 2
    Dernier message: 28/02/2013, 16h11
  2. Réponses: 2
    Dernier message: 07/04/2010, 03h35
  3. creation d'une table à partir des valeurs de 2 tables
    Par esmarlandes dans le forum Macro
    Réponses: 2
    Dernier message: 29/01/2010, 09h55
  4. Créer plusieures tables à partir d'une seule
    Par CHINAILLON dans le forum VBA Access
    Réponses: 4
    Dernier message: 20/03/2008, 15h35
  5. Réponses: 1
    Dernier message: 23/01/2006, 18h53

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