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).