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 13/12/2011, 10h54   #1
Invité
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Par défaut FORMAT + HLO='O' et LABEL='ERROR'

Bonjour tout le monde;
quelqu'un peut m'expliquer HLO='O' et LABEL='ERROE' et son usage ?
Code :
1
2
3
4
5
6
7
8
9
10
11
data le_format;
             set tab ( rename=(var1=START var2=LABEL)) end=eof;
             retain FMTNAME "formats" type 'C';
             output;
             if eof then do;
             hlo='O';
             label='ERROR';
                output;
             end;
run   ;
il me place le 'O' et 'ERROR' en dernière ligne. mais je ne comprends pas trop son usage.
  Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 11h17   #2
Membre éclairé
 
Homme
statisticien
Inscription : mai 2011
Messages : 213
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 : 213
Points : 319
Points : 319
Bonjour,

il me semble que c'est pour tenir compte des modalités non prévue dans ton format.

Par exemple si tu as une variable SEXE codé en 1 pour 'Homme' et 2 pour 'Femme'

Dans Tab tu aura sans doute fait en sorte que 1 corresponde à 'Homme' et 2 à 'Femme'.

Si il rencontre 3 il va mettre 'ERROR' dans ta variable au lieu de laisser 3 dans le cadre d'un format normal où les modalité non prévues sont laissées telle quelle.

Celà correspond à 'OTHER' dans les formats 'manuels'

Enfin j'espère être clair dans mon explication...
jerome_pdv2 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/12/2011, 11h30   #3
Invité
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Bonjour jérome;
merci pour ta réponse, malheureusement , je viens de faire ce test et le résultat ne correspond pas à ce que tu m'as expliqué.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
DATA test;
format fm $5.;
SET sashelp.class;
IF sex='M' then fm='1';else fm='2';
IF _n_ =19 then sex='A';
run;
 
DATA le_format (keep=start label hlo) ;
             SET test(    RENAME=(sex=START fm=LABEL)) end=eof;
             retain FMTNAME "formats" type 'C';
             output;
             IF eof then do;
             hlo='O';
             label='ERROR';
                output;
             end;
run   ;
  Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 12h29   #4
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
Bonjour Julie.
L'analyse de Jérôme est la bonne : HLO=O indique que tu es sur l'équivalent d'un OTHER dans une proc FORMAT. Ca permet de faire un cas "ramasse-miettes" qui correspond à toutes les situations non traitées explicitement.
La table en entrée de ton étape DATA ne contient pas des données brutes (pas comme ton dernier exemple), mais le codage avec (je reste sur l'exemple sexe) :
1 ligne pour 1=Homme
1 ligne pour 2=Femme
Ce que rajoute ton étape DATA, c'est une 3e ligne pour autres=Erreur.
La table produite par l'étape DATA ne sera pas plaquée non plus directement sur les données : elle servira en entrée d'une proc FORMAT CNTLIN. C'est à dire que le contenu de la table remplacera une instruction VALUE.
Au lieu d'écrire
Code :
1
2
3
4
5
6
7
PROC FORMAT ;
VALUE $sexe
"F" = "Filles"
"M" = "Garçons"
OTHER = "Erreur"
;
RUN ;
on créera à partir d'une table des codes possibles l'équivalent.
J'espère que c'est plus clair ???
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 13/12/2011, 13h35   #5
Membre éclairé
 
Homme
statisticien
Inscription : mai 2011
Messages : 213
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 : 213
Points : 319
Points : 319
Citation:
Envoyé par rosesansepines Voir le message
Bonjour jérome;
merci pour ta réponse, malheureusement , je viens de faire ce test et le résultat ne correspond pas à ce que tu m'as expliqué.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
DATA test;
format fm $5.;
SET sashelp.class;
IF sex='M' then fm='1';else fm='2';
IF _n_ =19 then sex='A';
run;
 
DATA le_format (keep=start label hlo) ;
             SET test(    RENAME=(sex=START fm=LABEL)) end=eof;
             retain FMTNAME "formats" type 'C';
             output;
             IF eof then do;
             hlo='O';
             label='ERROR';
                output;
             end;
run   ;
C'est parce que le code n'est pas exactement celui-là.

Voici un code correct en reprenant ton 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
 
/* création d'un fichier d'exemple de label de la variable sexe **/
DATA tab;
var1='M';var2='Garçon';output;
var1='F';var2='Fille';output;
run;
 
 
/*** Préparation de la table de création du format ***/
DATA le_format;
             SET tab ( RENAME=(var1=START var2=LABEL)) end=eof;
             retain FMTNAME "F_SEXE" type 'C';
             output;
             IF eof then do;
             hlo='O';
             label='ERROR';
                output;
             end;
run   ;
/*** création du format ****/
proc format cntlin=le_format;run;
 
/*** exemple d'utilisation du format ***/
DATA test;
SET sashelp.class;
IF _n_ =19 then sex='A';
run;
 
proc print DATA=test;
format sex $F_sexe.;run;
jerome_pdv2 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/12/2011, 13h41   #6
Invité
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Merci pour ces brillantes explications Messieurs.
Bravo.
  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 03h21.


 
 
 
 
Partenaires

Hébergement Web