Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS Base
SAS Base Forum d'entraide sur SAS base : étape data, procédures non statistiques, procédures non graphiques, SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/01/2012, 15h59   #1
Invité régulier
 
Inscription : mars 2011
Messages : 41
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 41
Points : 5
Points : 5
Par défaut Convertion de 300 variables caractère en numérique

Bonjour,

Tout ou presque est dans le titre... je viens d'importer via les procédures import et transpose 200 questionnaires réalisés sous excel 2003. Or, toutes les variables sont en caractère (85% d'entre elles étaient pourtant en numérique sous excel!). Ainsi afin de pouvoir utiliser la procédure MEANS, je dois convertir environ 300 variables caractère en numérique.

Avez-vous une solution?

Je vous remercie.

Cordialement,

ratm13.
ratm13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 16h28   #2
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 012
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

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

Informations forums :
Inscription : février 2011
Messages : 1 012
Points : 1 717
Points : 1 717
Hello;
la réponse est ICI.
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 16h36   #3
Invité régulier
 
Inscription : mars 2011
Messages : 41
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 41
Points : 5
Points : 5
Je débute en SAS.

Cette personne désirait convertir des variables numérique en caractère, moi c'est l'inverse. Que dois-je modifier dans ces programmes?

Et merci pour ta réponse SAM
ratm13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 16h41   #4
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 012
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

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

Informations forums :
Inscription : février 2011
Messages : 1 012
Points : 1 717
Points : 1 717
OK !!

deux petites choses CHAR au lieu de NUM et INPUT au lieu de PUT ( /*ICI*/)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
 
DATA test;
SET sashelp.class;
run;
 
%macro to_char;
 
proc sql noprint;
   SELECT name, '_'!!name ,max (monotonic()) INTO: old_var separated BY ',',: new_var separated BY ','  ,: nbr 
   FROM dictionary.COLUMNS WHERE upcase(libname)='WORK' AND upcase(memname)='TEST' AND upcase(type)='CHAR'/*ICI*/;
quit;
 
DATA new       ( DROP  =  %do i=1 %TO &nbr. ; %scan("&new_var",&i,",") %end;);
 
SET test (  RENAME=( %do i=1 %TO &nbr. ; %scan("&old_var",&i,",")=%scan("&new_var",&i,",") %end; )  );
 
      %do i=1 %TO &nbr.;
         %scan("&old_var",&i,",")=/*ICI*/input(%scan("&new_var",&i,","), best.);
      %end;
run;
%mend;
 
%to_char;
Remplace sashelp.class par le nom de ta table .
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 16h56   #5
Invité régulier
 
Inscription : mars 2011
Messages : 41
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 41
Points : 5
Points : 5
Merci SAM. Alors après avoir fait tourner le programme, toutes les variables ont été convertis en numérique. Le problème c'est que mes 15% de variables caractère (que je veux laisser en caractère) ont été remplacées par un "." .

Je suppose que l'ont peut intégrer dans le programme la condition "si la variable est en lettre alors la laissé en caractère".

(ex: le nom, l'adresse mail...). Est-ce possible?
ratm13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 17h46   #6
Invité régulier
 
Inscription : mars 2011
Messages : 41
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 41
Points : 5
Points : 5
J'ai parcouru pas mal le forum. Le souci vient du fait que lors de mon import SAS a importé toutes mes variables en caractère à partir d'excel. Cette procédure dispose t-elle d'une option permettant de faire la différence?

L'option mixed est pourtant sur YES.
ratm13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 22h36   #7
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 012
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

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

Informations forums :
Inscription : février 2011
Messages : 1 012
Points : 1 717
Points : 1 717
La proc import génère une étape data + infile dans la log,
Tu copie collé dans ton programme. Comme sa tu n as pas a taper toutes tes variables à la main.
Tu peux aussi rajouter des conditions dans le programme précédent pour vérifier s il existe des caractère hors ('0'-'9', '.') pour répéter les variables non numérique et les exclure de la transformation char à num.
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 07h37   #8
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 828
Points : 2 828
Tu peux aussi jouer sur l'option GUESSINGROWS dans la proc IMPORT : c'est le nombre de lignes sur lesquelles SAS se base pour déterminer si une colonne est de type numérique ou caractère. Avec MIXED=YES, dans le doute il crée du texte. Donc il est important de lever au maximum les doutes, avec GUESSINGROWS=1000 par exemple.
Bon courage.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 11h00   #9
Invité régulier
 
Inscription : mars 2011
Messages : 41
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 41
Points : 5
Points : 5
bonjour,

L'option GUESSINGROWS=1000 ne fonctionne pas sur ma version apparemment et même en remplaçant EXCEL REPLACE par XLS REPLACE, rien n'y fait.

Sam, bien que ta réponse soit précise, je ne comprends pas les éléments à modifier. Je ne vois pas comment rajouter des conditions dans mon programme... désolé ne maîtrise pas du tout les macros. Aussi je ne vois pas ou copier les éléments du infile.

Merci pour vos réponses.
ratm13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 11h13   #10
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 012
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

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

Informations forums :
Inscription : février 2011
Messages : 1 012
Points : 1 717
Points : 1 717
Citation:
Envoyé par ratm13 Voir le message
bonjour,

L'option GUESSINGROWS=1000 ne fonctionne pas sur ma version apparemment et même en remplaçant EXCEL REPLACE par XLS REPLACE, rien n'y fait..
quelle est ta version SAS?

Citation:
Envoyé par ratm13 Voir le message
Sam, bien que ta réponse soit précise, je ne comprends pas les éléments à modifier. Je ne vois pas comment rajouter des conditions dans mon programme... désolé ne maîtrise pas du tout les macros..
Les variables numeriques ne doivent contenir que cette liste ('0','1','2','3','4','5','6','7','8','9','.') et je parle Bien de l'environnement Windows car par exemple pour les zones numerique packées coté GROS SYSTEME c'est toute une autre hisoitre...Bref).
pour dire qu'une variable n'est pas numerique ( celle que tu veux exclure de l'input ) il suffit que cette variable contient un CARACTèRE hors la liste précédente.
Citation:
Envoyé par ratm13 Voir le message
Aussi je ne vois pas ou copier les éléments du infile.
.
Quand tu execute une proc import ; sas génére une étape DATA dans la log tu peux la copier et modifier les informats ( à la main) .
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 11h49   #11
Invité régulier
 
Inscription : mars 2011
Messages : 41
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 41
Points : 5
Points : 5
ma version de SAS est la 9.1.

Sam, j'ai compris pour le infile, mais après je ne vois pas comment modifier pour chaque le format. Je dois réaliser un programme de ce genre?
Code :
1
2
3
4
5
 
DATA test_change_type2(DROP=new_eff2);
   SET test_change_type(RENAME=(eff2=new_eff2));
   eff2=input(new_eff2,2.);
run;
J'ai 300 variables, ça sera long non?

Sinon pour la macro je comprend ce que tu veux dire mais je n'arrive pas à l'exprimer en langage SAS... !!

Merci pour ta patience..
ratm13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 11h54   #12
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 957
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 957
Points : 1 368
Points : 1 368
Bonjour,
Il faudrait appliquer la macro que sur des variables caractères (ie seulement que les 300). Pour cela, il faut passer : 1° par une proc contents, 2° sélectionner des variables caractères (type=2), 3° appliquer la macro, 4° fusionner avec l'autre partie de la table qui ne contient que des variables numériques.

Bon courage!
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 19/01/2012, 15h44   #13
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 012
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

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

Informations forums :
Inscription : février 2011
Messages : 1 012
Points : 1 717
Points : 1 717
Pas aussi simple que sa Brice car si j'ai bien compris , ratm13 cherche à determiner quelles sont les variables à ne pas convertir.

@ratm13 tu peux joindre ta log après la execution de la proc import?
ou connais tu l'ordre des variables à ne pas convertir en numérique?
genre de la 6 éme à la 27 éme ?
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h40.


 
 
 
 
Partenaires

Hébergement Web