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 14/12/2011, 11h06   #1
Invité régulier
 
Inscription : février 2009
Messages : 16
Détails du profil
Informations personnelles :
Âge : 30
Localisation : Belgique

Informations forums :
Inscription : février 2009
Messages : 16
Points : 8
Points : 8
Par défaut Erreurs sur décimales

Bonjour,

Un collègue a obtenu un résultat étrange en SAS, on l'a simplifié à l'extrême pour le réproduire mais on ne parvient pas à l'expliquer.
Code :
1
2
3
4
5
6
7
DATA EXTRA;
	DO I=0.7 TO 1.1 BY 0.1;
		IF I < 1 THEN TEXT='< 1';
		ELSE TEXT = '>= 1';
		OUTPUT;
	END;
RUN;
Avec cette étape data, il y a une erreur lorsque I = 1, le text n'est pas le bon. Si l'ont remplace 0,7 par une valeur supérieure comme 0.8 par exemple, l'erreur ne se produit plus !!

Auriez-vous une explication?

Cordialement,

Mikael
blastmind est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 11h24   #2
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
C'est une question de précision décimale. Quand SAS fait les incrémentations de son compteur de boucle, il accumule des micro-erreurs à la 12e décimale ou après. D'où l'influence du point de départ qui conditionne le nombre de passages dans la boucle.
Le conseil "officiel" de SAS est d'arrondir les quantités pour tester.
Code :
1
2
3
4
5
6
7
DATA EXTRA;
DO I=0.7 TO 1.1 BY 0.1;
IF ROUND(I,0.00001) < 1 THEN TEXT='< 1';
ELSE TEXT = '>= 1';
OUTPUT;
END;
RUN;
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/12/2011, 11h54   #3
Invité régulier
 
Inscription : février 2009
Messages : 16
Détails du profil
Informations personnelles :
Âge : 30
Localisation : Belgique

Informations forums :
Inscription : février 2009
Messages : 16
Points : 8
Points : 8
Merci pour cette explication Olivier !
blastmind est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h47.


 
 
 
 
Partenaires

Hébergement Web