Fusionner les fichiers de données / modules d’apprentissage SPSS

Introduction

Lorsque vous avez deux fichiers de données, vous pouvez les combiner en les fusionnant côte à côte, en faisant correspondre les observations en fonction d’un identifiant. Par exemple, ci-dessous, nous avons un fichier contenant dads et nous avons un fichier contenant faminc. Nous aimerions faire correspondre fusionner les fichiers ensemble afin que nous ayons l’observation dads sur la même ligne avec l’observation faminc basée sur la variable clé famid.

dads famid name inc 2 Art 22000 1 Bill 30000 3 Paul 25000 faminc famid faminc96 faminc97 faminc98 3 75000 76000 77000 1 40000 40500 41000 2 45000 45400 45800 

Après la fusion des papas et de faminc, les données ressembleraient à ceci.

famid name inc faminc96 faminc97 faminc98 1 Bill 30000 40000 40500 41000 2 Art 22000 45000 45400 45800 3 Paul 25000 75000 76000 77000 

Fusion individuelle

Commençons par créer les fichiers que nous allons fusionner. Ci-dessous, nous créons les fichiers dads.sav et faminc.sav.

DATA LIST LIST / famid * name (A4) inc.BEGIN DATA.2 Art 220001 Bill 300003 Paul 25000END DATA.LIST.SAVE OUTFILE = "dads.sav".DATA LIST LIST / famid faminc96 faminc97 faminc98.BEGIN DATA.3 75000 76000 770001 40000 40500 410002 45000 45400 45800END DATA.LIST.SAVE OUTFILE = "faminc.sav". 

La sortie de ces déclarations est affichée ci-dessous, confirmant que nous avons bien lu les données.

FAMID NAME INC 2.00 Art 22000.00 1.00 Bill 30000.00 3.00 Paul 25000.00FAMID FAMINC96 FAMINC97 FAMINC98 3.00 75000.00 76000.00 77000.00 1.00 40000.00 40500.00 41000.00 2.00 45000.00 45400.00 45800.00

Il y a trois étapes pour faire correspondre les papas de fusion.sav avec faminc.sav. (Notez qu’il s’agit d’une fusion un à un car il existe une correspondance un à un entre les enregistrements dads et faminc.) Ces trois étapes sont illustrées ci-dessous.

  1. Utilisez les CAS DE TRI pour trier les papas sur famid et enregistrer ce fichier (nous l’appellerons dads2.sav)
  2. Utilisez les CAS de TRI pour trier faminc sur famid et enregistrer ce fichier (nous l’appellerons faminc2.sav)
  3. Utilisez les FICHIERS DE CORRESPONDANCE pour fusionner les dad2.sav et faminc2.fichiers sav basés sur famid

Ci-dessous, nous montrons les commandes pour effectuer la fusion.

GET FILE="dads.sav".SORT CASES BY famid.SAVE OUTFILE="dads2.sav".GET FILE="faminc.sav".SORT CASES BY famid.SAVE OUTFILE="faminc2.sav".MATCH FILES FILE="dads2.sav" /FILE="faminc2.sav" /BY famid.LIST.

La sortie ci-dessous montre que la fusion de correspondance a fonctionné correctement.

FAMID NAME INC FAMINC96 FAMINC97 FAMINC98 1.00 Bill 30000.00 40000.00 40500.00 41000.00 2.00 Art 22000.00 45000.00 45400.00 45800.00 3.00 Paul 25000.00 75000.00 76000.00 77000.00

Fusion un à plusieurs

L’exemple suivant considère une fusion un à plusieurs où une observation dans un fichier peut avoir plusieurs enregistrements correspondants dans un autre fichier. Imaginez que nous avions un dossier avec des papas comme nous l’avons vu dans l’exemple précédent, et nous avions un dossier avec des enfants où un père pouvait avoir plus d’un enfant. Vous voyez pourquoi cela s’appelle une fusion un à plusieurs puisque vous associez une observation de papa à une ou plusieurs (nombreuses) observations d’enfants. Rappelez-vous que le fichier des papas est le fichier avec une observation, et le fichier des enfants est celui avec de nombreuses observations. Ci-dessous, nous créons le fichier de données pour les papas et pour les enfants.

DATA LIST LIST / famid * name (A4) inc .BEGIN DATA.2 Art 220001 Bill 300003 Paul 25000END DATA.LIST.SAVE OUTFILE = "dads.sav".DATA LIST LIST / famid * kidname (A4) birth age wt * sex (A1).BEGIN DATA.1 Beth 1 9 60 f1 Bob 2 6 40 m1 Barb 3 3 20 f2 Andy 1 8 80 m2 Al 2 6 50 m2 Ann 3 2 20 f3 Pete 1 6 60 m3 Pam 2 4 40 f3 Phil 3 2 20 mEND DATA.LIST.SAVE OUTFILE="kids.sav".

Comme vous le voyez ci-dessous, les étapes pour effectuer une fusion un à plusieurs sont similaires à la fusion un à un que nous avons vue ci-dessus.

  1. Utilisez TRIER LES CAS PAR pour trier les papas sur famid et enregistrer ce fichier (nous l’appellerons dads2)
  2. Utilisez TRIER LES CAS PAR pour trier les enfants sur famid et enregistrer ce fichier (nous l’appellerons kids2)
  3. Utilisez les FICHIERS DE CORRESPONDANCE pour fusionner les fichiers dads2 et kids2. Cependant, puisque le fichier dads est le fichier avec une observation, utilisez /TABLE= »dads2.sav », pas /FILE= »dads2.sav » pour spécifier le fichier dads.
GET FILE="dads.sav".SORT CASES BY famid.SAVE OUTFILE="dads2.sav".GET FILE="kids.sav".SORT CASES BY famid.SAVE OUTFILE="kids2.sav".MATCH FILES FILE="kids2.sav" /TABLE="dads2.sav" /BY famid.LIST.

La sortie ci-dessous montre que cette fusion a fonctionné comme nous l’espérions.

FAMID KIDNAME BIRTH AGE WT SEX NAME INC 1.00 Beth 1.00 9.00 60.00 f Bill 30000.00 1.00 Bob 2.00 6.00 40.00 m Bill 30000.00 1.00 Barb 3.00 3.00 20.00 f Bill 30000.00 2.00 Andy 1.00 8.00 80.00 m Art 22000.00 2.00 Al 2.00 6.00 50.00 m Art 22000.00 2.00 Ann 3.00 2.00 20.00 f Art 22000.00 3.00 Pete 1.00 6.00 60.00 m Paul 25000.00 3.00 Pam 2.00 4.00 40.00 f Paul 25000.00 3.00 Phil 3.00 2.00 20.00 m Paul 25000.00

La principale différence entre une fusion un à un et une fusion un à plusieurs est que vous devez utiliser /TABLE= »dads2.sav » au lieu de /FILE= »dads2.sav ». Pour vos données, lorsque vous effectuez une fusion un à plusieurs, demandez-vous quel fichier joue le rôle d’un (dans un à plusieurs). Pour ce fichier, utilisez /TABLE= au lieu de /FILE=.

Faisons intentionnellement une erreur et utilisons /FILE= »dads2.sav » et voir ce que fait SPSS.

MATCH FILES /FILE="kids2.sav" /FILE="dads2.sav" /BY famid.LIST.

La première chose que nous remarquons est que SPSS nous donne l’avertissement ci-dessous. Cela nous dit qu’il y a plusieurs enfants pour un père donné.

Warning # 5132Duplicate key in a file. The BY variables do not uniquely identify eachcase on the indicated file. Please check the results carefully.

Comme le conseille SPSS, nous inspecterons soigneusement les résultats. En effet, nous voyons que les résultats ne sont pas ceux que nous souhaitions. Lorsqu’il y avait plusieurs enfants par père, il ne faisait que fusionner le père avec le premier enfant, puis les enfants suivants avec les mêmes pères se voyaient attribuer des valeurs manquantes pour les informations sur les pères (nom et inc). Lorsque nous utilisions la sous-commande /TABLE= dans l’exemple précédent, SPSS transmettait les informations des papas à tous les enfants.

FAMID KIDNAME BIRTH AGE WT SEX NAME INC 1.00 Beth 1.00 9.00 60.00 f Bill 30000.00 1.00 Bob 2.00 6.00 40.00 m . 1.00 Barb 3.00 3.00 20.00 f . 2.00 Andy 1.00 8.00 80.00 m Art 22000.00 2.00 Al 2.00 6.00 50.00 m . 2.00 Ann 3.00 2.00 20.00 f . 3.00 Pete 1.00 6.00 60.00 m Paul 25000.00 3.00 Pam 2.00 4.00 40.00 f . 3.00 Phil 3.00 2.00 20.00 m .

Ordre des variables dans le nouveau fichier

Vous pouvez utiliser la sous-commande /MAP avec la commande AJOUTER DES FICHIERS pour voir l’ordre des variables dans le nouveau fichier, comme illustré ci-dessous. Si vous souhaitez réorganiser l’ordre des variables dans le nouveau fichier, vous pouvez également ajouter la sous-commande /KEEP à la commande ADD FILES. Les variables seront ordonnées dans le nouveau fichier dans l’ordre dans lequel vous les listerez sur la sous-commande /KEEP. Si vous ne listez pas toutes les variables sur la sous-commande /KEEP, les variables non répertoriées ne seront pas présentes dans le nouveau fichier. Notez également que vous pouvez lister les premières variables si elles sont les seules à devoir être réorganisées, puis utiliser le mot clé ALL pour inclure le reste des variables dans le nouveau fichier. Les variables non spécifiées dans la sous-commande /KEEP resteront dans l’ordre dans lequel elles se trouvent dans les fichiers d’origine.

DATA LIST LIST / famid * name (A4) inc.BEGIN DATA.2 Art 220001 Bill 300003 Paul 25000END DATA.SAVE OUTFILE = "dads.sav".DATA LIST LIST / famid * name (A4) inc.BEGIN DATA.1 Bess 150003 Pat 500002 Amy 18000END DATA.SAVE OUTFILE = "moms.sav".
ADD FILES FILE="dads.sav" /FILE="moms.sav" /KEEP = name ALL /MAP.EXECUTE.
Map of the result fileResult Input1 Input2
------ ------ ------
NAME NAME NAME
FAMID FAMID FAMID
INC INC INC

Comme vous pouvez le voir, les variables du nouveau fichier sont maintenant dans le nom de l’ordre, famid inc.

5.1 Discordance des enregistrements dans une fusion un à un

Les deux fichiers de données peuvent avoir des enregistrements qui ne correspondent pas. Ci-dessous, nous illustrons cela en incluant un papa supplémentaire (Karl dans famid 4) qui n’a pas de famille correspondante, et il y a deux familles supplémentaires (5 et 6) dans le fichier familial qui n’ont pas de père correspondant.

DATA LIST LIST / famid * name (A4) inc.BEGIN DATA.2 Art 220001 Bill 300003 Paul 250004 Karl 95000END DATA.SORT CASES BY famid.SAVE OUTFILE = "dads.sav".DATA LIST LIST / famid faminc96 faminc97 faminc98.BEGIN DATA.3 75000 76000 770001 40000 40500 410002 45000 45400 458005 55000 65000 700006 22000 24000 28000END DATA.SORT CASES BY famid.SAVE OUTFILE = "faminc.sav".MATCH FILES FILE="dads.sav" /IN=fromdad /FILE="faminc.sav" /IN=fromfam /BY famid.LIST.CROSSTABS /TABLES= fromdad BY fromfam.

Comme vous le voyez ci-dessus, nous utilisons /IN=fromdad pour créer une variable 0/1 qui indique si le fichier résultant contient un enregistrement avec des données du fichier dads. De même, nous utilisons /IN=fromfam pour indiquer si le fichier résultant contient un enregistrement du fichier faminc. La LISTE et les TABLEAUX CROISÉS nous montrent ensuite les enregistrements incompatibles.

La sortie de la commande LIST nous montre que lorsqu’il y avait des enregistrements incompatibles. Pour famid 4, la valeur de fromdad est 1 et fromfam est 0, comme nous nous y attendions car il y avait des données de dads pour famid 4, mais pas de données de faminc. De plus, comme nous nous y attendons, cet enregistrement contient des données valides pour les variables du fichier dads (nom et inc) et des données manquantes pour les variables de faminc (faminc96 faminc97 et faminc98). Nous voyons le modèle inverse pour les famid 5 et 6.

FAMID NAME INC FAMINC96 FAMINC97 FAMINC98 FROMDAD FROMFAM 1.00 Bill 30000.00 40000.00 40500.00 41000.00 1 1 2.00 Art 22000.00 45000.00 45400.00 45800.00 1 1 3.00 Paul 25000.00 75000.00 76000.00 77000.00 1 1 4.00 Karl 95000.00 . . . 1 0 5.00 . 55000.00 65000.00 70000.00 0 1 6.00 . 22000.00 24000.00 28000.00 0 1

Si nous regardons les variables fromdad et fromfam, nous pouvons voir qu’il y a trois enregistrements qui ont des données correspondantes, un qui a des données des dads uniquement et deux enregistrements qui ont des données du fichier faminc uniquement. Le tableau croisé ci-dessous nous montre les mêmes résultats et constitue un moyen plus facile de calculer la correspondance que de calculer manuellement la correspondance.

FROMDAD by FROMFAM FROMFAM Page 1 of 1 Count | | | Row | 0| 1| TotalFROMDAD --------+------+------+ 0 | | 2| 2 | | | 33.3 +------+------+ 1 | 1| 3| 4 | | | 66.7 +------+------+ Column 1 5 6 Total 16.7 83.3 100.0

Lors de la correspondance de fichiers, nous vous suggérons d’utiliser cette stratégie pour vérifier la correspondance des deux fichiers. S’il y a des enregistrements non appariés inattendus, vous devez enquêter pour comprendre la cause des enregistrements non appariés.

Vous pouvez utiliser SELECT IF pour éliminer certains enregistrements non correspondants. Par exemple, si vous vouliez conserver uniquement les enregistrements où les papas correspondaient aux informations de la famille, vous pouvez taper

SELECT IF fromdad AND fromfam.LIST.

Les résultats sont présentés ci-dessous, y compris seulement les trois enregistrements correspondants.

FAMID NAME INC FAMINC96 FAMINC97 FAMINC98 FROMDAD FROMFAM 1.00 Bill 30000.00 40000.00 40500.00 41000.00 1 1 2.00 Art 22000.00 45000.00 45400.00 45800.00 1 1 3.00 Paul 25000.00 75000.00 76000.00 77000.00 1 1

5.2 Enregistrements non appariés dans une fusion un à plusieurs

SPSS gère l’inclusion d’enregistrements non appariés dans une fusion un à plusieurs différemment d’une fusion un à un. Rappelez-vous que dans une fusion un-à-plusieurs, il y a un fichier qui a une observation qui correspond à de nombreuses observations dans l’autre fichier; appelons-les le fichier un et le fichier plusieurs. S’il y a des observations dans le fichier unique qui ne correspondent pas au fichier multiple, alors ces observations n’apparaîtront pas du tout dans le fichier fusionné. S’il y a des observations dans le fichier multiple qui ne correspondent pas au fichier unique, ces enregistrements apparaîtront dans le fichier fusionné. Si c’est ce que vous désirez, vous pouvez fusionner les fichiers comme illustré dans la section 3, et utiliser le /IN= comme illustré dans la section précédente pour suivre la correspondance. Cependant, si vous souhaitez que les enregistrements non appariés du fichier un et plusieurs apparaissent tous les deux dans le fichier fusionné, vous pouvez utiliser la stratégie de correspondance décrite ci-dessous.

Ci-dessous, nous utilisons notre exemple pour fusionner les papas avec les enfants, et dans cet exemple, nous avons des enregistrements incompatibles dans les deux fichiers. Ci-dessous, nous faisons correspondre les fichiers pour inclure tous les enregistrements non appariés dans le fichier fusionné. Les parties différentes sont indiquées en rouge.

DATA LIST LIST / famid * name (A4) inc.BEGIN DATA.2 Art 220001 Bill 300003 Paul 250004 Karl 95000END DATA.SAVE OUTFILE = "dads.sav".DATA LIST LIST / famid * kidname (A4) birth age wt * sex (A1).BEGIN DATA.1 Beth 1 9 60 f1 Bob 2 6 40 m1 Barb 3 3 20 f2 Andy 1 8 80 m2 Al 2 6 50 m2 Ann 3 2 20 f3 Pete 1 6 60 m3 Pam 2 4 40 f3 Phil 3 2 20 m5 Ted 1 4 35 m5 Tess 2 2 18 fEND DATA.SAVE OUTFILE="kids.sav".GET FILE="kids.sav".SORT CASES BY famid.SAVE OUTFILE="kids2.sav".GET FILE="dads.sav".SORT CASES BY famid.SAVE OUTFILE="dads2.sav".SAVE OUTFILE="dadid.sav" /KEEP=famid.MATCH FILES FILE="kids2.sav" /IN=inkid /FILE="dadid.sav" /BY famid .LIST.SAVE OUTFILE="temp.sav".MATCH FILES FILE="temp.sav" /TABLE="dads2.sav" /IN=dads /BY famid.LIST.

La section en rouge ajoute une étape supplémentaire à la correspondance. Le but de cette étape est d’ajouter toutes les valeurs de famid qui se trouvent uniquement dans le fichier dads au fichier kids. Il le fait en effectuant une fusion individuelle entre dadid et les enfants et enregistre ce fichier en tant que temp. Puisque dadid est juste le famid de tous les papas, cette fusion ajoute essentiellement des observations pour n’importe quel famid qui se trouve dans le fichier dads mais pas dans le fichier kids, et l’enregistre en tant que temp. Ensuite, nous pouvons ensuite fusionner temp avec dads2 et temp aura un famid pour chaque observation dans le fichier dads2. Cela garantit que le fichier résultant inclura toutes les observations du fichier dads, même s’ils n’ont pas d’enregistrement correspondant dans le fichier kids. Le résultat est montré ci-dessous. En effet, le dossier contient l’observation pour le papa Karl qui n’a pas d’enfants assortis. Si nous avions omis le code supplémentaire à cette étape, cet enregistrement n’aurait pas été inclus dans ce fichier.

FAMID KIDNAME BIRTH AGE WT SEX INKID NAME INC DADS 1.00 Beth 1.00 9.00 60.00 f 1 Bill 30000.00 1 1.00 Bob 2.00 6.00 40.00 m 1 Bill 30000.00 1 1.00 Barb 3.00 3.00 20.00 f 1 Bill 30000.00 1 2.00 Andy 1.00 8.00 80.00 m 1 Art 22000.00 1 2.00 Al 2.00 6.00 50.00 m 1 Art 22000.00 1 2.00 Ann 3.00 2.00 20.00 f 1 Art 22000.00 1 3.00 Pete 1.00 6.00 60.00 m 1 Paul 25000.00 1 3.00 Pam 2.00 4.00 40.00 f 1 Paul 25000.00 1 3.00 Phil 3.00 2.00 20.00 m 1 Paul 25000.00 1 4.00 . . . 0 Karl 95000.00 1 5.00 Ted 1.00 4.00 35.00 m 1 . 0 5.00 Tess 2.00 2.00 18.00 f 1 . 0

5.3 Variables avec le même nom, mais des informations différentes

Ci-dessous, nous avons les fichiers avec les informations sur les papas et la famille, mais examinons de plus près les noms des variables. Dans le fichier dads, il y a une variable appelée inc98, et dans le fichier familial il y a des variables inc96, inc97 et inc98. Allons-y et fusionnons ces fichiers et voyons ce que fait SPSS.

DATA LIST LIST / famid * name (A4) inc98.BEGIN DATA.2 Art 220001 Bill 300003 Paul 25000END DATA.SAVE OUTFILE = "dads.sav".DATA LIST LIST / famid inc96 inc97 inc98.BEGIN DATA.3 75000 76000 770001 40000 40500 410002 45000 45400 45800END DATA.SAVE OUTFILE = "faminc.sav".GET FILE="dads.sav".SORT CASES BY famid.SAVE OUTFILE="dads2.sav".GET FILE="faminc.sav".SORT CASES BY famid.SAVE OUTFILE="faminc2.sav".MATCH FILES FILE="dads2.sav" /FILE="faminc2.sav" /BY famid.LIST.

Les résultats sont présentés ci-dessous. Comme vous le voyez, la variable inc98 contient les données du fichier dads, le fichier apparu en premier dans la commande MATCH FILES. Lorsque vous associez des fichiers qui ont la même variable, SPSS utilisera les valeurs du fichier qui apparaît le plus tôt dans la commande MATCH FILES.

FAMID NAME INC98 INC96 INC97 1.00 Bill 30000.00 40000.00 40500.00 2.00 Art 22000.00 45000.00 45400.00 3.00 Paul 25000.00 75000.00 76000.00

Il existe plusieurs façons de résoudre ce problème.

Solution #1. La solution la plus évidente consiste à choisir des noms de variables dans les fichiers d’origine qui ne seront pas en conflit les uns avec les autres. Cependant, vous pouvez recevoir des fichiers dont les noms ont déjà été choisis.

Solution #2. Vous pouvez renommer les variables dans la commande FICHIERS DE CORRESPONDANCE (qui renomme les variables avant de faire la correspondance). Cela vous permet de sélectionner des noms de variables qui ne sont pas en conflit les uns avec les autres, comme illustré ci-dessous.

GET FILE="dads.sav".SORT CASES BY famid.SAVE OUTFILE="dads2.sav".GET FILE="faminc.sav".SORT CASES BY famid.SAVE OUTFILE="faminc2.sav".MATCH FILES FILE="dads2.sav" /RENAME=(inc98 = dadinc98) /FILE="faminc2.sav" /RENAME=(inc96 inc97 inc98 = faminc96 faminc97 faminc98) /BY famid.LIST.

Comme vous pouvez le voir ci-dessous, les variables ont été renommées comme nous l’avons spécifié.

FAMID NAME DADINC98 FAMINC96 FAMINC97 FAMINC98 1.00 Bill 30000.00 40000.00 40500.00 41000.00 2.00 Art 22000.00 45000.00 45400.00 45800.00 3.00 Paul 25000.00 75000.00 76000.00 77000.00

5.4 Les mêmes variables avec des informations de dictionnaire différentes

Ce problème est similaire à celui décrit ci-dessus. Dans cet exemple, nous avons deux variables avec le même nom et les mêmes informations, mais avec des informations de dictionnaire différentes qui leur sont associées. Ces informations de dictionnaire peuvent inclure des étiquettes de valeur et/ou des étiquettes de variables. Comme dans l’exemple ci-dessus, SPSS prendra les informations du fichier répertorié en premier dans la commande MATCH FILES. Aucun message d’erreur ou d’avertissement ne sera émis pour vous informer que les informations de la variable dans le fichier ultérieur ont été perdues. La solution à ce problème consiste à répertorier d’abord dans la commande FICHIERS de CORRESPONDANCE le fichier avec les informations de dictionnaire que vous souhaitez dans le fichier résultant.

5.5 Vous avez exécuté la commande ADD FILES, et rien ne s’est passé

Si vous exécutez uniquement la commande ADD FILES, comme indiqué ci-dessous, SPSS ne fera rien. Cependant, vous verrez une note dans le coin inférieur droit de l’éditeur de données indiquant « transformation en attente ».

ADD FILES FILE="dads.sav" /FILE="moms.sav"

Solution : La solution consiste à ajouter la commande execute ou une commande de procédure qui forcera l’exécution de la transformation, telle que la commande list ou la commande crosstab.

ADD FILES FILE="dads.sav" /FILE="moms.sav"execute.

Leave a Reply

Votre adresse e-mail ne sera pas publiée.