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
compute @total = !N.
!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.
/* example of macro call.
!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
]
.