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 :

Format numérique en caractère


Sujet :

SAS Base

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chargé d'études statistiques
    Inscrit en
    Novembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'études statistiques
    Secteur : Services de proximité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 23
    Points : 15
    Points
    15
    Par défaut Format numérique en caractère
    Bonjour,

    Alors voila, je vous expose mon problème. J'ai des variables numériques dans ma table (en format best12.), qui peuvent parfois la valeur -2, -7 ou -9. Ce codage, dû à un export réalisé à partir d'"un autre logiciel,correspond aux valeurs suivantes :
    -7 = 'Non applicable'
    -9 = 'Non disponible'
    -2 = 'Non obtainable'

    Pour faire ça automatiquement, j'utilise le programme suivant avec des array :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    DATA &librairie..C1bis ;
      SET &librairie..C1 ;
      ARRAY var  _numeric_ ;
      DO OVER var ;
            IF var = -7 THEN var = "Non applicable" ;
    	IF var = -9 THEN var = "Non disponible" ;
    	IF var = -2 THEN var = "Non obtainable" ;
      END ;
    RUN ;
    Le problème c'est que les valeurs -2, -7 et -9 sont remplacés par des "." et non par le texte souhaité. Cela marche très bien quand il s'agit de variables caractères. Mais pour une variable numérique,j'imagine que SAS n'accepte pas de transformer une partie de mes résultats en caractères.

    Auriez vous une solution?

    Merci d'avance.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 18
    Points : 19
    Points
    19
    Par défaut
    Bonjour, le plus simple c'est de créer un format et de l'appliquer. Ou alors tu peux mettre la valeur dans une autre variable qui prendra un format alphanumérique !

  3. #3
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Points : 3 403
    Points
    3 403
    Par défaut
    Hello,
    C'est normal que tu obtiens des valeurs manquantes car tu essaies de transformer les mêmes variables numérique en caractères !!!.

    Je te propose :
    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
     
    proc contents data=&librairie..C1 out=lst_var (where=(TYPE=1) keep=name TYPE) noprint;
    run;
     
    data _null_;
    	set lst_var;
    	call symput ('nbr', _n_);
    	call symput (cats("var",_n_) , compress(name));
    run;
     
    proc format;
    	value num_char 
    		-7= 'Non applicable' 
    		-9 = 'Non disponible' 
    		-2 = 'Non obtainable' 
    	;
    run;
     
    %macro FMT;
    	%do i=1 %TO &nbr.;
    		%put &&var&i.;
    	%end;
     
    	DATA &librairie..C1bis;
    		SET &librairie..C1;
    		format
     
    			%do i=1 %TO &nbr.;
    				&&var&i.
    			%end;
     
    		num_char.;
    	run;
     
    %mend;
     
    %FMT;

  4. #4
    Membre à l'essai
    Homme Profil pro
    Chargé d'études statistiques
    Inscrit en
    Novembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'études statistiques
    Secteur : Services de proximité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Créer un format aurait été bien sur une solution mais j'applique déja des formats prédéfinis à mes variables.

    Et j'ai tellement de variables et de tables que faire ca pour chaque variable ne m'aurait pas fait gagner de temps.

    s_a_m, ta proposition marche très bien. Je me doutais bien que je ne pouvais pas transformer des variables numériques en caractères comme ca, j'avais trouvé des solutions en bidouillant mais beaucoup moins rapide que la tienne. Et ta proposition ne m’empêche pas de rappliquer un autre format derrière pour des variables catégorielles notamment.

    Merci encore.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Chargé d'études statistiques
    Inscrit en
    Novembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'études statistiques
    Secteur : Services de proximité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    En fait je viens de m'apercevoir qu'il y a un petit soucis par rapport à la façon dont je procède.

    La solution que tu m'as proposé marche parfaitement pour les variables numériques mais pour les variables catégorielles, c'est plus compliqué, je m'explique.

    Par exemple, j'ai une variable toto dans ma base qui peut prendre la valeur 'oui' ou 'non'.
    Mais, je récupère ma table sas à partir d'une export d'un autre logiciel ou ces variables sont codés 0 pour non et 1 pour oui. J'applique ensuite un format toto. (a partir de fichiers textes que mon autre logiciel crée), qui me permet d'appliquer mon format oui/non.

    Ma variable tot aura alors comme valeurs : "oui", "non" mais aussi -2, -7 ou -9
    Et par dessus j'applique la solution que tu m'as donné, mais cela écrase l'autre format et me remet les 0 et les 1.

    LA solution serait bien évidemment de rajouter -2, -7 et -9 avec leurs valeurs dans mon format mais j'ai tellement de variables et de tables différentes...

  6. #6
    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,

    A mon avis, Il faut définir un deuxième array pour la création des variables caractères, je vous propose donc cette approche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    DATA &librairie..C1bis ;
      SET &librairie..C1 ;
      ARRAY var  _numeric_ ;
      ARRAY car(1) $ 20. ccar  ;
      DO OVER var ;
        IF var = -7 THEN ccar = "Non applicable" ;
        IF var = -9 THEN ccar = "Non disponible" ;
        IF var = -2 THEN ccar = "Non obtainable" ;
      END ;
    RUN ;
    Bien cordialement

  7. #7
    Membre à l'essai
    Homme Profil pro
    Chargé d'études statistiques
    Inscrit en
    Novembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'études statistiques
    Secteur : Services de proximité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Merci de votre réponse mais cela ne fonctionne pas.

    Cela me crée une variable ccar dans ma table avec non applicable partout comme modalité.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Chargé d'études statistiques
    Inscrit en
    Novembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'études statistiques
    Secteur : Services de proximité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    La solution serait peut être d'ajouter ces modalités -2, -7, -9 à toutes les variables présentes dans ma librairie de formats, directement sous sas.
    Mais je ne sais pas comment faire.

  9. #9
    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
    Oui, ça crée une variable ccar et on peut toujours la renommer. Je suis étonné que la modalité « Non applicable » s’affiche partout sachant que chaque modalité de la variable ccar dépond de la valeur de var ???

  10. #10
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Points : 3 403
    Points
    3 403
    Par défaut
    Citation Envoyé par hossward Voir le message
    Oui, ça crée une variable ccar et on peut toujours la renommer. Je suis étonné que la modalité « Non applicable » s’affiche partout sachant que chaque modalité de la variable ccar dépond de la valeur de var ???
    C'est normal, qu'il crée une seule variable CCAR car dans la définition du deuxième ARRAY, t'as spécifié une dimension =1.


    @pix33, je ne suis pas sûr d'avoir compris ton besoin, je te propose une autre solution, qui consiste à appliquer 2 formats à la même variable. Mais pour celà tu sera obligé de transformer tes variables numériques en caractères.

    Exemple avec la table SASHELP.CLASS.
    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
     
    proc contents DATA=sashelp.class out=lst_var (WHERE=(TYPE=1) keep=name TYPE) noprint;
    run;
     
    DATA _null_;
    	SET lst_var;
    	call symput ('nbr', _n_);
    	call symput (cats("var",_n_) , compress(name));
    run;
     
    proc format;
    	value num_char 
    		12 = 'Non applicable' 
    		14 = 'Non disponible' 
    		16 = 'Non obtainable' 
    	;
    run;
     
    proc format;
    	value $fmt 
    		'            13'= 'Non' 
    		'            15'= 'oui' 
    		other=[$num_char.]
    	;
    run;
     
    %macro FMT;
    	%do i=1 %TO &nbr.;
    		%put &&var&i.;
    	%end;
     
    	DATA class;
    		SET sashelp.class;
     
    		%do i=1 %TO &nbr.;
    			&&var&i..tmp= PUT (&&var&i, num_char.);
    			DROP &&var&i;
    			format &&var&i..tmp fmt.;
    			RENAME &&var&i..tmp=&&var&i;
    		%end;
    	run;
     
    %mend;
     
    %FMT;

  11. #11
    Membre à l'essai
    Homme Profil pro
    Chargé d'études statistiques
    Inscrit en
    Novembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'études statistiques
    Secteur : Services de proximité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Je comprends mais pourtant la variable créée (ccar) a bien la même modalité pour chaque ligne.

    Et dans l'idéal j'aurai aimé que cela remplace ma variable existante, et non me créée une nouvelle variable à renommer ensuite. Enfin si bien sur c'est possible

  12. #12
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Points : 3 403
    Points
    3 403
    Par défaut
    Petite coquille dans mon programme ci-dessus corrigée.

  13. #13
    Membre à l'essai
    Homme Profil pro
    Chargé d'études statistiques
    Inscrit en
    Novembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'études statistiques
    Secteur : Services de proximité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Merci SAM, c'est parfait.

    Ça marche très bien!!!

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

Discussions similaires

  1. [DATA] Format : passage de caractères à numériques
    Par logiclogic dans le forum SAS Base
    Réponses: 6
    Dernier message: 09/06/2013, 12h15
  2. [DATA] Transformer colonne numérique formatée en colonne caractère
    Par yedid dans le forum SAS Base
    Réponses: 1
    Dernier message: 23/04/2013, 15h06
  3. Conversion format numérique/caractère
    Par Laverdure_mt dans le forum Access
    Réponses: 1
    Dernier message: 16/08/2006, 15h49
  4. Format numérique
    Par _developpeur_ dans le forum Access
    Réponses: 7
    Dernier message: 04/01/2006, 12h19
  5. Réponses: 2
    Dernier message: 21/06/2005, 17h37

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