* Опубликован: 09.12.2005. * RL написал этот синтаксис в ответ на вопрос в телеконференции 1 апреля 2000. ********************************************. *ВОПРОС: >Я провожу симуляционное исследование в SPSS 9.0, которое включает генерации выборок >(скажем, объёма N = 100) с двоичными переменными и затем - изучение их взаимосвязи >Псевдокод может выглядеть примерно так: > >new file . >input program . >loop #i = 1 to 100. >compute x, двоичная переменная >compute y, двоичная переменная, каким-то образом связаная с x >end loop . >...etc. >crosstabs y by x /...... > >Приведённый выше код должен находиться в цикле !do loop макроса таким образом, чтобы я мог генерировать >большое число выборок, например 10 000. Проблема в том, что я хочу записать результаты >кросстабуляции для каждой выборки во внешний файл. >Здесь я сталкиваюсь с трудностями: когда я записываю результаты во внешний файл через /write = ..., внешний файл реинициализируется после построения каждой перекрёстной таблицы. В результате в файле оказываются результаты кросстабуляции лишь для последней выборки. >Я думал, получится это обойти, указывая в качестве имени внешнего файла '*', таким образом записывая все результаты в текущий файл, но и тут неудача, т.к. для команды crosstabs/write = ... звёздочка оказывается недопустимым именем файла. > >Кто-нибудь знает как заставить это работать? > ******************************************. *ОТВЕТ. DEFINE !DOIT(size=!TOKENS(1) /nbrec=!TOKENS(1)) !DO !count=1 !TO !size new file . input program . loop #i = 1 to !nbrec. compute x=TRUNC(UNIFORM(1)*2). compute y=TRUNC(UNIFORM(1)*2). end case. end loop . end file. end input program. VECTOR cell(4F8). COMPUTE cell(1+x*2+y)=1. COMPUTE numb=!count. AGGREGATE /OUTFILE=* /BREAK=numb /cell_00 = SUM(cell1) /cell_01 = SUM(cell2) /cell_10 = SUM(cell3) /cell_11 = SUM(cell4). /* Cell_00 содержит число наблюдений, где x=0 и y=0./ /* Cell_01 содержит число наблюдений, где x=0 и y=1./ /* Cell_10 содержит число наблюдений, где x=1 и y=0./ /* Cell_11 содержит число наблюдений, где x=1 и y=1./ LIST. !IF (!count=1) !THEN SAVE OUTFILE='sample.sav' /COMPRESSED. !ELSE ADD FILES /FILE=* /FILE='sample.sav'. SAVE OUTFILE='sample.sav' /COMPRESSED. !IFEND. !DOEND. !ENDDEFINE. !DOIT size=3 nbrec=200. GET FILE='sample.sav'.