Fler svar på lösningar till förra veckans stratifierade urval kommer från 2 SPSS-användare. Stort tack!:
Här är Eriks svar:
Hej igen.
Jag jobbar löpande med stratiferade urval och har använt mig av två olika sätt. Beskriver de nedan utifrån ditt exempel.
Jag har en datafil med hundra variabler och mer än 160 000 poster Jag vill dra slumpmässigt urval stratifierat efter variabeln Åldersgrupp med 1000 personer per strata och kravet vilka som ska slumpas ut är endast arbetslösa mer än 3 månader.
Så här gör jag i grova drag.
Jag tar in utsökningen i spss och kontrollerar att variabler så som datum inte förstörs av SPSS. Har blivit klart svårare att få till det med senare versioner av SPSS. Kontrollerar även typsnitt på de variabler jag ska jobba med, string eller numeric.
Selekterar bort de som inte tillhör målgruppen, dvs här de som är arbetslösa mer än tre månader. Sparar ner filen
Skapar en numerisk variabel som jag döper till urvalsgrupp. Kodar sen urvalsgrupp utifrån vilken åldersgrupp personen hör till (antar att åldersgrupp finns i utsökningen, annars får jag skapa den).
DO IF ((Åldersgrupp = 1)).
RECODE urvalsgrupp (MISSING=1).
END IF.
EXECUTE.
Och så vidare för alla åldersgrupper.
Sen skapar jag en slumpvariabel och sparar ner filen igen
COMPUTE Slumptal=RV.UNIFORM(0,1).
EXECUTE.
RANK VARIABLES=Slumptal (A)
/RANK
/PRINT=YES
/TIES=MEAN.
Sen skapar jag en ny variabel ”Urvalet” och kör fram urvalet enligt:
USE ALL.
COMPUTE filter_$=(Åldersgrupp = 1).
VARIABLE LABELS filter_$ "Åldersgrupp = 1' (FILTER)".
VALUE LABELS filter_$ 0 'Not Selected' 1 'Selected'.
FORMATS filter_$ (f1.0).
FILTER BY filter_$.
EXECUTE.
SORT CASES BY filter_$(D) RSlumpta(A).
IF ($CASENUM <=1200) Urvalet=1.
EXECUTE.
Kör så för alla åldersgrupper och sparar ner den slutliga filen i excelformat för utskick av enkäter via webbenkätverktyg eller papper. Så jag kör oftast bara med en urvalsvariabel som alla grupper kodas in i.
Här är Roberts svar:
Kan inte säga att följande förslag är enklare, men det bygger på en rätt enkel upprepning av några rätt enkla steg. Proceduren utnyttjar den del av Select Cases som ger slumpurval direkt. I syntax ser det ut så här:
*Här förutsätts att det redan finns ett dataset som fått namnet urvalsram.
DATASET ACTIVATE urvalsram.
DATASET COPY urval1.
DATASET ACTIVATE urval1.
FILTER OFF.
USE ALL.
SELECT IF åldersgrupp=1.
SAMPLE 10 from 20.
*Antalet 10 kunde vara 1000 och 20 kunde vara totalt antal i den aktuella åldersgruppen som också uppfyller kravet på arbetslös>3 mån.
DATASET ACTIVATE urvalsram.
DATASET COPY urval2.
DATASET ACTIVATE urval2.
FILTER OFF.
USE ALL.
SELECT IF åldersgrupp=2.
SAMPLE 10 from 20.
DATASET ACTIVATE urvalsram.
DATASET COPY urval3.
DATASET ACTIVATE urval3.
FILTER OFF.
USE ALL.
SELECT IF åldersgrupp=3.
SAMPLE 10 from 20.
DATASET ACTIVATE urvalsram.
DATASET COPY urval4.
DATASET ACTIVATE urval4.
FILTER OFF.
USE ALL.
SELECT IF åldersgrupp=4.
SAMPLE 10 from 20.
DATASET ACTIVATE urvalsram.
DATASET COPY urval5.
DATASET ACTIVATE urval5.
FILTER OFF.
USE ALL.
SELECT IF åldersgrupp=5.
SAMPLE 10 from 20.
*Packa ihop delarna. Med menyerna görs detta med Data/LMerge Files/Add Cases, men jag tror att den varianten bara accepterar två dataset i ett svep. Med syntax kan många fler packas ihop.
ADD FILES
/FILE=urval1
/FILE=urval2
/FILE=urval3
/FILE=urval4
/FILE=urval5.
DATASET NAME urval WINDOW=FRONT.
Tillägg:
Kom på att det saknas en detalj: variabeln åldersgrupp säger ju inget om personen ifråga uppfyller kravet på arbetslöshet. Så det borde petas in en inledande konstruktion typ
COMPUTE arblos=(Arbetslös=1) AND (Arbetslös_längd>3).
COMPUTE grupp=1*(ågrp=1 AND arblos) + 2*(ågrp=2 AND arblos)+3*(ågrp=3 AND arblos)+4*(ågrp=4 AND arblos+5*(ågrp=5 AND arblos).
Den variabeln (arblos) får sedan ersätta åldersgrupp ovan. Har inte testat, men det borde fungera.
Tack för titten!
Inga kommentarer:
Skicka en kommentar