Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > Débutez
Débutez Forum concentrant les premières questions que l'on se pose en tant que débutant
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 15/07/2011, 12h24   #1
Membre régulier
 
Homme Olivier Caelen
Inscription : août 2007
Messages : 68
Détails du profil
Informations personnelles :
Nom : Homme Olivier Caelen
Localisation : Belgique

Informations forums :
Inscription : août 2007
Messages : 68
Points : 81
Points : 81
Par défaut Numérique -> caractère (et les valeurs manquantes)

Bonjour,
J’ai un p’tit problème:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DATA ttt1;
	input col1 ;
	datalines;
	1 
	1 
	2 
	. 
	3 
	.
	4
	;
run;
 
DATA ttt2;
	SET ttt1;
 
	col2 = put(col1,BEST12.);
run;
ttt1 est un tableau avec une colonne de type numériques et certaines valeurs sont non disponible (et ont donc la valeur ‘.’).
Avec la commande PUT, je convertis ensuite dans ttt2 les valeurs de ce tableau en caractère. Le problème est le suivant : le symbole ‘.’ a comme signification ‘valeur non disponible’ et lors de la conversion, symbole ‘.’ devrait donc logiquement devenir ‘ ’ (un espace blanc)... et ce n’est pas le cas.
Lors de la conversion, SAS utilise par erreur le symbole ‘.’ et non la sémantique de ce symbole.
Pourriez-vous svp m’aider ? Je n’utilise peut-être pas la bonne fonction... ou je l'utilise d'une mauvaise manière
Je pourrais aussi faire un simple petit data step pour changer les ‘.’ en ‘ ’ mais bon… ce n’est pas très propre.
Merci!
hoccha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 12h31   #2
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
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 006
Points : 1 703
Points : 1 703
Citation:
Envoyé par hoccha Voir le message
devrait donc logiquement devenir ‘ ’ (un espace blanc)... et ce n’est pas le cas.
hello,
non sa ne devient pas un espace, elle reste tjr une valeur non renseignée.
car "espace" <> de "non renseignée".
Mais en quoi sa te dérange les valeurs non renseignées? car ici sas fait bien le travail qu'on lui demande , les valeurs numérique manquantes deviennent des valeurs caractère manquantes.
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 12h38   #3
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
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 006
Points : 1 703
Points : 1 703
Je rajoutes, en 9.2 ( à vérifier avec la 9.1) la fonction missing traite de la même façon les blancs "valeurs non manquantes" et "les valeurs manquantes".
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 12h44   #4
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
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 006
Points : 1 703
Points : 1 703
maintenant pour gérer les valeurs manquantes il faut rajouter cette option:
Code :
1
2
 
OPTION missing='';
Exemple :
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
25
26
27
28
29
30
31
32
33
 
 
OPTION missing ='';
DATA ttt1;
 
   input col1 ;
	datalines;
	1 
	1 
	2 
	.  
	3 
	. 
	4
	;
run;
 
 
proc sql;
 
CREATE TABLE a AS SELECT * FROM ttt1 WHERE col1 IS missing;
quit;
DATA ttt2;
	SET ttt1;
 
	col2 = put(col1,best12.);
run;
 
 
proc sql;
 
CREATE TABLE b AS SELECT * FROM ttt2 WHERE col2 IS missing;
quit;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/07/2011, 13h20   #5
Membre régulier
 
Homme Olivier Caelen
Inscription : août 2007
Messages : 68
Détails du profil
Informations personnelles :
Nom : Homme Olivier Caelen
Localisation : Belgique

Informations forums :
Inscription : août 2007
Messages : 68
Points : 81
Points : 81
Salut,

Merci ! Je ne connaissais pas cette fonction missing et je confirme qu’avec cette fonction ça fonctionne très bien (je suis sur sas 9.2).

Désolé, je suis nouvelle utilisateur de SAS et mes questions sont donc peut-être naïves.

Mias je crois que dans mon cas, il y a alors un autre problème...
Je dois modifier une petite partie d’un très grand programme qui tourne 24/24 et 7/7 ... Bon soit... je ne veux pas trop le faire planter
Pour que ta solution fonctionne, il faut modifier les options du programme mais je ne peux pas modifier ces options sous peine de provoquer des effets de bord qui risque de rendre le programme instable. pour ce cas, y-a-t'il une autre solution?
hoccha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 13h28   #6
Membre régulier
 
Homme Olivier Caelen
Inscription : août 2007
Messages : 68
Détails du profil
Informations personnelles :
Nom : Homme Olivier Caelen
Localisation : Belgique

Informations forums :
Inscription : août 2007
Messages : 68
Points : 81
Points : 81
J'ai un petit code pour illuster mon problème:

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
25
26
27
28
29
30
31
DATA ttt1;
	input col1 ;
	datalines;
	1 
	1 
	2 
	. 
	3 
	.
	4
	;
run;
 
 
DATA ttt2;
	SET ttt1;
 
	col2 = put(col1,BEST12.);
run;
 
/*OK, il affiche bien les numeros des ligne 4 et 6*/
DATA _null_;
	SET ttt2;
	IF missing (col1)  then put _N_;
run;
 
/*PROBLEME, il n'affiche pas de numeros de ligne si je n'ajout pas OPTION missing='';*/
DATA _null_;
	SET ttt2;
	IF missing (col2)  then put _N_;
run;
Ce code fonctionne si l'option missing est activée si non il ne fonctionne pas.
hoccha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 14h02   #7
Membre du Club
 
Homme Fabien
Inscription : novembre 2008
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Localisation : France

Informations forums :
Inscription : novembre 2008
Messages : 59
Points : 56
Points : 56
Salut,

Essai en ajoutant cela :
col2 = compress(put(col1,BEST12.),'.');

Suistrop
suistrop est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/07/2011, 14h22   #8
Membre régulier
 
Homme Olivier Caelen
Inscription : août 2007
Messages : 68
Détails du profil
Informations personnelles :
Nom : Homme Olivier Caelen
Localisation : Belgique

Informations forums :
Inscription : août 2007
Messages : 68
Points : 81
Points : 81
ça fonctionne.
Ah ben super merci à vous deux !
hoccha est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h04.


 
 
 
 
Partenaires

Hébergement Web