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éation de X variables à partir d'une seule en fonction du nombre d'occurrences d'un caractère [DATA]


Sujet :

SAS Base

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 97
    Points : 64
    Points
    64
    Par défaut Création de X variables à partir d'une seule en fonction du nombre d'occurrences d'un caractère
    Bonjour,

    J'ai une table avec une seule variable et une très longue chaine de caractère qui est le fruit d'une concaténation entre X variables, chaque information étant séparée par des "/". Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    data t1;
    input var: $100.;
    cards;
    25165/654/852/15/kfjgldk
    124/kijeu/547/SSSSl
    ;
    run;
    Mon but est de retrouver la table originale, à savoir X variables (5 dans l'exemple précédent) v1 à vX. Le nombre d'informations dans la variable var étant indéterminé, je ne peux pas savoir à chaque traitement combien il va y en avoir.

    Existe-t-il des instruction dans une étape data permettant de séparer ces différentes informations en variables distinctes ?

    Merci pour vos lumières

  2. #2
    Membre éprouvé
    Homme Profil pro
    Statisticien/développeur BI
    Inscrit en
    Janvier 2012
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Statisticien/développeur BI
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2012
    Messages : 326
    Points : 1 142
    Points
    1 142
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    data _null_;
    set t1;
    call symput('nbvariables',max(symget('nbvariables'),countw(var)));
    run;
     
    data t2(drop=i);
    set t1;
    array v(&nbvariables) $;
    do i=1 to dim(v);
    	v(i)=scan(var,i);
    end;
    run;
    Bon courage

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 483
    Points : 1 552
    Points
    1 552
    Par défaut
    Bonjour,
    Une solution sans Macro Variable :
    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
     
    data t1;
    input var: $100.;
    cards;
    25165/654/852/15/kfjgldk
    124/kijeu/547/SSSSl
    ;  run ;	  
     
    data t2 ;
    set t1;
    	i=1;
    	do while(scan(var, i, '/') ne " ") ;
    		colname=compress(scan(var, i, '/')) ;
    		id=_n_ ;
    		i=i+1;
    		output;
    	end;
    run ;	  
     
    proc transpose DATA=t2 out=t3 (drop=id _name_) ;
    by id ;
    var colname;
    run ;
    Ward

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 97
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par edward carnby Voir le message
    Bon courage
    Pas mal ! Ca marche plutôt bien mais il considère aussi le caractère "+" comme un séparateur d'information (ce qui n'est pas le cas, je voudrais qu'il ne conserve que le "/". Sais-tu comment gérer ce point ?


    Citation Envoyé par hossward Voir le message
    Une solution sans Macro Variable :
    Ça marche mieux pour les séparateurs ; en revanche je préférerais pouvoir m'en sortir avec la version d'Edward s'il est possible d'avoir la main sur le séparateur d'information

  5. #5
    Membre éprouvé
    Homme Profil pro
    Statisticien/développeur BI
    Inscrit en
    Janvier 2012
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Statisticien/développeur BI
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2012
    Messages : 326
    Points : 1 142
    Points
    1 142
    Par défaut
    Dans ce cas, il faut "forcer" le séparateur désiré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    data _null_;
    set t1;
    call symput('nbvariables',max(symget('nbvariables'),countw(var,'/')));
    run;
     
    data tata (drop=i);
    set t1;
    array v(&nbvariables) $;
    do i=1 to dim(v);
    	v(i)=scan(var,i,'/');
    end;
    run;

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 97
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par edward carnby Voir le message
    Dans ce cas, il faut "forcer" le séparateur désiré
    C'est parfait : merci beaucoup !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/05/2015, 09h41
  2. Création de variables à partir d'une macro-fonction
    Par kalandén dans le forum Macro
    Réponses: 2
    Dernier message: 29/06/2012, 07h36
  3. Création de plusieurs fichier à partir d'une seule requête
    Par V i n c e n t dans le forum Cognos
    Réponses: 5
    Dernier message: 30/06/2011, 10h14
  4. Réponses: 1
    Dernier message: 07/04/2011, 20h28
  5. Réponses: 7
    Dernier message: 15/11/2005, 10h14

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