Match fletning af datafiler / SPSS-læringsmoduler

introduktion

når du har to datafiler, kan du kombinere dem ved at flette dem side om side og matche observationer baseret på en identifikator. For eksempel har vi nedenfor en fil, der indeholder dads, og vi har en fil, der indeholder faminc. Vi vil gerne matche flette filerne sammen, så vi har dads-observationen på samme linje med faminc-observationen baseret på nøglevariablen 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 

efter kamp sammenlægning af dads og faminc, dataene ville se sådan ud.

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

en-til-en fusion

lad os starte med at oprette de filer, som vi vil fusionere. Nedenfor opretter vi filerne dads.sav og 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". 

udgangen af disse udsagn er vist nedenfor, hvilket bekræfter, at vi har læst dataene korrekt.

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

der er tre trin til at matche Flet dads.sav med faminc.sav. (Bemærk, at dette er en en til en fusion, fordi der er en en til en korrespondance mellem dads og faminc records.) Disse tre trin er illustreret nedenfor.

  1. brug Sorter sager til at sortere dads på famid og gemme den fil (vi kalder det dads2.sav)
  2. brug Sorter sager til at sortere faminc på famid og gemme den fil (vi kalder den faminc2.sav)
  3. brug MATCHFILER til at flette dads2.sav og faminc2.sav-filer baseret på famid

nedenfor viser vi kommandoerne til udførelse af fletningen.

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.

outputtet nedenfor viser, at matchfletningen fungerede korrekt.

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

en-til-mange flette

det næste eksempel betragter en til mange flette, hvor en observation i en fil kan have flere matchende poster i en anden fil. Forestil dig, at vi havde en fil med far, som vi så i det foregående eksempel, og vi havde en fil med børn, hvor en far kunne have mere end et barn. Du kan se, hvorfor dette kaldes en til mange fusionere, da du matcher en farobservation til en eller flere (mange) børneobservationer. Husk, at dads-filen er filen med en observation, og kids-filen er den med mange observationer. Nedenfor opretter vi datafilen til dads og for børnene.

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

som du ser nedenfor, er trinene til at gøre en en til mange fusion ligner den ene til en fusion, som vi så ovenfor.

  1. brug Sorter sager efter at sortere fædre på famid og gemme den fil (vi kalder den dads2)
  2. brug Sorter sager efter at sortere børn på famid og gemme den fil (vi kalder den kids2)
  3. brug MATCHFILER til at flette dads2-og kids2-filerne. Da dads-filen imidlertid er filen med en observation, skal du bruge /TABLE=”dads2.sav”, ikke / FILE= ” dads2.sav ” for at angive dads-filen.
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.

outputtet nedenfor viser, at denne fusion fungerede som vi håbede.

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

nøgleforskellen mellem en til en fusion og en til mange fusion er, at du skal bruge /TABLE=”dads2.sav “i stedet for / FILE=” dads2.sav”. For dine data, når du laver en en til mange fusion, spørg dig selv, hvilken fil der spiller rollen som en (i en til mange). For den fil skal du bruge / TABLE= i stedet for / FILE=.

lad os med vilje lave en fejl og bruge /FILE=”dads2.sav ” og se hvad SPSS gør.

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

den første ting, vi bemærker, er, at SPSS giver os advarslen vist nedenfor. Dette fortæller os, at der er flere børn til en given far.

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

som SPSS rådgiver, vil vi inspicere resultaterne omhyggeligt. Faktisk ser vi, at resultaterne ikke er, hvad vi ønskede. Far, fusionerede den kun faren med det første barn, og derefter blev følgende børn med de samme dads tildelt manglende værdier for dads information (navn og inc). Da vi brugte underkommandoen /TABLE= i det foregående eksempel, bar SPSS dads-informationen på tværs af alle børnene.

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 .

bestilling af variablerne i den nye fil

du kan bruge underkommandoen /MAP Med kommandoen Tilføj filer til at se rækkefølgen af variablerne i den nye fil, som illustreret nedenfor. Hvis du vil omarrangere rækkefølgen af variablerne i den nye fil, kan du også tilføje underkommandoen /behold til kommandoen Tilføj filer. Variablerne bestilles i den nye fil i den rækkefølge, du viser dem i underkommandoen /KEEP. Hvis du ikke viser alle variablerne i underkommandoen / KEEP, vil de variabler, der ikke er angivet, ikke være til stede i den nye fil. Bemærk også, at du kan liste de første par variabler, hvis de er de eneste, der skal omarrangeres, og derefter bruge nøgleordet alle for at få resten af variablerne inkluderet i den nye fil. De variabler, der ikke er angivet i underkommandoen /KEEP, forbliver i den rækkefølge, de er i de originale filer.

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

som du kan se, er variablerne i den nye fil nu i ordrenavnet famid inc.

5.1 uoverensstemmende poster i en-til-en-fletning

de to datafiler har muligvis poster, der ikke stemmer overens. Nedenfor illustrerer vi dette ved at inkludere en ekstra far (Karl i famid 4), der ikke har en tilsvarende familie, og der er to ekstra familier (5 og 6) i familiefilen, der ikke har en tilsvarende far.

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.

som du ser ovenfor, bruger vi /in=fromdad til at oprette en 0/1 variabel, der angiver, om den resulterende fil indeholder en post med data fra dads-filen. Ligeledes bruger vi / in=fromfam til at angive, om den resulterende fil har en post fra faminc-filen. Listen og CROSSTABS viser os derefter om de uoverensstemmende poster.

udgangen fra LISTEKOMMANDOEN viser os, at når der var uoverensstemmende poster. For famid 4, værdien af fromdad er 1 og fromfam er 0, som vi ville forvente, da der var data fra dads til famid 4, men ingen data fra faminc. Som vi forventer, har denne post også gyldige data for variablerne fra dads-filen (navn og inc) og manglende data for variablerne fra faminc (faminc96 faminc97 og faminc98). Vi ser det omvendte mønster for famid 5 og 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

hvis vi ser på fromdad-og fromfam-variablerne, kan vi se, at der er tre poster, der har matchende data, en der kun har data fra dads, og to poster, der kun har data fra faminc-filen. Den crosstab nedenfor viser os de samme resultater, og er en nemmere måde at optælle matching end manuelt optælling 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

når du matcher filer, foreslår vi, at du bruger denne strategi til at kontrollere matchningen af de to filer. Hvis der er uventede uoverensstemmende poster, skal du undersøge for at forstå årsagen til de uoverensstemmende poster.

du kan bruge Vælg hvis til at fjerne nogle af de ikke-matchende poster. For eksempel, hvis du kun ville føre de poster, hvor farene matchede familieoplysningerne, du kunne skrive

SELECT IF fromdad AND fromfam.LIST.

resultaterne er vist nedenfor, herunder kun de tre matchende poster.

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 uoverensstemmende poster i en-til-mange-fletning

SPSS håndterer inkluderingen af uoverensstemmende poster i en en-til-mange-fletning anderledes end en en-til-en-fletning. Husk, at der i en en-til-mange-fusion er en fil, der har en observation, der matcher mange observationer i den anden fil; lad os henvise til disse som den ene fil og den mange fil. Hvis der er observationer i den ene fil, der ikke svarer til den mange fil, vises disse observationer slet ikke i den flettede fil. Hvis der er observationer i de mange filer, der ikke matcher den ene fil, vises disse poster i den flettede fil. Hvis dette er det, du ønsker, kan du flette filerne som illustreret i Afsnit 3 og bruge /in= som illustreret i det foregående afsnit til at spore matchningen. Men hvis du gerne vil have uoverensstemmende poster fra den ene og mange fil, der begge vises i den flettede fil, kan du bruge den matchende strategi, der er beskrevet nedenfor.

nedenfor bruger vi vores eksempel til at flette dads med børn, og i dette eksempel har vi uoverensstemmende poster i begge filer. Nedenfor matcher vi filerne for at inkludere alle uoverensstemmende poster i den flettede fil. De dele, der er forskellige, er angivet med rødt.

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.

afsnittet i rødt tilføjer et ekstra trin til matchningen. Formålet med dette trin er at tilføje værdier af famid, der kun er i dads-filen til kids-filen. Det gør det ved at lave en en-til-en fusion mellem dadid og børnene og gemmer den fil som temp. Da dadid bare famid af alle dads, tilføjer denne fusion grundlæggende observationer for enhver famid, der er i dads-filen, men ikke i kids-filen, og gemmer dette som temp. Derefter kan vi så fusionere temp med dads2 og temp vil have en famid for hver observation i dads2-filen. Dette sikrer, at den resulterende fil vil omfatte alle observationer fra dads-filen, selvom de ikke har en matchende post i kids-filen. Resultatet er vist nedenfor. Faktisk indeholder filen observationen for far Karl, der ikke har nogen matchende børn. Hvis vi udeladte den ekstra kode i dette trin, ville denne post ikke være inkluderet i denne fil.

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 variabler med samme navn, men forskellige oplysninger

nedenfor har vi filerne med oplysningerne om far og familie, men ser nærmere på navnene på variablerne. I dads-filen er der en variabel kaldet inc98, og i familiefilen er der variabler inc96, inc97 og inc98. Lad os gå videre og flette disse filer og se, hvad SPSS gør.

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.

resultaterne er vist nedenfor. Som du ser, har variablen inc98 dataene fra dads-filen, den fil, der først blev vist i kommandoen MATCH FILES. Når du matcher filer, der har den samme variabel, bruger SPSS værdierne fra den fil, der vises tidligst i kommandoen MATCH filer.

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

der er et par måder, du kan løse dette problem på.

opløsning #1. Den mest oplagte løsning er at vælge variabelnavne i de originale filer, der ikke kommer i konflikt med hinanden. Du kan dog modtage filer, hvor navnene allerede er valgt.

opløsning #2. Du kan omdøbe variablerne i kommandoen MATCH-filer (som omdøber variablerne, før du foretager matchningen). Dette giver dig mulighed for at vælge variabelnavne, der ikke er i konflikt med hinanden, som illustreret nedenfor.

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.

som du kan se nedenfor, blev variablerne omdøbt som vi specificerede.

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 de samme variabler med forskellige ordbogsoplysninger

dette problem svarer til det ovenfor beskrevne. I dette eksempel har vi to variabler med samme navn og de samme oplysninger, men med forskellige ordbogsoplysninger knyttet til dem. Denne ordbog oplysninger kan omfatte værdi etiketter og / eller variable etiketter. Som med eksemplet ovenfor tager SPSS oplysningerne fra den fil, der er anført først i kommandoen MATCH FILES. Der udstedes ingen fejl eller advarselsmeddelelse for at fortælle dig, at oplysningerne fra variablen i den senere fil er gået tabt. Løsningen på dette problem er at liste først i kommandoen MATCH FILES filen med de ordbogsoplysninger, du vil have i den resulterende fil.

5.5 du har kørt kommandoen Tilføj filer, og der skete ikke noget

hvis du kun kører kommandoen Tilføj filer, som vist nedenfor, vil SPSS ikke gøre noget. Du vil dog se en note i nederste højre hjørne af dataeditoren, der siger “transformation afventer”.

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

løsning: løsningen er at tilføje enten kommandoen udfør eller en procedurekommando, der tvinger udførelsen af transformationen, f.eks.

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

Leave a Reply

Din e-mailadresse vil ikke blive publiceret.