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 14/01/2012, 14h56   #1
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 1
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : janvier 2012
Messages : 1
Points : 0
Points : 0
Par défaut Fusion tables SAS

Bonjour,

J'ai deux tableaux de données tab1 et tab 2 définis comme suit :
tab1
Client Fille
2 4
4 7
5 2
tab2
Client Garcon
4 3
7 8
1 6
4 5

et je dois obtenir le tableau suivant :
Client Fille Garcon
2 4 .
4 7 .
5 2 .
4 . 3
7 . 8
1 . 6
4 . 5
On remarque tab1 et tab2

et le tableau suivant :
Client Fille Client Garcon
2 4 4 3
4 7 7 8
5 2 1 6
. . 4 5

Pour le 1er, je souhaite utiliser une jointure avec une proc sql mais je n'arrive pas à trouver le critère de jointure car aucune des variables X,Y et Z n'a de valeurs communes aux deux tableaux tab1 et tab2.
J'ai tenté avec cette procédure :
Code :
1
2
3
4
5
6
7
proc sql;
CREATE TABLE tab3 AS
SELECT tab1.Client,tab2.Client,tab1.Fille
FROM tab1,tab2
full JOIN tab2
ON tab1.Fille=tab2.Garcon;
quit;
Mais cela ne fonctionne pas

Pour le 2e, je pense à une jointure également par élimination mais je ne vois pas trop comment obtenir la table souhaitée, j'ai pensé à :
Code :
1
2
3
4
5
6
7
proc sql;
CREATE TABLE tab3bis AS
SELECT *
FROM tab1
full JOIN tab2
ON tab1.Fille=tab2.Client AND tab1.Client=tab2.Garcon-1 AND tab1.Client=tab2.Garcon-4;
quit;
Mais je n'ai pas pu le tester.

Merci d'avance pour votre aide.
james06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2012, 19h24   #2
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 957
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 : 957
Points : 1 368
Points : 1 368
Bonjour,
Le premier cas, il suffit de faire un set:

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
DATA tab1;
input
Client Fille;
cards;
2 4
4 7
5 2
;
run;
 
DATA tab2;
input
Client Garcon;
cards;
4 3
7 8
1 6
4 5
;
run;
 
DATA tab3;
SET tab1 tab2;
run;
Le deuxième cas, tu ne peux pas avoir deux variables du même nom dans une même table. J'ai pas essayé de chercher, j’espère que tu m'en voudras pas (c'est le week end).

Bon courage!
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2012, 10h09   #3
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 150
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 150
Points : 1 772
Points : 1 772
la solution a ton probleme 1 via une proc sql (puisque tu le demandes, mais la solution de megamind est quand meme plus simple). Tu ne peux pas faire une jointure classique vu que tu ne joins pas en colonnes.

Code :
1
2
3
4
5
6
7
8
9
proc sql;
	CREATE TABLE TAB4 AS
	SELECT Client, Fille, . AS Garcon FROM TAB1
 
	union ALL 
 
	SELECT Client, . AS Fille, Garcon FROM TAB2
;
quit;
pour le deuxieme cas, on retombe sur une jointure classique, sauf que tu n'as pas les cles de jointure. Il faut donc les creer, et ensuite joindre la dessus.

Il te suffit de rajouter une variable pour chacune des deux tables sources, du style:

Code :
1
2
3
4
5
6
7
8
DATA TAB1;
SET TAB1;
ID=_N_;
run;
DATA TAB2;
SET TAB2;
ID=_N_;
run;
il ne te reste plus qu'a faire une jointure tout bete sur ID (en faisant attention tout de meme aux donnes de TAB2 qui ne sont pas dans TAB1)
Manoutz 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 23h31.


 
 
 
 
Partenaires

Hébergement Web