Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > Macro
Macro Forum d'entraide sur le langage Macro de SAS
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 10/09/2008, 12h20   #1
Invité de passage
 
Inscription : septembre 2008
Messages : 5
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 5
Points : 1
Points : 1
Par défaut [Macro] Calcul de pourcentage sur table

Bonjour,

par une proc SQL, j'ai obtenu 2 tables avec:
table1: un nombre d'observaion X1 et un montant Y1.
table2: un nombre d'observation X2 et un montant Y2.

je souhaiterai calculer les % X1/X2 et Y1/Y2.

y'a t-il moyen de faire ça sous sas9 ou guide.

merci.

Ines
Ines2013 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2008, 16h17   #2
Membre Expert
 
Inscription : mars 2005
Messages : 1 028
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 028
Points : 1 278
Points : 1 278
Envoyer un message via Yahoo à bahraoui
Code :
1
2
3
4
5
6
7
8
9
10
11
 
DATA t1;
x1=8; y1=8;
run;
DATA t2;
x2=4; y2=4;
run;
DATA t; SET t1; SET t2; 
x=x1/x2;
y=y1/y2;
run;
__________________
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 11/09/2008, 10h18   #3
Invité de passage
 
Inscription : septembre 2008
Messages : 5
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 5
Points : 1
Points : 1
Bonjour,

merci pour vos retours.
Je ne pourrais pas procéder ainsi, car les X et Y sont aussi des veleurs calculés à chaque fois.

Je souhaiterai automatiser le script en n'ayant pas à chaque fois à saisir les valeurs obtenues pour les X et Y tel que c'est dans l'exemple.

Code :
1
2
3
4
5
6
 
CREATE TABLE A AS
SELECT sum(Y) AS Y1 ,count(*) AS X1 FROM base B;
quit;
SELECT sum(Y) AS Y2 ,count(*) AS X2 FROM base C;
quit;


ensuite je veux calculer Y1/Y2 et X1/X2.

d'avance merci pour votre aide.

Ines.
Ines2013 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2008, 10h39   #4
Membre Expert
 
Inscription : mars 2005
Messages : 1 028
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 028
Points : 1 278
Points : 1 278
Envoyer un message via Yahoo à bahraoui
Si ta table T1 et T2 (de mon exemple) existe, je ne vois pas le problème.
Est ce que T1 et T2 contiennent le même nombre d'obs? et les mêmes noms et nombre de variables?
Si oui => c'est ça ce qui te manques:
Code :
1
2
3
4
5
 
DATA t; SET t1; SET t2; 
x=x1/x2;
y=y1/y2;
run;
__________________
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 12/09/2008, 17h29   #5
Membre confirmé
 
Inscription : avril 2008
Messages : 233
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : avril 2008
Messages : 233
Points : 216
Points : 216
Tout est faisable avec du SQL :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
proc sql;
CREATE TABLE TEMP AS
	SELECT a.NB / b.NB AS NB_RATIO, a.VAR / b.VAR AS VAR_RATIO
	FROM
(SELECT count(*) AS NB, sum(variable) AS VAR
FROM SOURCE) a
	INNER JOIN
(SELECT count(*) AS NB, sum(variable) AS VAR
FROM SOURCE1) b
		ON 1 = 1
;
quit;
Par contre il est vrai que SQL n'est pas fait pour. Je ferais ces calculs plutôt en faisant deux proc sql avec des clauses into pour charger les valeurs dans les variables macro pour les réutiliser après.
green_fr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2008, 13h03   #6
Membre Expert
 
Inscription : mars 2005
Messages : 1 028
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 028
Points : 1 278
Points : 1 278
Envoyer un message via Yahoo à bahraoui
Bonjour,

C'est quoi
Citation:
On 1=1
?? jamais vu!!!!

Merci
__________________
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/09/2008, 13h45   #7
Membre confirmé
 
Inscription : avril 2008
Messages : 233
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : avril 2008
Messages : 233
Points : 216
Points : 216
Ça s'appelle du bidouillage :-)
Comme tu as pu constater, le SQL du SAS est assez différent du standard SQL. Parmi les petites particularités que j'ai trouvées cette obligation d'avoir la clause "on" pour chaque "join". Or ici j'en ai pas besoin, je veux faire un produit cartésien tout simple et garder tous les enregistrements. Donc dans la clause "on" il faut mettre un truisme, "1=1", "2*2=4", "1>0", etc.
green_fr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2008, 18h15   #8
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 482
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 482
Points : 2 866
Points : 2 866
@ Green :
pour le produit cartésien, utilise une virgule au lieu du INNER JOIN, ça évitera ce genre de bidouilles avec ON (mais il y aura un Warning dans la Log, je le concède).
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2008, 14h07   #9
Invité de passage
 
Inscription : septembre 2008
Messages : 5
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 5
Points : 1
Points : 1
Merci pour votre réponse.
merci aussi pour ces infos enrichissantes sur le produit cartésien.

bonne journée à tous.
Ines2013 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2008, 16h39   #10
Membre confirmé
 
Inscription : avril 2008
Messages : 233
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : avril 2008
Messages : 233
Points : 216
Points : 216
Merci :-) Mais je préfère des programme zero-warning pour bien voir s'il se passe qqch d'anormal.
green_fr 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 05h27.


 
 
 
 
Partenaires

Hébergement Web