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 03/08/2008, 00h55   #1
Candidat au titre de Membre du Club
 
Inscription : mai 2008
Messages : 32
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 32
Points : 11
Points : 11
Par défaut Problème avec MERGE

Bonjour,
je suis confrontée à un problème. J'ai 2 tables avec un nombre de lignes différent.
Mon objectif : je veux multiplier la variable de la table1 à celle de la table 2.
Pour cela, je fais merge mais LE PROBLEME, c'est que je veux absolumment que ma dernière ligne (24ème) de ma table1 multiplie la table2 sur sa dernière ligne (10ème pour l'exemple ici). En faisant merge, je me trouve avec des . dans la table2 (à 10 lignes) et donc la multiplication est impossible.

Comment dois-je faire s'il vous plait?
didinet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2008, 20h08   #2
Responsable SAS
 
Inscription : septembre 2006
Messages : 1 973
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 1 973
Points : 4 810
Points : 4 810
Bonjour,
As tu bien "Mergé" tes tables par rapport à une clé commune?
__________________
Les balises code
FAQ SAS
Rubrique SAS

Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.
fafabzh6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2008, 10h14   #3
Membre chevronné
 
Avatar de steelspirit
 
Inscription : janvier 2008
Messages : 420
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2008
Messages : 420
Points : 739
Points : 739
Envoyer un message via MSN à steelspirit
Citation:
Envoyé par didinet Voir le message
Mon objectif : je veux multiplier la variable de la table1 à celle de la table 2.
Essaie plutot une jointure avec une proc sql.
__________________
Avant de poser votre question, n'oubliez pas :
FAQ, SAS DOC et de ce forum
steelspirit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2008, 11h24   #4
Nouveau Membre du Club
 
Inscription : avril 2004
Messages : 42
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 42
Points : 29
Points : 29
Par défaut Produit cartesien = SQL

Bonjour,

Si je comprend bien ta demande tu désires faire un produit cartésien (AxB), alors oui comme te le suggère steelspirit tu dois faire une requete SQL basique car le MERGE ne peux pas faire de produit cartésien.
alexd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2008, 13h38   #5
Candidat au titre de Membre du Club
 
Inscription : mai 2008
Messages : 32
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 32
Points : 11
Points : 11
Par défaut proc Merge proc SQL

Citation:
Envoyé par alexd Voir le message
Bonjour,

Si je comprend bien ta demande tu désires faire un produit cartésien (AxB), alors oui comme te le suggère steelspirit tu dois faire une requete SQL basique car le MERGE ne peux pas faire de produit cartésien.
Merci pour l'info, je vais dans la doc pour voir en quoi consiste une requete SQL.
didinet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2008, 13h51   #6
Responsable SAS
 
Inscription : septembre 2006
Messages : 1 973
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 1 973
Points : 4 810
Points : 4 810
Bonjour,
Juste pour info : avec le "merge" tu peux quasiment faire tous les types de jointures de SQL en utilisant le BY et le IF dans ton DATA.
Une question : es-tu sûr de vouloir faire un produit cartésien car d'après ton énoncé non!!
__________________
Les balises code
FAQ SAS
Rubrique SAS

Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.
fafabzh6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2008, 14h35   #7
Nouveau Membre du Club
 
Inscription : avril 2004
Messages : 42
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 42
Points : 29
Points : 29
autant pour moi je t'ai dit une bétise, pour me ratraper et pour être sur de ce que tu veux, je vais te faire des exemples.
alexd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2008, 14h54   #8
Nouveau Membre du Club
 
Inscription : avril 2004
Messages : 42
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 42
Points : 29
Points : 29
voici :

Table SAS Tab1 :

V1|V2
------
A | 1
A | 2
B | 1
C | 1
C | 2

Table SAS Tab2 :

V1|V3
------
A | 5
B | 5
D | 5
E | 5


Voici ce que tu peux avoir avec un MERGE :

Toutes les valeurs de Tab1 et Toutes les valeurs de Tab2
Code :
1
2
3
4
5
 
DATA Res_AouB;
	merge Tab1(IN=A) Tab2(IN=B);
	BY V1;
run;
V1|V2 |V3
----------
A | 1 | 5
A | 2 | 5
B | 1 | 5
C | 1 | .
C | 2 | .
D | . | 5
E | . | 5

Toutes les valeurs communes à Tab1 et Tab2
Code :
1
2
3
4
5
6
 
DATA Res_AetB;
	merge Tab1(IN=A) Tab2(IN=B);
	BY V1;
	IF A AND B then output;
run;
V1|V2|V3
----------
A | 1 | 5
A | 2 | 5
B | 1 | 5

Toutes les valeurs de Tab1
Code :
1
2
3
4
5
6
 
DATA Res_A;
	merge Tab1(IN=A) Tab2(IN=B);
	BY V1;
	IF A then output;
run;
V1|V2|V3
----------
A | 1 | 5
A | 2 | 5
B | 1 | 5
C | 1 | .
C | 2 | .

Toutes les valeurs de Tab2
Code :
1
2
3
4
5
6
 
DATA Res_B;
	merge Tab1(IN=A) Tab2(IN=B);
	BY V1;
	IF B then output;
run;
V1|V2|V3
----------
A | 1 | 5
A | 2 | 5
B | 1 | 5
D | . | 5
E | . | 5

si une erreur c'est glissé n'hésitez-pas
alexd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2008, 18h13   #9
Membre chevronné
 
Avatar de steelspirit
 
Inscription : janvier 2008
Messages : 420
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2008
Messages : 420
Points : 739
Points : 739
Envoyer un message via MSN à steelspirit
bravo pour ce rappel Alexd !

Je me permet d'apporter une petite précision :

cette exemple marche bien car on a une relation un à plusieurs (tab2 a des clés uniques). Attention les dégats pour une relation plusieurs à plusieurs avec un merge :

V1|V2
------
A | 1
A | 2

Table SAS Tab2 :

V1|V3
------
A | 5
A | 4
A | 1

résultats :

V1|V2 |V3
----------
A | 1 | 5
A | 2 | 4
A | 2 | 1
__________________
Avant de poser votre question, n'oubliez pas :
FAQ, SAS DOC et de ce forum
steelspirit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2008, 16h52   #10
Nouveau Membre du Club
 
Inscription : avril 2004
Messages : 42
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 42
Points : 29
Points : 29
Ha mais oui c'est bien sur .... Heureusement que tu es la steelspirit

Je m'étais demandé pourquoi j'avais parlé de requete SQL pour le produit cartesien, mais justement c'est pour les cas que tu as cité .

c'est ici qu'il faut utiliser une proc SQL :

Code :
1
2
3
4
5
6
7
 
proc sql;
CREATE TABLE Res_sql AS
	SELECT * FROM Tab1, Tab2
	WHERE Tab1.V1=Tab2.V1
;
quit;
pour avoir ce résultat :


V1|V2 |V3
----------
A | 1 | 5
A | 1 | 4
A | 1 | 1
A | 2 | 5
A | 2 | 4
A | 2 | 1

Merci steelspirit
alexd 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 04h44.


 
 
 
 
Partenaires

Hébergement Web