* Вопрос: Как мне рандомизировать наблюдения из разных (несвязанных) выборок чтобы составить пары для T-проверки связанных выборок? * Обратите внимание, что пример файла данных в коде ОТСУТСТВУЕТ. * Условия запуска макроса. * Контрольные переменные (control) имеют целые значения от 0 до 9. * Переменные, задающие выборки (sample), имеют значение 1 (для одной выборки) либо какие-то другие значения (для другой выборки). * Максимальная длина имён контрольных переменных - 7. * (это связано с тем, что в ходе решения к их имени добавляется символ "1"). * В выборках в сумме менее 100,000 наблюдений. * Указанные ограничения могут быть сняты за счёт доработки предлагаемого макроса. * Автор: Raynald Levesque, Raynald@spsstools.net *Измените установку с OFF на ON, если вам нужны более подробные сведения в окне результатов. SET MPRINT=OFF. *////////////////////////////////////////// Начало определения макроса ////////////////////////////. DEFINE !paired (sample =!CHAREND('/') /control =!CHAREND('/') /dv =!CHAREND('/') /fname =!DEFAULT("") !CMDEND) *GET FILE='C:\\temp\\riskfact.sav'. *Создадим единую группирующую переменную * как коды всевозможных комбинаций уровней контрольных переменных. COMPUTE criter=0. !DO !var !IN (!control) + COMPUTE criter=criter*10 + !var. !DOEND. EXECUTE. SELECT IF(~MISSING(criter)). COMPUTE draw=UNIFORM(1). SORT CASES BY !sample criter. RANK VARIABLES=draw (A) BY !sample criter /RANK /PRINT=YES /TIES=MEAN . SORT CASES BY criter rdraw. *Вычислим критерий составления пар из разных выборок. COMPUTE criter2=criter*100000+rdraw. SAVE OUTFILE='C:\\temp\\all_data.sav'. SELECT IF (!sample=1). SAVE OUTFILE='C:\\temp\\normal pop.sav'. GET FILE='C:\\temp\\all_data.sav'. SELECT IF (!sample<>1). !DO !var !IN (!control) + RENAME VARIABLES (!var=!CONCAT(!var,1)). !DOEND. !LET !dv1=!NULL. !DO !var !IN (!dv) + RENAME VARIABLES (!var=!CONCAT(!var,1)). + !LET !dv1=!CONCAT(!dv1," ",!var,1) !DOEND. RENAME VARIABLES (rdraw=rdraw1). SAVE OUTFILE='C:\\temp\\pathological pop.sav'. MATCH FILES /FILE=* /FILE='C:\\temp\\normal pop.sav' /RENAME (!sample = d0) /BY criter2 /DROP=d0. * Next line is to keep only cases which have a match. SELECT IF (~MISSING(!dv) AND ~MISSING(!dv1)). EXECUTE. !IF (!LENGTH(!fname) !NE 0) !THEN SAVE OUTFILE=!QUOTE(!CONCAT('C:\\temp\\',!fname,'.sav')). !IFEND T-TEST PAIRS= !dv WITH !dv1 (PAIRED) /CRITERIA=CIN(.95) /MISSING=ANALYSIS. !ENDDEFINE. *////////////////////////////////////////// Конец определения макроса /////////////////////////////////////. **** Пример 1: вызов макроса для подвыборок labfibg ****. !paired sample =labfibg /control =altgrp1 sex rr2grp diabet nikotin /dv = Іbag Іher /fname =labfibg controling for 5 var. *Макропеременные: *sample =переменная, задающая выборки. *control =контрольные переменные. *dv =зависимые переменные. *fname =имя файла для записи рандомизированных пар. * (оставьте этот параметр пустым, если сохранение результата рандомизации не требуется). **** Пример 2: вызов макроса для подвыборок l_cholgr ****. !paired sample = l_cholgr /control =altgrp1 sex rr2grp nikotin gewicht /dv = Іbag Іher /fname =. * Примеч. к примеру 2: параметр fname остался пустым - результаты рандомизации не будут сохранены в отдельный файл.