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
* Что, если даты не убираются на графике...
* ВОПРОС : переменные даты, прекрасно отображающиеся в редакторе данных, не отображаются / отображаются частично
 / отображаются как звёздочки в редакторе данных. Что с этим можно сделать?.

* ОТВЕТ:  автор: rlevesque@videotron.ca.
* Создадим пример данных для иллюстрации (как в решении AnswerNet за номером 100000483).

new file. 
input program. 
loop #i = 1 to 1000. 
compute sub_date = xdate.date(rv.uniform(date.dmy(15,1,2000),date.dmy(15,2,2000))). 
end case. 
end loop. 
end file. 
end input program. 
execute. 
formats sub_date (edate10). 

* Проблема практическая: даты в силу своего формата могут просто не помещаться на графиках.
* Одно из возможных решений такое: в некоторых ситуациях сами даты нам не нужны. Нужна
* последовательная нумерация дат, начиная с некоторой начальной даты. Это может характеризовать 
* развитие процесса во времени от его начала - примеч. перев.

*Предположим, нам интересна динамика поступления ответов на почтовый опрос, который начался 15 января 2000 года.
*Данные выше содержат дату, в которую поступил очередной ответ. Требуется представить общую динамику на графике.
*Введите дату начала опроса в формулу ниже.
COMPUTE nb_days=CTIME.DAYS(sub_date-DATE.DMY(15,1,2000))+1.
* Переменная nb_days - число дней, прошедших от момента начала опроса (первый день пронумерован как 1).
* В других случаях вы можете использовать в качестве периодов обобщения дни недели или месяцы.

AGGREGATE
  /OUTFILE=*
  /BREAK=nb_days
  /nb_resp = N(sub_date).
FORMATS nb_days (F2.0).

* После агрегирования переменная nb_resp содержит число ответов, пришедших в каждый из дней.
* Отобразим динамику на графике.

GRAPH
  /LINE(SIMPLE)=MEAN(nb_resp) BY nb_days
  /MISSING=REPORT.

* В зависимости от числа дней в анализируемом периоде, вы можете использовать столбцовую диаграмму вместо графика.
GRAPH
  /BAR(SIMPLE)=MEAN(nb_resp) BY nb_days
  /MISSING=REPORT.

* Другая альтернатива - диаграмма разброса (scatter plot).
GRAPH
  /SCATTERPLOT(BIVAR)=nb_days WITH nb_resp
  /MISSING=LISTWISE .

* Диаграмма разброса имеет то преимущество над двумя другими вариантами, что пропущенные даты отображаются на графике 
* "как есть", то есть, на графике образуются пустые области, а значит, прямая времени (x) не искажается.
* Чтобы получить тот же результат с предыдущими типами графиков, потребовалось бы вводить фиктивные наблюдения для пропущенных дат
* (т.е. тех дат, в которые ответы не поступали). Например, если значения переменной nb_days у вас равны 1, 2, 4, 5,.., 10
* (т.е. пропущено значение nb_days=3), вам потребовалось бы включить его (вручную, например) как дополнительное наблюдение
* со значением nb_days=3 и nb_resp=0.