* Опубликован: 30.12.2005. * (Вопрос) Мне нужно симулировать случайные переменные, представляющие собой триады чисел: var1a, var1b, var1c, var2a, var2b, var2c и т.д. * Каждая переменная может принимать случайное целое число 0, 1 или 2, но каждая переменная из триады (например, var2a, var2b, var2c), должна иметь РАЗНЫЕ значения. * Таким образом, первая из трёх переменных может принимать любое из трех значений 0, 1 или 2 (я использовал инструкцию COMPUTE var1a = TRUNC(RV.UNIFORM(0,3)) .). * Вторая переменная может принимать любое значение из трёх, за исключением того значения, что приняла первая переменная. * Третья переменная вычисляется как 3 минус сумма значений двух предыдущих переменных. * Моя трудность в том, как получить вторую переменную. * (и, возможно, элегантное решение как сделать всё это вместе через цикл LOOP, или как-то иначе). * (Ответ) Размещён в SPSSX-L rlevesque@videotron.ca 01 августа 2002. * Допустим, вам нужно сгенерировать 10 наблюдений 4-х триад случайных переменных. INPUT PROGRAM. LOOP id=1 TO 10. LOOP varn=1 TO 4. LEAVE id,varn. LOOP ctr=1 TO 3. END CASE. END LOOP. END LOOP. END LOOP. END FILE. END INPUT PROGRAM. LIST. COMPUTE draw=UNIFORM(1). * Ранжируем каждые три значения переменной draw (т.е. в пределах одних и тех же значений id и var). RANK VARIABLES=draw BY id varn /RANK INTO rk. * 4 триады (по 3 значения в каждой) дают 12 переменных. VECTOR var(12). COMPUTE var((varn-1)*3+ctr)=rk. * Сводим наблюдения в одну строку для каждого отдельного значения id. AGGREGATE /OUTFILE=* /BREAK=id /var1 TO var12 = MAX(var1 TO var12). RENAME VARIABLES (var1 TO var3 = var1a var1b var1c) /(var4 TO var6 = var2a var2b var2c) /(var7 TO var9 = var3a var3b var3c) /(var10 TO var12 = var4a var4b var4c).