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
*(Вопрос) Как можно винсоризовать среднее?

*(Ответ) Автор: Raynald Levesque, 17.07.2002
	http://www.spsstools.net.

*//////////////.
DEFINE !winsor (var=!TOKENS(1) /lowpc=!TOKENS(1) 
		/hipc=!TOKENS(1) /newvar=!TOKENS(1))

COMPUTE nobreak=1.
RANK VARIABLES=!var (A) BY nobreak  /PERCENT INTO pc_ /PRINT=YES
  /TIES=MEAN .
XSAVE OUTFILE='c:\\temp\\data.sav'.

SORT CASES BY pc_ (D).
SELECT IF pc_ <= !lowpc.
N OF CASES 1.
RENAME VARIABLE (!var=minval).
SAVE OUTFILE='c:\\temp\\minval.sav' /KEEP=nobreak minval.

GET FILE='c:\\temp\\data.sav'.
SELECT IF pc_ >= (100 - !hipc).
SORT CASES BY pc_ (A).
N OF CASES 1.
RENAME VARIABLE (!var=maxval).
SAVE OUTFILE='c:\\temp\\maxval.sav' /KEEP=nobreak maxval.

MATCH FILES FILE='c:\\temp\\data.sav'
		/TABLE='c:\\temp\\minval.sav'
		/TABLE='c:\\temp\\maxval.sav'
		/BY=nobreak
		/DROP=nobreak.
COMPUTE !newvar=MAX(MIN(!var,maxval),minval).
EXECUTE.
!ENDDEFINE.
*//////////////.


* Пример использования.
GET FILE='c:\\program files\\spsseval\\employee data.sav'.

SET MPRINT=yes.
* Следующая команда создаёт переменную winsal, в которой
*	5% наименьших заработков заменены на значение 5-го процентиля, 
*	а 10% наибольших заработков - на значения 90-го процентиля.
!winsor var=salary lowpc=5 hipc=10 newvar=winsal.
SET MPRINT=no.


SUMMARIZE
  /TABLES=salary winsal
  /FORMAT=NOLIST TOTAL
  /TITLE='Сводная статистика'
  /MISSING=VARIABLE
  /CELLS=COUNT MEAN.