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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115 | * Файл данных примера содержит некую техническую информацию,
* предположительно, об узлах некоторой сети и взаимодействиях между
* ними (количеством ссылок друг на друга) - примеч. пер.
* Программный код для чтения данных будет сильно зависеть от формата
(структуры) файла данных. Я полагаю, что автор вопроса точно указал в письме
формат его файла данных.
* Я использую 4-й символ в каждой строке для определения типа записи.
* Например, запись типа 'E' (RECORD TYPE 'E') - это первая строка для каждого
наблюдения. RECORD TYPE 'l' - строка содержит количество ссылок, и т.д.
*Записи, содержащие данные о ссылках, в 4-й позиции содержат пробел.
*Заключительный файл (результат работы синтаксиса) содержит одно код наблюдения,
число ссылок и перечень ссылок для данного наблюдения.
* Этот синтаксис может быть запущен так, как он есть. В этом случае он будет читать
данные, которые указаны в коде. Чтобы заставить этот синтаксис работать с вашими
данными, прочтите инструкции ниже. Рэй.
**** ПРОГРАММА (СИНТАКСИС) ***
NEW FILE.
*FILE TYPE MIXED FILE='nodes.txt' RECORD=REC_ID 4 (A).
**************************************.
* Чтобы использовать внешний файл с вашими данными вместо указанных в этом коде:
1) поставьте значок * перед следующей командой
2) уберите значок * перед предыдущей командой
3) замените имя nodes.txt путём и именем вашего файла данных
4) удалите всё между BEGIN DATA и END DATA.
**************************************.
FILE TYPE MIXED RECORD=REC_ID 4 (A).
RECORD TYPE 'E'.
DATA LIST FIXED / caseid 27-34(A).
LEAVE caseid.
RECORD TYPE 'l'.
DATA LIST FIXED / nb_links 1-2.
RECORD TYPE ' '.
DATA LIST FIXED / node1 5-6 node2 11-12.
END FILE TYPE.
BEGIN DATA
PFNET D:\\SHARON\\PCKNOT\\DD\\M19A.PRX
16 nodes
19 links
1 minimum link weight
3 maximum link weight
links:
node1 node2 Weight type
1 2 1 x
1 10 1 x
2 5 1 x
2 7 1 x
2 16 1 x
3 13 3 x
4 9 2 x
4 10 2 x
4 16 2 x
5 7 1 x
5 11 2 x
5 15 1 x
6 8 3 x
7 11 2 x
8 12 2 x
9 14 2 x
11 15 2 x
12 13 2 x
13 14 2 x
PFNET D:\\SHARON\\PCKNOT\\DD\\M19B.PRX
16 nodes
15 links
1 minimum link weight
3 maximum link weight
links:
node1 node2 Weight type
1 2 1 x
2 10 1 x
3 5 1 x
3 7 1 x
3 16 1 x
4 13 3 x
5 9 2 x
5 10 2 x
6 7 1 x
7 8 3 x
8 11 2 x
9 12 2 x
10 14 2 x
12 15 2 x
13 14 2 x
END DATA.
DO IF $casenum=1.
COMPUTE nb=1.
ELSE.
COMPUTE nb=(caseid=lag(caseid))*lag(nb)+1.
END IF.
VECTOR nod1_(25F8.0) nod2_(25F8.0).
DO IF nb>2.
COMPUTE nod1_(nb-2)=node1.
COMPUTE nod2_(nb-2)=node2.
END IF.
* Если максимальное число ссылок может превосходить 25, замените число 25 выше
и ниже на подходящий максимум.
AGGREGATE
/OUTFILE=*
/BREAK=caseid
/nb_links = MAX(nb_links)
/nod1_1 TO nod1_25= MAX(nod1_1 TO nod1_25)
/nod2_1 TO nod2_25= MAX(nod2_1 TO nod2_25).
|