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
* Задача: отобразить на графике текущую дату и время в заголовке.
* Замечание: тот же подход можно использовать и для печати даты и времени в заголовках таблиц.

* Определим случайные данные  (были предоставлены как часть вопроса).
SET SEED=87654321.
INPUT PROGRAM.
LOOP #I = 1 TO 200.
COMPUTE month= TRUNC(UNIFORM(1)*3)+1.
COMPUTE year= TRUNC(UNIFORM(1)*3)+1.
COMPUTE odse_key= TRUNC(UNIFORM(1)*4)+1.
COMPUTE sls_amt= TRUNC(UNIFORM(1)*50)+1.
COMPUTE profit= TRUNC(UNIFORM(1)*30)+1.
COMPUTE seg_key=TRUNC(UNIFORM(1)*4)+1.
COMPUTE dep_key=TRUNC(UNIFORM(1)*4)+1.
COMPUTE quart=TRUNC(UNIFORM(1)*16)+1.
END CASE.
END LOOP.
END FILE.
END INPUT PROGRAM.
EXECUTE. 
if sls_amt=0 sls_amt=0.01. 
COMPUTE pmargin =(profit/sls_amt)*100 .
EXECUTE . 
format pmargin (comma).
exe. 
WEIGHT BY sls_amt. 
SORT CASES BY
pmargin (A) . 

WEIGHT off. 

* Начало решения. Автор: rlevesque@videotron.ca, размещено в SPSSX-L 01.07.2001.
* Определим макрос, возвращающий текущую дату и время.

STRING cdate(A17).
* Вызов функции $TIME возвращает текущие дату и время.
COMPUTE cdate=STRING($TIME,DATETIME16).
DO IF $casenum=1.
WRITE OUTFILE 'C:\\temp\\temp.sps' /"DEFINE !date()"/cdate/"!ENDDEFINE.".
END IF.
EXECUTE.
* Запустим макрос, прочтём его содержимое в оперативную память.
INCLUDE ' C:\\temp\\temp.sps'.

*////////////////////////////////.
DEFINE !print ().
* В следующей строке определяем заголовок графика (включающий текущую дату и время) и используем его в последующей команде IGRAPH. 
!LET !title=!QUOTE(!CONCAT(!EVAL(!date),' Продажи по торговым маркам, по филиалам'))
IGRAPH /VIEWNAME='Bar Chart' /X1 = VAR(month) TYPE = CATEGORICAL 
/Y = VAR(sls_amt) TYPE = SCALE /PANEL = VAR(dep_key) 
/COORDINATE = VERTICAL
/X1LENGTH = 3.0 /YLENGTH = 3.0 /X2LENGTH = 3.0 
/CATORDER VAR(dep_key) (ASCENDING VALUES OMITEMPTY) 
/CATORDER VAR(month) (ASCENDING VALUES OMITEMPTY) 
/TITLE =!title
/BAR(SUM) KEY=ON SHAPE = RECTANGLE BASELINE = AUTO.
EXE.
!ENDDEFINE.
*////////////////////////////////.

!print.

* Для точных результатов определение макроса !date и его использование должны производиться за один вызов макроса, т.е. «разом». - А.Б.