IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SAS STAT Discussion :

Croisement de deux tables SAS


Sujet :

SAS STAT

  1. #1
    Membre à l'essai
    Homme Profil pro
    Doctorant
    Inscrit en
    Janvier 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Doctorant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 19
    Points : 13
    Points
    13
    Par défaut Croisement de deux tables SAS
    Bonjour à toutes et à tous,
    Voici mon problème: je dispose d'une table (table1) avec une variable X1 et une autre X2 (chacune de ces deux variables peut prendre 32 valeurs différentes). Dans une autre table (table2), je dispose d'une variable X3 qui contient la valeur de tous les croisements possibles entre X1 et X2 (au total 1024 combinaisons possibles car 32*32=1024).
    Et je voudrais donc attribuer à chaque croisement de X1 et X2 (de la table 1) la valeur correspondante X3 (de la table 2) mais je ne vois pas comment réaliser cette étape.
    Je précise que X1, X2 et X3 sont des valeurs obtenues en utilisant une analyse factorielle, je ne peux donc pas passer de X1 et X2 à X3 par un simple calcul.
    Si ce n'est pas clair pour vous dites le moi, je détaillerais un peu plus.
    En vous remerciant.

  2. #2
    Membre éprouvé
    Avatar de Stackware
    Homme Profil pro
    ArchiDuc de la Sasserie
    Inscrit en
    Juillet 2013
    Messages
    439
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ArchiDuc de la Sasserie
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2013
    Messages : 439
    Points : 1 017
    Points
    1 017
    Billets dans le blog
    4
    Par défaut
    Salut,
    Non effectivement, ce n'est pas très clair.
    Si on a table1 avec identifiant, X1, X2, et table2 avec X1, X2 et X3, c'est ultra simple.
    Il suffit de faire une simple jointure entre les deux tables et c'est fait. Mais j'imagine que la vraie vie est plus complexe?

  3. #3
    Membre régulier
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2017
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Novembre 2017
    Messages : 63
    Points : 82
    Points
    82
    Par défaut
    Bonjour,

    Par quel moyen peux tu identifier la valeur de X3 correspondante à une combinaison X1-X2?

    Si c'est par ordre dans la table, comment est défini l'ordre des observations pour X3?

  4. #4
    Membre à l'essai
    Homme Profil pro
    Doctorant
    Inscrit en
    Janvier 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Doctorant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Tout d'abord merci pour ta réponse et en effet ce n'est pas aussi simple.
    Dans ma première table j'ai mes identifiants (environ 3500) à deux temps de mesures et mes variables X1 et X2.
    Dans ma seconde table j'ai la valeur X3 de tous les croisements possibles entre X1 et X2.
    Par exemple, voici comment est présentée ma table 2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    X1      X2       X3
    10	10	101
    10	21	104
    10	22	104
    10	23	128
    10	31	155
    10	33	154
    10	34	163
    10	35	143
    10	37	145
    10	38	164
    10	42	154
    10	43	117
    10	44	147
    10	45	115
    10	46	125
    10	47	125
    10	48	122
    10	52	104
    10	53	110
    10	54	120
    10	55	104
    10	56	99
    10	61	104
    10	66	104
    10	69	104
    10	71	104
    10	72	104
    10	73	129
    10	76	104
    10	81	104
    10	82	83
    10	99	92
    Et je voudrais donc faire un programme du genre:
    Si dans la table 1, X1 vaut 10 et X2 vaut 73 alors cherche dans la table 2 la valeur de X3 qui correspond à cette combinaison (129 en l’occurrence) et attribue la à mon identifiant correspondant.

    J’espère que c'est un peu plus clair.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Doctorant
    Inscrit en
    Janvier 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Doctorant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par JQuem Voir le message
    Bonjour,

    Par quel moyen peux tu identifier la valeur de X3 correspondante à une combinaison X1-X2?

    Si c'est par ordre dans la table, comment est défini l'ordre des observations pour X3?
    Je n'ai pas de moyen d'identifier la valeur X3 pour chaque combinaison (après je peux créer une variable si nécessaire).
    Comme tu le dis c'est par ordre et l'ordre des observations est défini de la manière suivante (ma réponse au message précédent pourra peut être répondre à cette question):
    Pour une valeur de X1, on croise toutes les valeurs possibles de X2 et on obtient X3. Puis on passe à la valeur suivante de X2 où on refait tous les croisements possibles etc... jusqu'à faire toutes les valeurs de X1.

  6. #6
    Membre régulier
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2017
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Novembre 2017
    Messages : 63
    Points : 82
    Points
    82
    Par défaut
    Ce programme correspond t-il à la façon dont sont construites vos tables?

    (hormis que l'on ne dispose pas de X1 et X2 dans la table B, mais c'est surtout pour illustrer l'ordre des X3 dans la table)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    data A;
    input x1 x2;
    datalines;
    1 1
    2 2
    3 3
    4 4 
    5 5
    6 6
    7 7
    8 8
    9 9
    10 10
    ;
    run;
     
     
    data B;
    do X1 = 1 to 10;
    	do X2 = 1 to 10;
    	X3 = cats(X1, X2);
    	output;
    	end;
    end;
    run;

  7. #7
    Membre à l'essai
    Homme Profil pro
    Doctorant
    Inscrit en
    Janvier 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Doctorant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par JQuem Voir le message
    Ce programme correspond t-il à la façon dont sont construites vos tables?

    (hormis que l'on ne dispose pas de X1 et X2 dans la table B, mais c'est surtout pour illustrer l'ordre des X3 dans la table)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    data A;
    input x1 x2;
    datalines;
    1 1
    2 2
    3 3
    4 4 
    5 5
    6 6
    7 7
    8 8
    9 9
    10 10
    ;
    run;
     
     
    data B;
    do X1 = 1 to 10;
    	do X2 = 1 to 10;
    	X3 = cats(X1, X2);
    	output;
    	end;
    end;
    run;
    Pour la table A, c'est bien sous cette forme et pour la table B X1 et X2 sont présentées sous cette forme mais X3 non. X3 a été créée en utilisant une analyse factorielle (on ne peut pas avoir X3 directement en utilisant les valeurs de X1 et X2).

    Mais la jointure que vous aviez poster semble fonctionner même si je ne suis pas du tout familier avec le proc sql.

  8. #8
    Membre régulier
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2017
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Novembre 2017
    Messages : 63
    Points : 82
    Points
    82
    Par défaut
    Pour X3, pas de problème, c'était justepour donner un exemple.

    Pour qu'elle fonctionne il faut que vous ayez X1 et X2 dans la table B. Est-ce le cas?

    Sinon, le plus simple est de recréer des clés de jointures X1 et X2 dans les tables A et B, mon code précédent devrait vous aider. Puis de faire la jointure, je vous redonne le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    proc sql;
    	create table C as
    	select t1.*, t2.X3
    	from A t1 left join B t2
    	on cats(t1.X1,t1.X2) = cats(t2.X1,t2.X2);
    quit;

  9. #9
    Membre à l'essai
    Homme Profil pro
    Doctorant
    Inscrit en
    Janvier 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Doctorant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par JQuem Voir le message
    Pour X3, pas de problème, c'était justepour donner un exemple.

    Pour qu'elle fonctionne il faut que vous ayez X1 et X2 dans la table B. Est-ce le cas?

    Sinon, le plus simple est de recréer des clés de jointures X1 et X2 dans les tables A et B, mon code précédent devrait vous aider. Puis de faire la jointure, je vous redonne le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    proc sql;
    	create table C as
    	select t1.*, t2.X3
    	from A t1 left join B t2
    	on cats(t1.X1,t1.X2) = cats(t2.X1,t2.X2);
    quit;
    C'est peut être un peu naïf comme question mais qu'est ce qu'une clé de jointure?

    Dans la table B j'ai toutes les combinaisons possibles de X1 et X2 pour avoir X3 comme ceci (ce n'est qu'une partie des combinaisons):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    X1	  X2	  X3
    10	10	101
    10	21	104
    10	22	104
    10	23	128
    10	31	155
    10	33	154
    10	34	163
    10	35	143
    10	37	145
    10	38	164
    10	42	154
    10	43	117
    10	44	147
    10	45	115
    10	46	125
    10	47	125
    10	48	122
    10	52	104
    10	53	110
    10	54	120
    10	55	104
    10	56	99
    10	61	104
    10	66	104
    10	69	104
    10	71	104
    10	72	104
    10	73	129
    10	76	104
    10	81	104
    10	82	83
    10	99	92
    21	10	99
    21	21	97
    21	22	100
    21	23	128
    21	31	155
    21	33	154
    21	34	163
    21	35	143
    21	37	145
    21	38	164
    21	42	154
    21	43	104
    21	44	147
    21	45	115
    21	46	125
    21	47	125
    21	48	122
    21	52	93
    21	53	110
    21	54	104
    21	55	87
    21	56	88
    21	61	82
    21	66	95
    21	69	95
    21	71	95
    21	72	101
    21	73	129
    21	76	97
    21	81	95
    21	82	79
    21	99	88
    22	10	102
    22	21	102
    22	22	96
    22	23	128
    22	31	155
    22	33	154
    22	34	163
    22	35	143
    22	37	132
    22	38	164
    22	42	154
    22	43	121
    22	44	147
    22	45	115
    22	46	125
    22	47	125
    22	48	122
    22	52	102
    22	53	110
    22	54	111
    22	55	88
    22	56	89
    22	61	102
    22	66	102
    22	69	102
    22	71	102
    22	72	102
    22	73	129
    22	76	102
    22	81	102
    22	82	87
    22	99	103
    23	10	140
    23	21	140
    23	22	140
    23	23	140
    23	31	155
    23	33	154
    23	34	163
    23	35	143
    23	37	154
    23	38	164
    23	42	154
    23	43	140
    23	44	147
    23	45	140
    23	46	140
    23	47	140
    23	48	140
    23	52	140
    23	53	140
    23	54	134
    23	55	140
    23	56	140
    23	61	140
    23	66	140
    23	69	140
    23	71	140
    23	72	140
    23	73	140
    23	76	140
    23	81	140
    23	82	136
    23	99	138
    31	10	158
    31	21	158
    31	22	158
    31	23	158
    31	31	172
    31	33	158
    31	34	177
    31	35	158
    31	37	167
    31	38	164
    31	42	158
    31	43	164
    31	44	158
    31	45	158
    31	46	158
    31	47	158
    31	48	158
    31	52	158
    31	53	158
    31	54	148
    31	55	158
    31	56	158
    31	61	158
    31	66	158
    31	69	158
    31	71	158
    31	72	158
    31	73	158
    31	76	158
    31	81	158
    31	82	151
    31	99	149
    33	10	148
    33	21	148
    33	22	148
    33	23	148
    33	31	155
    33	33	157
    33	34	175
    33	35	148
    33	37	148
    33	38	164
    33	42	154
    33	43	145
    33	44	148
    33	45	148
    33	46	148
    33	47	148
    33	48	148
    33	52	137
    33	53	148
    33	54	148
    33	55	148
    33	56	148
    33	61	148
    33	66	148
    33	69	148
    33	71	148
    33	72	148
    33	73	148
    33	76	148
    33	81	148
    33	82	142
    33	99	144

  10. #10
    Membre régulier
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2017
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Novembre 2017
    Messages : 63
    Points : 82
    Points
    82
    Par défaut
    Une clé de jointure est une variable qui vous permet d'associer vos observations dans différentes tables.

    Ici votre clé de jointure est la combinaison de X1 et X2. Cette clé est dite primaire dans votre cas puisque à chaque combinaison de X1 et X2 correspond une unique observation dans votre table B.

    La jointure proposée vous permet d'associer dans votre table A les observations de B en fonction de X1 et X2. SAS va regarder pour chaque ligne dans A, quelle ligne dans B a les mêmes valeurs de X1 et X2 et va retourner dans la table C, outre X1 et X2, la valeur X3 correspondante.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Doctorant
    Inscrit en
    Janvier 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Doctorant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Une explication très claire!
    Je vous remercie infiniment, ça marche très bien.
    Bonne journée à vous.

  12. #12
    Membre régulier
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2017
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Novembre 2017
    Messages : 63
    Points : 82
    Points
    82
    Par défaut
    Je vous en prie.

    Bonne journée également.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fusion de deux tables SAS
    Par Dadakane dans le forum Débutez
    Réponses: 10
    Dernier message: 07/02/2014, 10h23
  2. Soustraire deux tables SAS
    Par kopouge dans le forum Outils BI
    Réponses: 1
    Dernier message: 21/02/2012, 14h43
  3. requête croisement de deux tables + sum
    Par alibi dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/09/2009, 15h42
  4. Lister avec croisement entre deux tables
    Par wehtam dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/01/2008, 23h10
  5. Croisement de deux tables avec SUM et sans doublon
    Par ar|equin dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 13/06/2007, 17h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo