Вывести случайные номера по 10 штук в строке
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | * (Вопрос) Нужен макрос, в который передаётся 5 параметров: исходное состояние датчика случайных чисел (seed) количество требуемых целых чисел для отбора наименьшее целое число наибольшее целое число приращение целых чисел (по умолчанию 1) и возвращает случайно отобранные целые числа. * Список чисел должен печататься по 10 в строке (с разрывом между 5-м и 6-м числами) a) в порядке отбора и b) в порядке возрастания чисел. * (Ответ) Ответ размещён в SPSSX-L, автор: rlevesque@videotron.ca, 14.08.2001. * http://www.spsstools.net * Макрос печатеи (!print) будет вызван из главного макроса. Вам необходимо выбрать один из двух методов печати и удалить другой. При использовании второго метода убедитесь, что в настройках программы установлено отображение лога (журнальных записей). * Два примера использования макросов даны в конце кода. *//////////////////////////////. DEFINE !print() vector id(10F6.0). compute idx=mod(selorder,10). if idx=0 idx=10. compute id(idx)=id. compute linenb=trunc(selorder/10.1)+1. AGGREGATE /OUTFILE=* /BREAK=linenb /id1 TO id10 = FIRST(id1 TO id10). * используйте один из методов вывода результатов. * ...через команду summarize. string space(A1). variable label space ' '. SUMMARIZE /TABLES=id1 to id5 space id6 to id10 /FORMAT=VALIDLIST NOCASENUM TOTAL /TITLE='Отобранные наблюдения' /MISSING=VARIABLE /CELLS=NONE. * ...через команду print. print /id1 id2 id3 id4 id5 ' ' id6 id7 id8 id9 id10. execute. !ENDDEFINE. *//////////////////////////////. */////////////////////////////. DEFINE !getlist (seed=!TOKENS(1) /nbreq=!TOKENS(1) /min=!TOKENS(1) /max=!TOKENS(1) /incr=!TOKENS(1) !DEFAULT(1)) set seed=!seed. input program. loop #1 = !min to !max by !incr. compute ranorder= rv.normal(0,1). compute id= #1. end case. end loop. end file. end input program. formats ranorder (f8.6). sort cases by ranorder. compute selorder= $casenum. formats id selorder (f6). select if $casenum LE !nbreq. print /selorder id. save outfile='c:\\temp\\all cases.sav'. * печатаем результаты в порядке отбора. !print. get file='c:\\temp\\all cases.sav'. sort cases by id. compute selorder=$casenum. * печатаем результаты в порядке идентификационных номером (id). !print. !ENDDEFINE. */////////////////////////////. * Пример 1. !getlist seed=66754798 nbreq=50 min=100 max=200 incr=2. * Пример 2 (использующий значение incr по умолчанию). !getlist seed=12345678 nbreq=60 min=100 max=200. |
Related pages
...