Matcha sammanslagning av datafiler / SPSS-Inlärningsmoduler

introduktion

när du har två datafiler kan du kombinera dem genom att slå samman dem sida vid sida och matcha observationer baserat på en identifierare. Nedan har vi till exempel en fil som innehåller pappor och vi har en fil som innehåller faminc. Vi skulle vilja matcha sammanfoga filerna tillsammans så vi har pappans observation på samma linje med faminc-observationen baserad på nyckelvariabeln 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 match sammanslagning pappor och faminc, data skulle se ut så här.

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

One-to-one merge

Låt oss börja med att skapa de filer som vi kommer att slå samman. Nedan skapar vi filerna pappor.sav och 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 dessa uttalanden visas nedan, vilket bekräftar att vi har läst uppgifterna 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

det finns tre steg för att matcha merge dads.sav med faminc.sav. (Observera att detta är en en till en sammanslagning eftersom det finns en en till en korrespondens mellan pappor och faminc poster.) Dessa tre steg illustreras nedan.

  1. använd sortera fall att sortera pappor på famid och spara den filen (Vi kommer att kalla det dads2.sav)
  2. använd SORTERINGSFALL för att sortera faminc på famid och spara den filen (vi kallar den faminc2.sav)
  3. använd MATCH-filer för att slå samman dads2.sav och faminc2.sav-filer baserade på famid

nedan visar vi kommandona för att utföra sammanslagningen.

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.

utgången nedan visar att matchningen fungerade 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-till-många sammanfogning

nästa exempel betraktar en till många sammanfogning där en observation i en fil kan ha flera matchande poster i en annan fil. Föreställ dig att vi hade en fil med pappor som vi såg i föregående exempel, och vi hade en fil med barn där en pappa kunde ha mer än ett barn. Du ser varför detta kallas en till många samman eftersom du matchar en pappa observation till en eller flera (många) barn observationer. Kom ihåg att dads-filen är filen med en observation, och kids-filen är den med många observationer. Nedan skapar vi datafilen för papporna och för barnen.

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 nedan, stegen för att göra en en till många sammanslagning liknar den till en sammanslagning som vi såg ovan.

  1. använd sortera fall av att sortera pappor på famid och spara den filen (Vi kommer att kalla det dads2)
  2. använd sortera fall av att sortera barn på famid och spara den filen (Vi kommer att kalla det kids2)
  3. använd matcha filer för att slå samman dads2 och kids2 filer. Eftersom dads-filen är filen med en observation, använd /TABLE=”dads2.sav”, inte /FILE= ” dads2.sav ” för att ange 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.

utgången nedan visar att denna sammanslagning fungerade som vi hoppades.

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

den viktigaste skillnaden mellan en en till en sammanslagning och en till många sammanslagning är att du måste använda /TABLE=”dads2.sav ” istället för / FILE=”dads2.sav”. För dina data, när du gör en en till många sammanslagning, fråga dig själv vilken fil som spelar rollen som en (i en till många). För den filen, använd /TABLE = istället för / FILE=.

Låt oss avsiktligt göra ett fel och använda /FILE=”dads2.sav ” och se vad SPSS gör.

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

det första vi märker är att SPSS ger oss varningen som visas nedan. Detta säger oss att det finns flera barn för en viss pappa.

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 rekommenderar kommer vi att inspektera resultaten noggrant. Vi ser faktiskt att resultaten inte är vad vi önskade. När det fanns flera barn per pappa slog det bara ihop pappan med det första barnet, och sedan tilldelades följande barn med samma pappor saknade värden för pappans information (namn och inc). När vi använde underkommandot /TABLE= i föregående exempel Bar SPSS pappans information över alla barnen.

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 .

beställa variablerna i den nya filen

du kan använda underkommandot /MAP Med kommandot Lägg till filer för att se ordningen på variablerna i den nya filen, som illustreras nedan. Om du vill ordna om ordningen på variablerna i den nya filen kan du också lägga till underkommandot /KEEP i kommandot Lägg till filer. Variablerna kommer att beställas i den nya filen i den ordning som du listar dem på underkommandot /KEEP. Om du inte listar alla variabler i underkommandot / KEEP finns inte variablerna i den nya filen. Observera också att du kan lista de första variablerna om de är de enda som behöver ordnas om och sedan använda nyckelordet alla för att få resten av variablerna inkluderade i den nya filen. Variablerna som inte anges i underkommandot /KEEP förblir i den ordning de finns i originalfilerna.

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 är variablerna i den nya filen nu i ordernamnet famid inc.

5.1 felaktiga poster i en-till-en-sammanfogning

de två datafilerna har kan ha poster som inte matchar. Nedan illustrerar vi detta genom att inkludera en extra pappa (Karl I famid 4) som inte har en motsvarande familj, och det finns två extra familjer (5 och 6) i familjefilen som inte har en motsvarande pappa.

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 ovan använder vi / in=fromdad för att skapa en 0/1-variabel som indikerar om den resulterande filen innehåller en post med data från dads-filen. På samma sätt använder vi /in=fromfam för att ange om den resulterande filen har en post från faminc-filen. Listan och KORSTABELLERNA visar oss sedan om de felaktiga posterna.

utmatningen från LISTKOMMANDOT visar oss att när det fanns felaktiga poster. För famid 4 är värdet av fromdad 1 och fromfam är 0, som vi förväntar oss eftersom det fanns data från pappor för famid 4, men inga data från faminc. Som vi förväntar oss har denna post också giltiga data för variablerna från dads-filen (namn och inc) och saknade data för variablerna från faminc (faminc96 faminc97 och faminc98). Vi ser det omvända mönstret för famid 5 och 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

om vi tittar på variablerna fromdad och fromfam kan vi se att det finns tre poster som har matchande data, en som bara har data från papporna och två poster som bara har data från faminc-filen. Korstabellen nedan visar oss samma resultat, och är ett enklare sätt att avräkna matchningen än att manuellt avräkna matchningen.

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 matchar filer föreslår vi att du använder den här strategin för att kontrollera matchningen av de två filerna. Om det finns oväntade felaktiga poster, bör du undersöka för att förstå orsaken till felaktiga poster.

du kan använda Välj om för att eliminera några av de poster som inte matchar. Till exempel, om du ville behålla bara posterna där papporna matchade familjeinformationen, du kan skriva

SELECT IF fromdad AND fromfam.LIST.

resultaten visas nedan, inklusive bara de tre matchande posterna.

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 mismatch poster i en-till-många merge

SPSS hanterar införandet av inkompatibla poster i en en-till-många merge annorlunda än en en-till-en merge. Kom ihåg att i en en-till-många-sammanslagning finns det en fil som har en observation som matchar många observationer i den andra filen; låt oss hänvisa till dessa som den ena filen och den många filen. Om det finns observationer i en fil som inte stämmer överens med många, kommer dessa observationer inte att visas i den sammanslagna filen alls. Om det finns observationer i den många filen som inte matchar den ena filen visas dessa poster i den sammanslagna filen. Om det här är vad du önskar kan du slå samman filerna som illustreras i Avsnitt 3 och använda /in= som illustreras i föregående avsnitt för att spåra matchningen. Men om du vill att inkompatibla poster från den ena och många filen ska visas i den sammanslagna filen kan du använda matchningsstrategin som beskrivs nedan.

nedan använder vi vårt exempel för att slå samman pappor med barn, och i det här exemplet har vi felaktiga poster i båda filerna. Nedan matchar vi filerna för att inkludera alla felaktiga poster i den sammanslagna filen. De delar som är olika anges i rött.

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.

avsnittet i rött lägger till ett extra steg till matchningen. Syftet med detta steg är att lägga till några värden på famid som bara finns i dads-filen till kids-filen. Det gör genom att göra en en-till-en sammanslagning mellan dadid och barnen och sparar den filen som temp. Eftersom dadid bara famid av alla pappor, lägger denna sammanslagning i grunden till observationer för alla famid som finns i dads-filen men inte i kids-filen och sparar detta som temp. Sedan kan vi sedan slå samman temp med dads2 och temp kommer att ha en famid för varje observation i dads2-filen. Detta säkerställer att den resulterande filen kommer att innehålla alla observationer från dads-filen, även om de inte har en matchande post i kids-filen. Resultatet visas nedan. Faktum är att filen innehåller observationen för pappan Karl som inte har några matchande barn. Om vi utelämnade den extra koden i det här steget skulle den posten inte ha inkluderats i den här 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 samma namn, men olika uppgifter

nedan har vi filerna med informationen om pappor och familj, men titta närmare på namnen på variablerna. I dads-filen finns en variabel som heter inc98, och i familjefilen finns variabler inc96, inc97 och inc98. Låt oss gå vidare och slå samman dessa filer och se vad 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.

resultaten visas nedan. Som du ser har variabeln inc98 data från dads-filen, filen som visades först i kommandot MATCH FILES. När du matchar filer som har samma variabel använder SPSS värdena från filen som visas tidigast i kommandot matcha 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 finns ett par sätt att lösa detta problem.

lösning #1. Den mest uppenbara lösningen är att välja variabla namn i originalfilerna som inte kommer i konflikt med varandra. Du kan dock få filer där namnen redan har valts.

lösning # 2. Du kan byta namn på variablerna i kommandot matcha filer (som byter namn på variablerna innan du gör matchningen). Detta låter dig välja variabelnamn som inte står i konflikt med varandra, som illustreras nedan.

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 nedan döptes variablerna om 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 samma variabler med olika ordboksinformation

detta problem liknar det som beskrivs ovan. I det här exemplet har vi två variabler med samma namn och samma information, men med olika ordboksinformation associerade med dem. Denna ordboksinformation kan innehålla värdeetiketter och / eller variabla etiketter. Som med exemplet ovan tar SPSS informationen från filen som listas först i kommandot MATCH FILES. Inget fel eller varningsmeddelande kommer att utfärdas för att låta dig veta att informationen från variabeln i den senare filen har gått förlorad. Lösningen på detta problem är att lista först i kommandot matcha filer filen med den ordboksinformation som du vill ha i den resulterande filen.

5.5 du har kört kommandot Lägg till filer, och ingenting hände

om du bara kör kommandot Lägg till filer, som visas nedan, kommer SPSS inte att göra någonting. Du kommer dock att se en anteckning i det nedre högra hörnet av dataredigeraren som säger ”transformation väntar”.

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

lösning: lösningen är att lägga till antingen exekveringskommandot eller ett procedurkommando som tvingar exekveringen av transformationen, till exempel listkommandot eller korstabellkommandot.

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

Leave a Reply

Din e-postadress kommer inte publiceras.