Úloha:
- V SPSS chceme vážit podle několika nezávislých kritérií.
- např. podle pohlaví, věku, regionu, velikosti místa bydliště, ekonomické aktivity atd.
Polemika:
- Přímo v SPSS není žádný jednoduchý nástroj pro takovýto způsob vážení.
- Nemáte nebo nechcete tvořit vlastní vážicí aplikaci, pro kterou se obvykle musí vytvářet speciální datový soubor s podklady pro vážení, v aplikaci spočítat váhy a vytvořit další datový soubor s váhami, který se posléze importuje zpět do SPSS dat. Uživatelský komfort zde není příliš vysoký.
- To nás štvalo a proto jsme hledali snadnější řešení.
Řešení s využitím SPSS makra:
- Stáhněte si vážicí makro funkční pro SPSS verze 18 a vyšší. Balíček obsahuje testovací data. Komentáře a vysvětlivky k používání jsou uvedeny přímo v makru.
- Algoritmus je založen na původním řešení od člověka jménem João Duarte. Více informací na odkaze: http://www.listserv.uga.edu/cgi-bin/wa?A2=ind0902&L=spssx-l&D=0&P=9533.
- Starší verze vážicího makra pro verzi SPSS 18 a vyšší.
- Starší verze vážicího makra pro verzi SPSS 16. Rozdíl je v tom, že se v novějších verzích SPSS změnily názvy parametrů v příkazu AGGREGATE.
- Další vážicí makro od Kirilla Orlova najdete zde: rivita.ru/spssmacros_en.shtml. Hledejte odstavec “Weighting groups”. Tohle makro nabízí některé další možností nastavení a běží ve verzi SPSS 13 nebo vyšší.
- Zkoušejte, testujte a pište komentáře, jestli makro funguje.
DEFINE !mac_weight (w_vars = !ENCLOSE('[',']') / w_var = !ENCLOSE('[',']') / N = !ENCLOSE('[',']') / w_control = !ENCLOSE('[',']') )
weight off.
compute !w_var = 1.
variable label !w_var 'Weight'.
aggregate
/outfile=* mode=addvariables overwritevars=yes
/@total 'Universum' = sum(!w_var).
compute @real = 1.
compute @q_real = 100 * @real / @total.
execute.
!IF (!N~=!NULL) !THEN
compute @total = !N.
!IFEND
!LET !w_num_param = !NULL
!DO !w_pom !IN (!w_vars)
!LET !w_num_param = !CONCAT(!w_num_param,"1")
!DOEND
!LET !hlp_vars = !w_vars
!DO !w_hlp = 1 !TO !UNQUOTE(!LENGTH(!w_num_param)) !BY 3
!LET !hlp_var = !HEAD(!hlp_vars)
!LET !hlp_vars = !TAIL(!hlp_vars)
!LET !hlp_code = !HEAD(!hlp_vars)
!LET !hlp_vars = !TAIL(!hlp_vars)
!LET !hlp_weight = !HEAD(!hlp_vars)
!LET !hlp_vars = !TAIL(!hlp_vars)
recode !hlp_var (!hlp_code = !hlp_weight) into !CONCAT("@w",!hlp_var).
!DOEND
execute.
!LET !hlp_vars = !w_vars
!LET !w_hlp_crit = !NULL
!DO !w_hlp = 1 !TO !UNQUOTE(!LENGTH(!w_num_param)) !BY 3
!LET !hlp_var = !HEAD(!hlp_vars)
!LET !hlp_vars = !TAIL(!TAIL(!TAIL(!hlp_vars)))
!IF (!w_hlp_crit ~= !hlp_var) !THEN
!LET !w_hlp_crit = !hlp_var
compute !CONCAT("@ww",!w_hlp_crit) = !CONCAT("@w",!w_hlp_crit).
compute !CONCAT("@www",!w_hlp_crit) = !CONCAT("@w",!w_hlp_crit).
sort cases by !w_hlp_crit.
if (!w_hlp_crit= lag(!w_hlp_crit)) !CONCAT("@ww",!w_hlp_crit) = lag(!CONCAT("@ww",!w_hlp_crit)).
if (!w_hlp_crit= lag(!w_hlp_crit)) !CONCAT("@www",!w_hlp_crit) = lag(!CONCAT("@www",!w_hlp_crit)).
if (!w_hlp_crit<>lag(!w_hlp_crit)) !CONCAT("@ww",!w_hlp_crit) = sum(lag(!CONCAT("@ww",!w_hlp_crit)),!CONCAT("@w",!w_hlp_crit)).
if (!w_hlp_crit<>lag(!w_hlp_crit)) !CONCAT("@www",!w_hlp_crit) = sum(lag(!CONCAT("@www",!w_hlp_crit)),!CONCAT("@w",!w_hlp_crit)).
aggregate
/outfile=* mode=addvariables overwritevars=yes
/!CONCAT("@ww",!w_hlp_crit) = max(!CONCAT("@ww",!w_hlp_crit))
/!CONCAT("@www",!w_hlp_crit) = max(!CONCAT("@www",!w_hlp_crit)).
compute !CONCAT("@ww",!w_hlp_crit) = @total * !CONCAT("@w",!w_hlp_crit) / !CONCAT("@ww",!w_hlp_crit).
compute !CONCAT("@www",!w_hlp_crit) = !CONCAT("@w",!w_hlp_crit) / !CONCAT("@www",!w_hlp_crit).
aggregate
/outfile=* mode=addvariables overwritevars=yes
/break = !w_hlp_crit
/@number_of_resp = sum(!w_var).
compute !CONCAT("@q_ww",!w_hlp_crit) = !CONCAT("@ww",!w_hlp_crit) / @number_of_resp.
compute !CONCAT("@q_www",!w_hlp_crit) = 100 * !CONCAT("@www",!w_hlp_crit) / @number_of_resp.
!IFEND
!DOEND
execute.
!LET !w_hlp_crit = !NULL
!DO !w_hlp1 = 1 !TO !UNQUOTE(!LENGTH(!w_num_param)) !BY 3
!LET !hlp_vars = !w_vars
!DO !w_hlp2 = 1 !TO !UNQUOTE(!LENGTH(!w_num_param)) !BY 3
!LET !hlp_var = !HEAD(!hlp_vars)
!LET !hlp_vars = !TAIL(!TAIL(!TAIL(!hlp_vars)))
!IF (!w_hlp_crit ~= !hlp_var) !THEN
!LET !w_hlp_crit = !hlp_var
aggregate /outfile=* mode=addvariables overwritevars=yes
/break = !w_hlp_crit
/@number_of_resp = sum(!w_var).
compute !w_var = !w_var * (!CONCAT("@ww",!w_hlp_crit) / @number_of_resp).
execute.
!IFEND
!DOEND
!DOEND
!IF (!UPCASE(!w_control)="YES") !THEN
!IF (!N~=!NULL) !THEN
compute @total = !N.
!IFEND
!LET !hlp_vars = !w_vars
!LET !w_hlp_crit = !NULL
!DO !w_hlp = 1 !TO !UNQUOTE(!LENGTH(!w_num_param)) !BY 3
!LET !hlp_var = !HEAD(!hlp_vars)
!LET !hlp_vars = !TAIL(!TAIL(!TAIL(!hlp_vars)))
!IF (!w_hlp_crit ~= !hlp_var) !THEN
!LET !w_hlp_crit = !hlp_var
compute !CONCAT("@q_",!w_var) = 100 * !w_var / @total.
ctables
/vlabels variables=@q_real !CONCAT("@q_www",!w_hlp_crit) !CONCAT("@q_",!w_var) @real !CONCAT("@q_ww",!w_hlp_crit) !w_var display=none
/vlabels variables=!w_hlp_crit display=label
/table
@q_real [s][sum '% (Real)' F40.2] +
!CONCAT("@q_www",!w_hlp_crit) [s][sum '% (Quote)' F40.2] +
!CONCAT("@q_",!w_var) [s][sum '% (Weighted)' F40.2] +
@real [s][sum 'Number (Real)' F40.2] +
!CONCAT("@q_ww",!w_hlp_crit) [s][sum 'Number (Quote)' F40.2] +
!w_var [s][sum 'Number (Weighted)' F40.2] +
!w_var [s][minimum 'Min Weight' F40.2] +
!w_var [s][maximum 'Max Weight' F40.2]
by !w_hlp_crit [c]
/titles title = !QUOTE(!CONCAT("Checking of Weights - ",!w_hlp_crit))
/slabels position=row
/categories variables=!w_hlp_crit order=a key=value empty=include total=yes position=before.
!IFEND
!DOEND
!ELSE
descriptives weight /statistics = min max.
!IFEND
!LET !w_hlp_crit = !NULL
!LET !hlp_vars = !w_vars
!DO !w_hlp = 1 !TO !UNQUOTE(!LENGTH(!w_num_param)) !BY 3
!LET !hlp_var = !HEAD(!hlp_vars)
!LET !hlp_vars = !TAIL(!TAIL(!TAIL(!hlp_vars)))
!IF (!w_hlp_crit ~= !hlp_var) !THEN
!LET !w_hlp_crit = !hlp_var
delete variables !CONCAT("@w",!w_hlp_crit) !CONCAT("@ww",!w_hlp_crit) !CONCAT("@www",!w_hlp_crit) !CONCAT("@q_ww",!w_hlp_crit) !CONCAT("@q_www",!w_hlp_crit).
!IFEND
!DOEND
delete variables @total @real @q_real @number_of_resp !CONCAT("@q_",!w_var).
weight by !w_var.
!ENDDEFINE.
/* ukázka volání makra.
!mac_weight
N [1000]
w_control [yes]
w_var [weight]
w_vars [
q1 1 0.5
q1 2 0.5
q2 1 0.25
q2 2 0.4
q2 3 0.35
]
.
vyzkousel jsem si to, moc se mi to libi.
pouzivam vlastni vazeni, ktere jsem si napsal pred mnoha lety v excelu a ktere pracuje na pricipu chi-quatrat test. Pri srovnani jsem zjistil, ze me vazeni nema takovy rozptyl, cili vahy jsou vice soustredene kolem 1.
na druhe strane ale, Vase vazeni je flexibilnejsi, protoze nevyzaduje Transport dat do excelu a je mozno ho dynamicky pouzit i behem vyhodnocovani bez toho, ze by se musely data transportovat do excelu, tam vazit a znovu v spss nacitat.
Tato dynamicnost dela Vase reseni velmi zajimave a atraktivni.
Jeste jednou:
alle Achtung !.
Note that there is a free extension command, SPSSINC RAKE, available from the SPSS Community website (http://www.ibm.com/developerworks/spssdevcentral) that rakes weights to control totals in up to 10 dimensions and provides a measure of sample efficiency.
It includes a dialog box interface and standard SPSS syntax. This extension requires the Python plugin and the Advanced Statistics option. As of Statistics version 22, this procedure is installed as part of the Python Essentials.
Nice and original work. I compared its results with my macro on rivita.ru/spssmacros_en.shtml and found they were the same. I replied to you at http://lnkd.in/P4-sxP