Match samenvoegen van gegevensbestanden / SPSS-leermodules

Inleiding

wanneer u twee gegevensbestanden hebt, kunt u ze combineren door ze naast elkaar samen te voegen, waarbij waarnemingen worden vergeleken op basis van een identifier. Bijvoorbeeld, hieronder hebben we een bestand met dads en we hebben een bestand met faminc. We willen de bestanden samenvoegen zodat we de dads observatie op dezelfde lijn hebben met de faminc observatie gebaseerd op de sleutelvariabele 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 

na match samenvoegen van de dads en faminc, de gegevens zou er zo uitzien.

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

Eén-op-één merge

laten we beginnen met het aanmaken van de bestanden die we gaan mergen. Hieronder maken we de bestanden vaders.sav en 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". 

de output van deze verklaringen wordt hieronder getoond, bevestigend dat we de gegevens goed hebben gelezen.

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

er zijn drie stappen om merge dads te matchen.sav met faminc.sav. (Merk op dat dit een one to one merge is omdat er een one to one correspondentie is tussen de dads en faminc records.) Deze drie stappen worden hieronder geïllustreerd.

  1. gebruik Sorteer CASES om vaders op family te sorteren en sla dat bestand op (we noemen het dads2.sav)
  2. gebruik Sorteer CASES om faminc op famid te sorteren en sla dat bestand op (we noemen het faminc2.sav)
  3. gebruik overeenkomende bestanden om de dads2 samen te voegen.sav en famili2.sav-bestanden op basis van famid

hieronder tonen we de commando ‘ s voor het uitvoeren van de merge.

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.

de uitvoer hieronder laat zien dat de match merge correct werkte.

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

een-tot-veel samenvoeging

het volgende voorbeeld beschouwt een één tot veel samenvoeging waarbij een waarneming in een bestand meerdere overeenkomende records in een ander bestand kan hebben. Stel je voor dat we een dossier hadden met vaders zoals we in het vorige voorbeeld zagen, en we hadden een dossier met kinderen waar een vader meer dan één kind kon hebben. Je ziet waarom dit een one to many merge wordt genoemd omdat je een papa-observatie matcht met een of meer (veel) kinderwaarnemingen. Vergeet niet dat het dads-bestand het bestand is met één observatie, en het kids-bestand is degene met veel observaties. Hieronder maken we het gegevensbestand voor de vaders en voor de kinderen.

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".

zoals je hieronder ziet, zijn de stappen voor het doen van een één tot veel merge vergelijkbaar met de één tot één merge die we hierboven zagen.

  1. gebruik Sorteer CASES op om dads op famid te sorteren en sla dat bestand op (we noemen het dads2)
  2. gebruik Sorteer CASES op om kids op famid te sorteren en sla dat bestand op (we noemen het kids2)
  3. gebruik overeenkomende bestanden om de dads2 en kids2 bestanden samen te voegen. Echter, omdat het dads bestand het bestand is met één observatie, gebruik /TABLE= ” dads2.sav”, niet / FILE= ” dads2.sav ” om het dads-bestand te specificeren.
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.

de uitvoer hieronder laat zien dat deze merge werkte zoals we hoopten.

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

het belangrijkste verschil tussen een één op één merge en een één op veel merge is dat je /TABLE=”dads2 moet gebruiken.sav ” in plaats van / FILE=”dads2.sav”. Voor uw gegevens, wanneer u een één tot veel samenvoegen, vraag jezelf af welk bestand speelt de rol van een (in een tot veel). Gebruik voor dat bestand /TABLE = in plaats van / FILE=.

laten we opzettelijk een fout maken en /FILE=”dads2 gebruiken.sav ” en zien wat SPSS doet.

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

het eerste wat we opmerken is dat SPSS ons de onderstaande waarschuwing geeft. Dit zegt ons dat er meerdere kinderen zijn voor een bepaalde vader.

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

zoals SPSS adviseert, zullen we de resultaten zorgvuldig inspecteren. Inderdaad, we zien dat de resultaten niet zijn wat we wilden. Toen er meerdere kinderen per vader, het alleen samengevoegd de vader met het eerste kind, en dan de volgende kinderen met dezelfde vaders werden toegewezen ontbrekende waarden voor de vaders informatie (naam en inc). Toen we de /TABLE= subcommando in het vorige voorbeeld gebruikten, droeg SPSS de dads informatie over alle kinderen.

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 .

volgorde van de variabelen in het nieuwe bestand

u kunt de subopdracht / MAP gebruiken met het commando bestanden toevoegen om de volgorde van de variabelen in het nieuwe bestand te zien, zoals hieronder wordt weergegeven. Als u de volgorde van de variabelen in het nieuwe bestand wilt herschikken, kunt u ook de subopdracht /KEEP toevoegen aan het commando bestanden toevoegen. De variabelen zullen in het nieuwe bestand geordend worden in de volgorde waarin je ze op de /KEEP subopdracht weergeeft. Als u niet alle variabelen in de subopdracht /KEEP in een lijst plaatst, zullen de variabelen die niet in de lijst staan niet aanwezig zijn in het nieuwe bestand. Merk ook op dat je de eerste paar variabelen kunt weergeven als ze de enige zijn die opnieuw moeten worden geordend, en gebruik dan het trefwoord ALL om de rest van de variabelen in het nieuwe bestand te laten opnemen. De variabelen die niet zijn opgegeven in het subcommando / KEEP blijven de volgorde waarin ze zich in de originele bestanden bevinden.

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

zoals u kunt zien, de variabelen in het nieuwe bestand zijn nu in de volgorde Naam, famid inc.

5.1 Mismatching records in één-op-één samenvoeging

de twee gegevensbestanden hebben mogelijk records die niet overeenkomen. Hieronder illustreren we dit door een extra vader (Karl in famid 4) op te nemen die geen overeenkomstig gezin heeft, en er zijn twee extra families (5 en 6) in het familiebestand die geen overeenkomstige vader hebben.

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.

zoals je hierboven ziet, gebruiken we /in = frodad om een 0/1 variabele aan te maken die aangeeft of het resulterende bestand een record bevat met gegevens uit het dads bestand. Ook gebruiken we /in=frommam om aan te geven of het resulterende bestand een record heeft van het faminc-bestand. De lijst en CROSSTABS tonen ons dan over de mismatching records.

de uitvoer van het LIST commando laat ons zien dat wanneer er niet-overeenkomende records waren. Voor famid 4 is de waarde van fromdad 1 en frommam 0, zoals we zouden verwachten omdat er gegevens van dads waren voor famid 4, maar geen gegevens van faminc. Ook, zoals we verwachten, dit record heeft geldige gegevens voor de variabelen van de dads-bestand (naam en inc) en ontbrekende gegevens voor de variabelen van faminc (familinc96 familinc97 en familinc98). We zien het omgekeerde patroon voor famid 5 en 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

als we kijken naar de variabelen frombad en frommam, kunnen we zien dat er drie records zijn met overeenkomende gegevens, één met alleen gegevens van de vaders, en twee records met alleen gegevens van het faminc-bestand. De crosstab hieronder toont ons dezelfde resultaten, en is een gemakkelijkere manier van het tellen van de matching dan handmatig tellen van de matching.

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

bij het matchen van bestanden, raden wij u aan deze strategie te gebruiken om de matching van de twee bestanden te controleren. Als er onverwachte niet-overeenkomende records, dan moet u onderzoeken om de oorzaak van de niet-overeenkomende records te begrijpen.

u kunt selecteren als gebruiken om een aantal niet-overeenkomende records te verwijderen. Als je bijvoorbeeld alleen de gegevens wilt bijhouden waar de vaders overeenkomen met de familieinformatie, kun je typen

SELECT IF fromdad AND fromfam.LIST.

de resultaten worden hieronder weergegeven, inclusief alleen de drie overeenkomende records.

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 Mismatching records in one-to-many merge

SPSS verwerkt het opnemen van niet-overeenkomende records in een one-to-many merge anders dan een one-to-one merge. Onthoud dat in een één-op-veel merge, er een bestand is dat één observatie heeft die overeenkomt met vele waarnemingen in het andere bestand; Laten we deze refereren als het ene bestand en het vele bestand. Als er waarnemingen zijn in het ene bestand die niet overeenkomen met het vele bestand, dan zullen deze waarnemingen helemaal niet in het samengevoegde bestand verschijnen. Als er waarnemingen zijn in het vele bestand die niet overeenkomen met het ene bestand, zullen die records verschijnen in het samengevoegde bestand. Als dit is wat je wilt, dan kun je de bestanden samenvoegen zoals geà llustreerd in Paragraaf 3, en gebruik de /in= zoals geà llustreerd in de vorige paragraaf om de overeenkomst te volgen. Als u echter niet-overeenkomende records uit het bestand one en many wilt laten verschijnen in het samengevoegde bestand, kunt u de onderstaande overeenkomende strategie gebruiken.

hieronder gebruiken we ons voorbeeld om dads met kids te mergen, en in dit voorbeeld hebben we records in beide bestanden die niet overeenkomen. Hieronder komen we overeen met de bestanden om alle niet-overeenkomende records in het samengevoegde bestand op te nemen. De delen die verschillen zijn aangegeven in rood.

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.

de sectie in het rood voegt een extra stap toe aan de matching. Het doel van deze stap is om alle waarden van famid die alleen in de dads-bestand aan de kinderen bestand toe te voegen. Het doet door het doen van een een-op-een merge tussen dadid en de kinderen en slaat dat bestand op als temp. Aangezien dadid alleen de famid van alle vaders, deze samenvoeging voegt in principe observaties voor elke famid die in het dads-bestand maar niet in het kids-bestand, en slaat dit op als temp. Dan kunnen we dan temp samenvoegen met dads2 en temp zal een famid hebben voor elke waarneming in het dads2 bestand. Dit zorgt ervoor dat het resulterende bestand alle observaties uit het dads-bestand zal bevatten, zelfs als ze geen overeenkomende record in het kids-bestand hebben. Het resultaat wordt hieronder weergegeven. Inderdaad, het bestand bevat de observatie voor de vader Karl die geen bijpassende kinderen heeft. Als we de extra code in deze stap weglaten, zou dat record niet in dit bestand zijn opgenomen.

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 variabelen met dezelfde naam, maar verschillende informatie

hieronder hebben we de bestanden met de informatie over de vaders en familie, maar kijk beter naar de namen van de variabelen. In het dads bestand is er een variabele genaamd inc98, en in het family bestand zijn er variabelen inc96, inc97 en inc98. Laten we deze bestanden samenvoegen en zien wat SPSS doet.

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.

de resultaten worden hieronder weergegeven. Zoals je ziet, heeft de variabele inc98 de gegevens van het dads-bestand, het bestand dat als eerste verscheen in de opdracht MATCH FILES. Wanneer u bestanden met dezelfde variabele matcht, gebruikt SPSS de waarden van het bestand dat het vroegst in de opdracht MATCH FILES verschijnt.

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

er zijn een paar manieren om dit probleem op te lossen.

oplossing # 1. De meest voor de hand liggende oplossing is om variabele namen te kiezen in de originele bestanden die niet met elkaar in conflict zullen komen. U kunt echter Bestanden ontvangen waar de namen al zijn gekozen.

oplossing # 2. U kunt de variabelen hernoemen in de opdracht MATCH FILES (die de variabelen hernoemt voordat u de matching doet). Hiermee kunt u variabele namen selecteren die niet met elkaar in conflict zijn, zoals hieronder wordt geïllustreerd.

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.

zoals u hieronder kunt zien, werden de variabelen hernoemd zoals we hebben opgegeven.

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 dezelfde variabelen met verschillende woordenboekinformatie

dit probleem is vergelijkbaar met het hierboven beschreven probleem. In dit voorbeeld hebben we twee variabelen met dezelfde naam en dezelfde informatie, maar met verschillende woordenboekinformatie geassocieerd met hen. Deze woordenboekinformatie kan waarde-labels en/of variabele labels bevatten. Net als in het voorbeeld hierboven, zal SPSS de informatie uit het bestand dat als eerste in de MATCH FILES Commando. Er zal geen fout of waarschuwingsbericht worden uitgegeven om u te laten weten dat de informatie van de variabele in het latere bestand verloren is gegaan. De oplossing voor dit probleem is om eerst een lijst in de MATCH FILES Commando het bestand met de Woordenboek informatie die u wilt in het resulterende bestand.

5.5 U hebt het commando bestanden toevoegen uitgevoerd, en er is niets gebeurd

Als u alleen het commando bestanden toevoegen uitvoert, zoals hieronder wordt getoond, zal SPSS niets doen. Echter, ziet u een notitie in de rechterbenedenhoek van de data-editor zeggen “transformatie in afwachting”.

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

oplossing: de oplossing is om het commando uitvoeren toe te voegen of een procedure commando dat de uitvoering van de transformatie forceert, zoals de list commando of de crosstab Commando.

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

Leave a Reply

Het e-mailadres wordt niet gepubliceerd.