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 :

[SAS 9.1] Création de x tables à partir d'1 seule table


Sujet :

SAS Base

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 83
    Points : 43
    Points
    43
    Par défaut [SAS 9.1] Création de x tables à partir d'1 seule table
    Bonjour,

    J'ai une table SAS qui contient les infos suivantes :
    num_client,num_contrat,couverture,mnt_couverture

    Dans le champ couverture, j'ai un nombre fini de codes.

    Je voudrais, à partir de cette table, créér autant de tables qu'il y a de codes différents dans couverture. Dans ces tables créées , j'aurai les mêmes informations (num_client,num_contrat,couverture,mnt_couverture).

    Le pb, c'est que je ne sais pas à l'avance combien de tables j'aurais.


    Qqn a une idée pour faire cela?

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Bonsoir,

    Pour récupérer le nb de codes différents pour "couverture", tu peux utiliser la procédure sql "count(distinct couverture)" que tu mettras dans une macro var à l'aide de "into"

  3. #3
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    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
     
    data t;
    input a;
    cards;
    1
    1
    2
    4
    6
    4
    ;
    run;
    option mprint;
    %macro toto;
    proc sort data=t ; by a;run;
    proc sql;
    select distinct(a) into :ele_distinct separated by ' ' from t;
    select count(distinct(a)) into :nb_ele from t;
    quit;
     
    %do i=1 %to &nb_ele;
    	proc sql;
    	create table t_&i as
    	select *
    	from	t
    	where	a=%scan(&ele_distinct,&i,' ');
    	quit;%put %scan(&ele_distinct,&i,' ');
    %end;
    %mend;
    %toto;

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 83
    Points : 43
    Points
    43
    Par défaut
    Ce programme fonctionne bien qd la colonne a contient des nombres.
    Dans ma colonne Couverture, j'ai des codes (sur 3 char)...et du coup j'ai le message suivant :
    ERROR: The following columns were not found in the contributing tables: WS. (avec WS une des valeurs de la colonne couverture)
    J'ai bien essayé de concaténer '....mais sans succés ?!

    Citation Envoyé par bahraoui Voir le message
    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
     
    data t;
    input a;
    cards;
    1
    1
    2
    4
    6
    4
    ;
    run;
    option mprint;
    %macro toto;
    proc sort data=t ; by a;run;
    proc sql;
    select distinct(a) into :ele_distinct separated by ' ' from t;
    select count(distinct(a)) into :nb_ele from t;
    quit;
     
    %do i=1 %to &nb_ele;
    	proc sql;
    	create table t_&i as
    	select *
    	from	t
    	where	a=%scan(&ele_distinct,&i,' ');
    	quit;%put %scan(&ele_distinct,&i,' ');
    %end;
    %mend;
    %toto;

  5. #5
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Le problème se pose au nouveau de la proc SQL
    a="%scan(&ele_distinct,&i,' ')";
    Il faut mettre le %scan entre double "
    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
     
     
    OPTION mprint;
    %macro toto;
    proc sort DATA=t ; BY a;run;
    proc sql;
    SELECT DISTINCT(a) INTO :ele_distinct separated BY ' ' FROM t;
    SELECT count(DISTINCT(a)) INTO :nb_ele FROM t;
    quit;
     
    %do i=1 %TO &nb_ele;
    	proc sql;
    	CREATE TABLE t_&i AS
    	SELECT *
    	FROM	t
    	WHERE	a="%scan(&ele_distinct,&i,' ')";
    	quit;%put %scan(&ele_distinct,&i,' ');
    %end;
    %mend;
    %toto;

  6. #6
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 83
    Points : 43
    Points
    43
    Par défaut
    Il me semblait avoir essayé ca....apparement non.
    Ca fonctionne super maintenant.

    merci

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 16/01/2014, 11h21
  2. Création d'une table à partir d'une autre table en VB6
    Par mqsi dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 20/07/2007, 14h22
  3. Réponses: 4
    Dernier message: 03/06/2006, 12h45
  4. remplir un champ d'une table à partir d'une autre table
    Par MrsFrizz dans le forum Langage SQL
    Réponses: 4
    Dernier message: 11/02/2005, 16h48
  5. Réponses: 5
    Dernier message: 06/01/2005, 12h07

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