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 06/07/2011, 18h41   #1
Invité régulier
 
Inscription : juin 2011
Messages : 36
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 36
Points : 8
Points : 8
Par défaut Sélectionner les variables dont le format n'est pas reconnu

Bonjour,

J'ai une table avec plusieurs variables possédant un format personnalisé. Exemple :

Code :
1
2
3
4
5
6
7
proc format
value class
10 = "ACUI"
6 = "TERM"
2 = "FDIA"
. = .
other = "Vérifier la table";
Mon but est de sélectionner tous les enregistrements nécessitant une vérification. Jusqu'à présent je fais comme ça :

Code :
1
2
3
proc sql
SELECT * FROM TABLE
WHERE classe NOT IN (10, 6, 2, .);
Or lorsque les bibliothèque de format possibles sont très longue c'est assez long et pénible à écrire (et j'ai toujours peur d'en avoir oublié une partie !).

N'y a-t-il pas moyen de faire une sélection par les valeurs traduites par le format ? (ex : ici lui demander les enregistrement où la variable classe serait "Vérifier la table")

Autre remarque : une valeur manquante dans un champ numérique est sélectionnée quand je fais un "where <1" (il la considère sans doute comme =0) mais quand je fais un "where=0" il ne la sélectionne pas (?), comment ça se fait ?
Areis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 19h28   #2
Membre éclairé
 
Homme
statisticien
Inscription : mai 2011
Messages : 212
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : statisticien
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : mai 2011
Messages : 212
Points : 319
Points : 319
Bonsoir

Il s'agit de l'instruction PUT

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
 
proc format ;
value class
10 = "ACUI"
6 = "TERM"
2 = "FDIA"
. = .
other = "Vérifier la table";
run;
 
DATA TABLE;
input var nom $10.;
cards;
1 PIERRE
2 PAUL
3 JACQUES
4 BIJOU
5 CAILLOU
6 CHOU
7 GENOU
8 HIBOU
9 JOUJOU
10 FIN
;
run;
 
proc sql;
SELECT * FROM TABLE
WHERE put(var,class.)='Vérifier la table';quit;
Code :
1
2
3
4
5
6
7
8
9
10
 
                                            var  nom
                                       ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
                                              1  PIERRE
                                              3  JACQUES
                                              4  BIJOU
                                              5  CAILLOU
                                              7  GENOU
                                              8  HIBOU
                                              9  JOUJOU
Concernant la valeur manquante, je ne vois pas pourquoi elle serait sélectionnée si tu met explicitement =0 , une valeur manquante n'est pas forcément un 0.

Pour le reste il s'agit d'une convention SAS.
jerome_pdv2 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/07/2011, 20h24   #3
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 823
Points : 2 823
Petite précision : la valeur manquante numérique de SAS est stockée comme moins l'infini. Elle est donc inférieure à tout autre nombre.
Sinon, effectivement Jérôme a raison, c'est une fonction PUT qu'il faut utiliser.
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 22h20   #4
Invité régulier
 
Inscription : juin 2011
Messages : 36
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 36
Points : 8
Points : 8
Yes, impeccable

Merci bien !

Maintenant, corollaire :

Une fois que j'ai identifié les enregistrements avec mes variables posant problème, comment puis-je savoir quelle sont précisément les valeurs initiales non reconnues par mon format ? (puisque en aperçu mes tables affichent fatalement toujours "Vérifier la table")
Areis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 07h26   #5
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 823
Points : 2 823
Hé bien il suffit d'éliminer les formats pour retrouver les valeurs telles qu'elles sont stockées.
Dans une proc DATASETS...MODIFY ou une étape DATA, tu fais
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 11h11   #6
Invité régulier
 
Inscription : juin 2011
Messages : 36
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 36
Points : 8
Points : 8
Citation:
Envoyé par olivier.decourt Voir le message
Hé bien il suffit d'éliminer les formats pour retrouver les valeurs telles qu'elles sont stockées.
Dans une proc DATASETS...MODIFY ou une étape DATA, tu fais
Ah ben oui... ok merci beaucoup pour ton aide
Areis 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 21h37.


 
 
 
 
Partenaires

Hébergement Web