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
* Задача: вывести текущую дату в заголовок графика.

* Определим случайные данные (были предложены вместе с вопросом).
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.
* Определим макрос, возвращающий текущую дату.
STRING cdate(A9).
COMPUTE cdate=STRING($TIME, EDATE8).
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.