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 21/09/2011, 10h46   #1
Invité de passage
 
Inscription : février 2005
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12
Points : 3
Points : 3
Par défaut Tester les techniques de hashage

Bonjour !

J'ai voulu tester les techniques de hashage, mais SAS me renvoie le message d'erreur suivant (ça "coince" à la ligne du DefineDone):

Code :
1
2
3
4
WARNING: Unrecognized OR missing argument tag at line 375 COLUMN 29.
ERROR: Type mismatch FOR DATA variable x at line 378 COLUMN 9.
ERROR: Hash DATA SET LOAD failed at line 378 COLUMN 9.
ERROR: DATA STEP Component Object failure.  Aborted during the EXECUTION phase.
J'ai pourtant vérifié le type de la variable x. C'est une variable indubitablement à 100% de type caractère (y est numérique). Le Warning est relatif à l'option DUPLICATE, je suppose ??

Le code ressemble à ceci :
Code :
1
2
3
4
5
6
7
8
9
10
11
DATA grosse (DROP=res);
       IF _N_=1 THEN DO ;
          DECLARE HASH petite (DATASET:"ma_table", DUPLICATE:"R") ;
          petite.DEFINEKEY("id") ;
          petite.DEFINEDATA("x","y") ;
          petite.DEFINEDONE() ;
          call missing(x,y);
       END ;
SET grosse;
res=petite.find() ; 
RUN ;
Merci d'avance à toute aide !
jlp65 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2011, 13h22   #2
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 145
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 145
Points : 1 763
Points : 1 763
C'est vrai, c'est pas evident de decoder les warning et les erreurs quand on utilise des tables de hachage.

C'est souvent des erreurs assez simple; le principe a des similitudes avec le merge "classique" d'une etape data.

http://www.nesug.org/proceedings/nesug07/bb/bb16.pdf

est un bon papier. En copiant collant le code et en l'appliquant a ton probleme ca devrait couler de source.

tu as egalement celui de notre star locale:

http://www.od-datamining.com/index.htm

Bon courage,

Manoutz
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 21/09/2011, 16h39   #3
Invité de passage
 
Inscription : février 2005
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12
Points : 3
Points : 3
Merci (ça va me faire de la lecture, tout ça ! )
jlp65 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 06h40   #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.
J'ai reproduit ton erreur avec l'exemple ci-dessous : il y a AUSSI une colonne X dans la grosse table, qui elle est numérique. Du coup, dans sa mémoire, SAS ne sait pas sur quel pied danser : prendre le numérique qui vient de la grosse table (prioritaire puisque le SET alimente d'abord le vecteur de travail, avant de chercher une correspondance dans la table de hash) et que faire du texte renvoyé par le hash ?
Quand au message "unrecognized argument", c'est visiblement l'attribut DUPLICATE qui passe mal. Il n'existe qu'à partir de SAS 9.2 je crois. Est-ce que c'est ta version de SAS ?
Bon courage.
Olivier
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
DATA work.petite ;
  INPUT id x $ y ;
DATALINES ;
1 a 12
2 b 10
3 h 15
;
RUN ;
DATA work.grosse ;
  DO id=-500 TO 500 ;
    x = ABS(id) ;
	OUTPUT ;
  END ;
RUN ;
DATA work.test ;
IF _N_=1 THEN DO ;
          DECLARE HASH petite (DATASET:"work.petite") ;
          petite.DEFINEKEY("id") ;
          petite.DEFINEDATA("x","y") ;
          petite.DEFINEDONE() ;
          call missing(x,y);
       END ;
SET grosse;
res=petite.find() ; 
RUN ;
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 10h02   #5
Invité de passage
 
Inscription : février 2005
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12
Points : 3
Points : 3
En fait, ma variable x ne figurait que dans la petite table. J'ai trouvé une réponse sur le site
http://www.mathkb.com/Uwe/Forum.aspx...-to-be-Numeric

Si j'ai bien compris, le premier paramètre de Call Missing est considéré par défaut comme un paramètre numérique. Il faut donc forcer le type à "caractère" par une instruction du type avant le call missing.
jlp65 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 18h57.


 
 
 
 
Partenaires

Hébergement Web