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
* (Вопрос) Может, у кого завалялся синтаксис чтобы сгенерировать, скажем, 1000
переменных, каждая из которых будет рандомизированным вариантом некоторой исходной
переменной из текущего файла данных? В моём файле 4 переменных. 3 идентификаторные и 
4-ая, называющаяся "countvar".  Мне нужно 1000 рандомизаций countvar.

* (Ответ) Автор: rlevesque@videotron.ca, размещено в SPSSX-L 13.8.2001.
* 	http://www.spsstools.net


SET MPRINT=no.
*///////////////////////////.
DEFINE !random (id=!TOKENS(1) /myvar=!TOKENS(1) /nb=!TOKENS(1) /others=!CMDEND)

/* id 	 должна быть числовая переменная без дубликатов.*/
/* myvar переменная, значения которой рандомизируются.*/
/* nb 	 число переменных, содержащих значения "myvar" в конечном файле данных*/
/* others прочие переменные, значения которых следует сохранить вместе с myvar и id */

LOOP cnt=1 TO !nb.
XSAVE OUTFILE='c:\\temp\\temp.sav' /KEEP=cnt !id !myvar !others.
END LOOP.
EXECUTE.
GET FILE='c:\\temp\\temp.sav'.

COMPUTE draw=UNIFORM(1).
RANK VARIABLES=draw BY cnt  /RANK INTO rdraw.
SORT CASES BY rdraw cnt.
DO IF $CASENUM>1 & rdraw=LAG(rdraw).
COMPUTE id=LAG(id).
END IF.

VECTOR v(!nb F8.0).
COMPUTE v(cnt)=!myvar.
AGGREGATE
  /OUTFILE=*
  /BREAK=id
  /!others=FIRST(!others) 
  /v1 TO !CONCAT('v',!nb) = FIRST(v1 TO !CONCAT('v',!nb)).

* Следующие команды просто чтобы показать, что все переменные имеют одни и те же
средние и стандартные отклонения.
* Все они содержат одни и те же значения, но в разном порядке.
SUMMARIZE
  /TABLES=v1 TO !CONCAT('v',!nb)
  /FORMAT=NOLIST TOTAL
  /TITLE='Итоги по наблюдениям'
  /MISSING=VARIABLE
  /CELLS=COUNT SUM STDDEV .
!ENDDEFINE.
*///////////////////////////.

SET MPRINT=yes.
*Пример 1.
GET FILE='C:\\Program Files\\SPSS\\Employee data.sav' /KEEP=id gender bdate salary.
!random id=id nb=15 myvar=salary others=gender bdate.

*Пример 2.
GET FILE='C:\\Program Files\\SPSS\\World95.sav' /KEEP=country density populatn.
COMPUTE id=$CASENUM.
!random id=id nb=10 myvar=populatn others=country density.