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/01/2012, 10h18   #1
Invité régulier
 
Inscription : avril 2004
Messages : 56
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 56
Points : 7
Points : 7
Par défaut Décalage entre index de la table et les données

BOnjour,

Voilà la chronologie de mon problème :

J'ai copié juste les données d'une table indexée d'une librairie de production unix vers une librairie de developpement, en passant par une commande unix "cp".

Sur cette copie de developpement, j'ai fait une proc sql pour y faire un delete d'une ligne.

Suite à ce delete , je fais une proc dataset pour recréer l'index dessus.
Or l'index regénéré ne semble pas bon , car quand je fais un select sur la table en prenant firstobs= total des lignes de la table +1 , il me renvoie une ligne alors qu'il ne devrait pas.il y a toujours autant de ligne dans l'index qu'avant mon delete ,on dirait.
J'ai essayé l'option repair , et aussi modify table create index mais rien n'y fait.

Comment récupérer un bon index ?
Sachant que la table initiale de production et son index , je ne l'ai plus. Je n'ai que la copie des données dans une table de developpement....

Merci d'avance à celui qui me sortira de cette impasse...!!
silversatch62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 10h39   #2
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 012
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 012
Points : 1 717
Points : 1 717
Hello;
je ne suis pas sûre d'avoir tout compris. Mais l'index ne fais qu'optimiser les traitements rien de plus , enfin d'après mes connaissances.
les index sont stockés dans des fichiers à part ".SAS7BNDX".
le mieux c'est de passer par la proc copy avec index=yes;comme sa t'es sûre que SAS prendra les tables et els index. ( Puis pas de panique la proc copy ne lie pas les données ( elle les remonte pas en mémoire) contrairement à l'étape DATA,PROC SQL,...).


Maintenant ton problème de selection, je ne comprends pas bien. peux-tu poster ton code?
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 10h46   #3
Membre expérimenté
 
Inscription : avril 2009
Messages : 538
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 538
Points : 541
Points : 541
Les observations deletées ne sont pas supprimées!

Si tu fais une proc contents tu verra le nombre d'observations physiques n'est pas celui du nombre d'observations logiques.

X
xav2229 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 11h37   #4
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 012
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 012
Points : 1 717
Points : 1 717
j'ai fais ce test d'après ce que j'ai compris bien sûre :

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
 
 
libname rep "~/s_a_m/test ";
libname rep1 "~/s_a_m/test/test1";
 
proc sql;
CREATE TABLE rep.test AS SELECT * FROM sashelp.class;
CREATE INDEX name ON rep.test (name);
quit;
 
/*  copier  via Shell de la table rep.test  vers "~/s_a_m/test/test1 */
 
DATA rep1.test;
SET rep1.test;
IF _n_=19 then DELETE;  /*suppression de la dernière OBS de la table */
run;
 
/* recréation de l'INDEX*/
proc sql;
CREATE INDEX name ON rep1.test (name);
 
quit;
 
 
DATA test2;
SET rep1.test (firstobs=19); 
run;

résultat de la log :

Code :
AVERTISSEMENT: OPTION FIRSTOBS > nombre d'observations dans REP1.TEST.

Code :
1
2
3
4
 
proc contents DATA=test2  ;run;
 
proc contents DATA=rep.test  ;run;
vérification avec la proc contents et les résultats sont OK.
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 14h30   #5
Membre Expert
 
Inscription : mars 2005
Messages : 1 011
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 011
Points : 1 259
Points : 1 259
Envoyer un message via Yahoo à bahraoui
ce problème a déjà été traité auparavant.
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 14h35   #6
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 012
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 012
Points : 1 717
Points : 1 717
@ bahraoui : tu parles de ce topic?
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h19.


 
 
 
 
Partenaires

Hébergement Web