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 15/04/2011, 09h31   #1
Invité de passage
 
Inscription : décembre 2009
Messages : 117
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 117
Points : 4
Points : 4
Par défaut PB au niveau du produit de deux colonnes

Bonjour,

j'ai un probleme avec une de mes tables: c'est en multiplant une colonnne par une autre que des fois ça ne calcule pas, ça me mets juste un point!!.
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
31
32
33
34
35
36
37
38
39
40
DATA fluxmig(keep= COMMUNE DCRAN IPONDI);
INFILE 'C:\Users\Fouzy CHBOUKI\Desktop\OBSERVATOIRE\FD_MIGCOM_2007.txt' dlm=';';
input COMMUNE $ ARM $ DCRAN $ ACHLR $ AGEMEN8 $ AGEREVQ $ ANEMEC $ CS1 $ CSM $ DIPL $ DNAI $ INAI $ INATC $ IPONDI $  IRAN $ IRANUU $ LPRM $ METRODOM $ MOCO $ NA5 $ NPERR $ SEXE $ STOCD $ TACT $ TACTM $ TYPL $ TYPMR $;
 
run;
 
DATA sortie;
SET fluxmig(WHERE=(COMMUNE>='63000' AND COMMUNE<='63473'));
run;
 
proc sql; 
 CREATE TABLE agreg_commune AS
 SELECT COMMUNE,count(*) AS NB_individu
 FROM sortie  GROUP BY commune;
quit;
/* nb d'individu avec les differents poids*/
proc sql; 
 CREATE TABLE agreg_commune_poids AS
 SELECT COMMUNE, IPONDI,count(*) AS NB_individu
 FROM sortie  GROUP BY commune, IPONDI;
quit;
 
/*Nb de migrants pour chaque commune selon la commune de provenance*/
proc sql;
CREATE TABLE arrivant_comm AS
SELECT DISTINCT COMMUNE,DCRAN,count(*) AS MIGRANTS
FROM sortie GROUP BY COMMUNE, DCRAN;
quit;
 
/*Nb de migrants pr chaque commune et leurs poids selon chaque commune de provenance*/
proc sql;
CREATE TABLE arrivant_comm_poids AS
SELECT DISTINCT COMMUNE,DCRAN,IPONDI,count(*) AS MIGRANTS, 
FROM sortie GROUP BY COMMUNE, DCRAN,IPONDI;
quit;
 
DATA toto;
SET arrivant_comm_poids;
flux= MIGRANTS *  IPONDI;
RUN;
voilà à quoi ressemble ma table J

merci beaucoup pour votre aide
debutsas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 09h55   #2
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Bonjour,
Visiblement ta variable IPONDI est de type caractère (alignée à gauche), tu peux donc pas faire des opérations là dessus. Je te propose de la convertir en numérique comme suit.

Code :
1
2
3
4
DATA toto;
SET arrivant_comm_poids;
flux= MIGRANTS *  input(IPONDI,best.);
RUN;
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 10h01   #3
Invité de passage
 
Inscription : décembre 2009
Messages : 117
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 117
Points : 4
Points : 4
j'ai essayé mais les cases ou le IPONDI est un chiffre avec une virgule ça ne marche pas!!
debutsas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 10h04   #4
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Comment ça, ça ne marche pas? c'est quoi les case?

Code :
1
2
3
4
5
6
7
8
9
10
11
DATA test;
input IPONDI $ migrant;
cards;
1.025 1
0.014 3
;
run;
DATA test;
SET test;
flux=input(IPONDI,best.)*migrant;
run;
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 10h08   #5
Invité de passage
 
Inscription : décembre 2009
Messages : 117
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 117
Points : 4
Points : 4
pardon je me suis pas mal exprimée;
je voulais dire que quand IPONDI prend une valeur vaec une virgule(ex 4,1234565) il ne fait pas le calcule!
debutsas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 10h12   #6
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
J'avais pas fait gaffe que c'était des virgules au lieu des points, ça doit marcher ça

Code :
flux=input(tranwrd(IPONDI,",",".")),best.)*migrant;
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 10h13   #7
Membre Expert
 
Inscription : mars 2005
Messages : 1 010
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 010
Points : 1 258
Points : 1 258
Envoyer un message via Yahoo à bahraoui
tu peux utiliser le format numx pour les virgules

http://support.sas.com/documentation...a000194648.htm
__________________
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 15/04/2011, 10h18   #8
Invité de passage
 
Inscription : décembre 2009
Messages : 117
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 117
Points : 4
Points : 4
Citation:
Envoyé par MEGAMIND2 Voir le message
J'avais pas fait gaffe que c'etait des virgules au lieu des points, ça doit marcher ça

Code :
flux=input(tranwrd(IPONDI,",",".")),best.)*migrant;
i n'y aurais pas une erreur ??
pk ",","." ?
debutsas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 10h19   #9
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Citation:
Envoyé par bahraoui Voir le message
tu peux utiliser le format numx pour les virgules

http://support.sas.com/documentation...a000194648.htm
Avec la proposition de barahoui, ça donne ça

Code :
flux=input(IPONDI,numx10.6)*migrant;
à toi de choisir
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 10h25   #10
Invité de passage
 
Inscription : décembre 2009
Messages : 117
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 117
Points : 4
Points : 4
j'ai essayé la solution de bahraoui
mais ça marche toujours pas!!!!
il n'y aurais pas un pb dés le début lors de l'importation de ma table.
j'ai mis le code au tout début de ma discussion si vous voulez regarder.
debutsas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 10h28   #11
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Tu peux posté quelques lignes de ton fichier? C'est juste un problème de format
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 10h46   #12
Invité de passage
 
Inscription : décembre 2009
Messages : 117
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 117
Points : 4
Points : 4
le fichier est trés lourd, j'avais essayer de la poster mais ça marche pas.
voici un exemple de comment il est construit:


01001;zzzzzz;01001;4;65;070; 4;7;7;13;69;2;1;3,9669680557714 ...
c'est le chiffre que j'ai souligé qui correspond au poid
la longeur maximale est de 17
debutsas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 10h46   #13
Invité de passage
 
Inscription : décembre 2009
Messages : 117
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 117
Points : 4
Points : 4
poids= IPANDI
debutsas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 10h48   #14
Membre Expert
 
Inscription : mars 2005
Messages : 1 010
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 010
Points : 1 258
Points : 1 258
Envoyer un message via Yahoo à bahraoui
Citation:
Envoyé par debutsas Voir le message
j'ai essayé la solution de bahraoui
mais ça marche toujours pas!!!!
il n'y aurais pas un pb dés le début lors de l'importation de ma table.
j'ai mis le code au tout début de ma discussion si vous voulez regarder.
L'ideal c'est d'importer les variables avec le bon type. ça t'évitera de faire des convertion en trop (temps de traitement, complexité du code....)
__________________
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 15/04/2011, 10h49   #15
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
Oui c'est bien un souci à l'import.
Quand tu mets un $ après le nom d'une variable dans INPUT, c'est pour dire que ce sont des données texte (par défaut sur 8 caractères). Autant ça fonctionne bien pour tes codes communes, autant il y a des données numériques qui ne sont pas bien importées.
Brice et Salah t'ont proposé des solutions pour corriger le tir a posteriori, mais je pense qu'il vaudrait mieux soigner l'INPUT.
Les règles sont simples :Ca devrait déjà améliorer un peu les caractéristiques de ta table SAS et faciliter les calculs.
Bon courage.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 10h52   #16
Invité de passage
 
Inscription : décembre 2009
Messages : 117
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 117
Points : 4
Points : 4
Merci pour ces explications.
c'est ce que je vais faire.
réimporter ma table en respectant les bon formats.
Merci
debutsas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 10h56   #17
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Citation:
Envoyé par debutsas Voir le message
poids= IPANDI
Je t'ai pas dit de poster tout le fichier, juste quelques lignes
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 11h00   #18
Invité de passage
 
Inscription : décembre 2009
Messages : 117
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 117
Points : 4
Points : 4
c qu'est le fichier est lourd du coup je n'arrive pas à l'ouvrir avec aucun éditeur pour en copier quelques lignes!
debutsas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 11h06   #19
Invité de passage
 
Inscription : décembre 2009
Messages : 117
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 117
Points : 4
Points : 4
j'ai réimporter ma table.
j'ai un petit soucis c'est qu'il ne me prends pas tous les chiffre aprés la virgule!!
au lieu de 3,96699680557714 j'ai eu ,9669968055 !!
est ce que je peux mettre NUMX 17 ??
debutsas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 11h18   #20
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Citation:
Envoyé par debutsas Voir le message
j'ai réimporter ma table.
j'ai un petit soucis c'est qu'il ne me prends pas tous les chiffre aprés la virgule!!
au lieu de 3,96699680557714 j'ai eu ,9669968055 !!
est ce que je peux mettre NUMX 17 ??
Essaies numx20.11, 10 chiffres après la virgule peut suffir je pense
MEGAMIND2 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 03h06.


 
 
 
 
Partenaires

Hébergement Web