Match sammenslåing av datafiler / Spss Læringsmoduler
Innledning
når du har to datafiler, kan du kombinere dem ved å slå dem sammen side om side, og matche observasjoner basert på en identifikator. For eksempel, under har vi en fil som inneholder dads, og vi har en fil som inneholder faminc. Vi ønsker å matche flette filene sammen slik at vi har pappaer observasjon på samme linje med faminc observasjon basert på nøkkelvariabelen 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
etter kamp sammenslåing pappaer og faminc, dataene vil se slik ut.
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 merge
La oss starte med å lage filene som vi skal slå sammen. Nedenfor lager vi filene 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".
resultatet av disse uttalelsene er vist nedenfor, og bekrefter at vi har lest dataene riktig.
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
det er tre trinn for å matche flette pappaer.sav med faminc.sav. (Merk at dette er en til en fusjon fordi det er en til en korrespondanse mellom dads og faminc records.) Disse tre trinnene er illustrert nedenfor.
- Bruk SORTERINGSSAKER til å sortere dads på famid og lagre den filen (vi vil kalle det dads2.sav)
- Bruk SORTER TILFELLER å sortere faminc på famid og lagre filen (vi vil kalle det faminc2.sav)
- Bruk SAMSVARSFILER til å slå sammen dads2.sav og faminc2.sav-filer basert på famid
Nedenfor viser vi kommandoene for å utføre sammenslåingen.
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.
utgangen nedenfor viser at kampfusjonen fungerte riktig.
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 flett
det neste eksemplet vurderer en til mange flett der en observasjon i en fil kan ha flere samsvarende poster i en annen fil. Tenk deg at vi hadde en fil med pappaer som vi så i forrige eksempel, og vi hadde en fil med barn der en far kunne ha mer enn ett barn. Du ser hvorfor dette kalles en til mange fusjonere siden du matcher en pappa observasjon til en eller flere (mange) barn observasjoner. Husk at dads-filen er filen med en observasjon, og kids-filen er den med mange observasjoner. Nedenfor lager vi datafilen for dads og for barna.
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, trinnene for å gjøre en til mange flette er lik en til en flette som vi så ovenfor.
- Bruk SORTER SAKER VED å sortere dads på famid OG lagre den filen (vi vil kalle det dads2)
- Bruk SORTER SAKER VED å sortere barn på famid og lagre den filen (vi vil kalle det kids2)
- Bruk MATCH FILER for å slå sammen dads2 og kids2 filer. Men siden dads-filen er filen med en observasjon, bruk /TABLE= » dads2.sav», ikke /FIL= » dads2.sav » for å spesifisere 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.
utgangen nedenfor viser at denne sammenslåingen fungerte som vi håpet.
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
hovedforskjellen mellom en til en fletting og en til mange fletting er at du må bruke / TABLE= » dads2.sav «i stedet for / FILE=» dads2.sav». For dataene dine, når du gjør en til mange fletter, spør deg selv hvilken fil som spiller rollen som en (i en til mange). For den filen, bruk / TABLE = i stedet for / FILE=.
La oss med vilje gjøre en feil og bruke / FILE= » dads2.sav » og se hva SPSS gjør.
MATCH FILES /FILE="kids2.sav" /FILE="dads2.sav" /BY famid.LIST.
Det første vi legger merke til er AT SPSS gir oss advarselen vist nedenfor. Dette forteller oss at det er flere barn for en gitt 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 anbefaler, vil vi inspisere resultatene nøye. Faktisk ser vi at resultatene ikke er det vi ønsket. Da det var flere barn per far, fusjonerte det bare pappa med det første barnet, og deretter ble de følgende barna med samme far tildelt manglende verdier for dads-informasjonen (navn og inc). Når VI brukte /TABLE= subcommand i forrige eksempel, bar SPSS dads informasjonen på tvers av alle barna.
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 av variablene i den nye filen
du kan bruke underkommandoen /MAP med KOMMANDOEN LEGG TIL FILER for å se rekkefølgen på variablene i den nye filen, som vist nedenfor. Hvis du vil omorganisere rekkefølgen på variablene i den nye filen, kan du også legge til / KEEP-underkommandoen i KOMMANDOEN LEGG TIL FILER. Variablene vil bli bestilt i den nye filen i den rekkefølgen du lister dem på / KEEP-underkommandoen. Hvis du ikke viser alle variablene i / KEEP-underkommandoen, vil ikke variablene som ikke er oppført, være til stede i den nye filen. Vær også oppmerksom på at du kan liste de første variablene hvis de er de eneste som må omordnes, og bruk deretter søkeordet ALLE FOR å få resten av variablene inkludert i den nye filen. Variablene som ikke er angitt i / KEEP-underkommandoen, forblir i den rekkefølgen de er i originalfilene.
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 NAMEFAMID FAMID FAMIDINC INC INC
som du kan se, variablene i den nye filen er nå i ordrenavnet, famid inc.
5.1 Feilaktige poster i en-til-en-fletting
de to datafilene kan ha poster som ikke samsvarer. Nedenfor illustrerer vi dette ved å inkludere en ekstra pappa (Karl i famid 4) som ikke har en tilsvarende familie, og det er to ekstra familier (5 og 6) i familiefilen som 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, bruker vi / in=fromdad til å lage en 0/1 variabel som angir om den resulterende filen inneholder en post med data fra dads-filen. På samme måte bruker vi / in=fromfam for å indikere om den resulterende filen har en post fra faminc-filen. LISTEN og KRYSSTABLENE viser oss deretter om de feilaktige postene.
utgangen fra LISTEKOMMANDOEN viser oss at når det var feilaktige poster. For famid 4 er verdien av fromdad 1 og fromfam er 0, som vi forventer siden det var data fra dads for famid 4, men ingen data fra faminc. Også, som vi forventer, har denne posten gyldige data for variablene fra dads-filen (navn og inc) og manglende data for variablene fra faminc (faminc96 faminc97 og faminc98). Vi ser det motsatte mønsteret 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 variabler, vi kan se at det er tre poster som har matchende data, en som har data fra pappaer bare, og to poster som har data fra faminc filen bare. Krysstabellen nedenfor viser oss de samme resultatene,og er en enklere måte å tallying matching enn manuelt tallying 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 samsvarende filer, foreslår vi at du bruker denne strategien for å sjekke samsvar av de to filene. Hvis det er uventede feilaktige poster, bør du undersøke for å forstå årsaken til feilaktige poster.
DU kan bruke SELECT IF til å eliminere noen av de ikke-samsvarende postene. For eksempel, hvis du ønsket å holde bare postene der pappaer matchet med familieinformasjon, du kan skrive
SELECT IF fromdad AND fromfam.LIST.
resultatene er vist nedenfor, inkludert bare de tre matchende postene.
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 Feilaktige poster i en-til-mange-fletting
SPSS håndterer inkludering av feilaktige poster i en en-til-mange-fletting på en annen måte enn en en-til-en-fletting. Husk at i en en-til-mange-fusjon er det en fil som har en observasjon som samsvarer med mange observasjoner i den andre filen; la oss referere til disse som den ene filen og den mange filen. Hvis det er observasjoner i den ene filen som ikke samsvarer med mange-filen, vil disse observasjonene ikke vises i den sammenslåtte filen i det hele tatt. Hvis det er observasjoner i mange-filen som ikke samsvarer med den ene filen, vises disse postene i den sammenslåtte filen. Hvis dette er det du ønsker, kan du slå sammen filene som illustrert i Avsnitt 3, og bruke /IN= som illustrert i forrige seksjon for å spore samsvarende. Hvis du imidlertid vil at feilaktige poster fra en og mange-filen skal vises i den sammenslåtte filen, kan du bruke samsvarsstrategien som er beskrevet nedenfor.
nedenfor bruker vi vårt eksempel til å slå sammen pappaer med barn, og i dette eksemplet har vi feilaktige poster i begge filene. Nedenfor matcher vi filene for å inkludere alle feilaktige poster i den sammenslåtte filen. Delene som er forskjellige er angitt i 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.
seksjonen i rødt legger til et ekstra trinn i matchingen. Hensikten med dette trinnet er å legge til noen verdier av famid som bare er i dads-filen til kids-filen. Det gjør ved å gjøre en en-til-en fusjon mellom dadid og barna og lagrer den filen som temp. Siden dadid bare famid av alle dads, legger denne flettingen i utgangspunktet observasjoner for enhver famid som er i dads-filen, men ikke i kids-filen, og lagrer dette som temp. Deretter kan vi slå sammen temp med dads2 og temp vil ha en famid for hver observasjon i dads2-filen. Dette sikrer at den resulterende filen vil inkludere alle observasjoner fra dads-filen, selv om de ikke har en matchende post i kids-filen. Resultatet er vist nedenfor. Faktisk inneholder filen observasjonen for pappa Karl som ikke har noen matchende barn. Hvis vi utelot den ekstra koden i dette trinnet, ville den posten ikke vært inkludert i denne filen.
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 forskjellig informasjon
Nedenfor har vi filene med informasjonen om far og familie, men se nærmere på navnene på variablene. I dads-filen er det en variabel som heter inc98, og i familiefilen er det variabler inc96, inc97 og inc98. La oss gå videre og slå sammen disse filene og se hva SPSS gjø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.
resultatene er vist nedenfor. Som du ser, har variabelen inc98 dataene fra dads-filen, filen som dukket opp først i KOMMANDOEN MATCH FILES. NÅR du matcher filer som har samme variabel, BRUKER SPSS verdiene fra filen som vises tidligst i KOMMANDOEN TILPASS 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
Det er et par måter du kan løse dette problemet på.
Løsning #1. Den mest åpenbare løsningen er å velge variabelnavn i originalfilene som ikke kommer i konflikt med hverandre. Du kan imidlertid motta filer der navnene allerede er valgt.
Løsning # 2. Du kan endre navn på variablene i KOMMANDOEN MATCH FILES (som omdøper variablene før du gjør samsvarende). Dette lar deg velge variable navn som ikke er i konflikt med hverandre, som illustrert 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, ble variablene omdøpt som vi angav.
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 variablene med forskjellig ordbokinformasjon
dette problemet ligner det som er skissert ovenfor. I dette eksemplet har vi to variabler med samme navn og samme informasjon, men med forskjellig ordbokinformasjon knyttet til dem. Denne ordbokinformasjonen kan inneholde verdietiketter og / eller variable etiketter. SOM med eksemplet ovenfor, VIL SPSS ta informasjonen fra filen som er oppført først i KOMMANDOEN MATCH FILES. Ingen feil eller advarsel vil bli utstedt for å fortelle deg at informasjonen fra variabelen i den senere filen har gått tapt. Løsningen på dette problemet er å liste først I KOMMANDOEN MATCH FILES filen med ordbokinformasjonen du vil ha i den resulterende filen.
5.5 du har kjørt KOMMANDOEN LEGG TIL FILER, og ingenting skjedde
hvis du bare kjører KOMMANDOEN LEGG TIL FILER, SOM vist nedenfor, VIL SPSS ikke gjøre noe. Du vil imidlertid se et notat nederst til høyre i dataredigeringsprogrammet som sier «transformasjon venter».
ADD FILES FILE="dads.sav" /FILE="moms.sav"
Løsning: løsningen er å legge til kommandoen kjør eller en prosedyrekommando som vil tvinge utførelsen av transformasjonen, for eksempel kommandoen liste eller kommandoen krysstabell.
ADD FILES FILE="dads.sav" /FILE="moms.sav"execute.