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
* Чтение текстовых файлов, в которых надо пропустить n столбцов.
* (число n может меняться от файла к файлу).

*(Вопрос) 
>Я составляю программу импорта данных в SPSS, которая будет исполняться
>на разных файлах данных. Они практически идентичны за тем исключением, 
>что число столбцов, которые требуется пропустить (не импортировать), различно в разных файлах.
>В остальном файлы идентичны..
>
>Я бы хотел составить программу, где пользователю надо было бы указать в начале
>число столбцов, которые следует пропустить (т.е. начальную позицию) чтения, а остальное 
>бы чтобы сделала программа. Тут я вижу две проблемы:
>a) не ясно, как указать начальную позицию чтения и b) не ясно, как сделать так, чтобы
>программа сама адаптировалась к начальной позиции и вычислила номер последнего столбца, который следует
>прочитать. Если бы вы сделали так, чтобы пример программы, которая приведена ниже, заработал, 
>думаю, дальше я бы сам справился.
>
>В примере программы ниже я пытаюсь передать значение 6 из макроса (DEFINE) в команду DATA LIST.
>Затем, уже в DATA LIST, пытаюсь скорректировать это значение ,чтобы получить координаты последнего
>столбца для чтения. Разумеется, этот вариант не работает. Я открыт для всех предложений.
>
>
>***********  Со стыдом привожу сей неработающий вариант...
>new file.
>define !start ()'6'!enddefine.
>DATA LIST /Age 1-2 SEX 4 (A) bday !start - (!start + 5).
>BEGIN DATA
>28 M 25000
>26 F 28500
>25 M 30000
>END DATA.
>LIST.

*(Ответ) Размещено в новостной группе SPSS 5.2.2002. Автор: Raynald Levesque.
* http://www.spsstools.net.

* Следующий синтаксис решает вашу задачу:.

new file.
set mprint=no.
define !dlist(col=!TOKENS(1))
!LET !endcol=!LENGTH(!CONCAT(!BLANK(!col),!BLANK(5)))
DATA LIST /Age 1-2 SEX 4 (A) bday !col - !endcol.
!enddefine.

set mprint=yes.
!dlist col=6.

BEGIN DATA
28 M 25000
26 F 28500
25 M 30000
END DATA.
LIST.

***********.
* ОДНАКО этот вариант будет довольно неудобен, если после переменной bday у вас в файле есть ещё много переменных.
* Думаю, следующее решение будет ПРОЩЕ: 

DATA LIST FIXED /col1 TO col20 1-20 (A).
BEGIN DATA
28 M xxx25000
26 F xxx28500
25 M xxx30000
END DATA.
LIST.
* Число 9 в следующей строке вы меняете в зависимости от вашего файла.
WRITE OUTFILE='c:\\temp\\data.txt' /col1 TO col5 col9 TO col20.
EXECUTE.
* А следующая строка уже не зависит от конкретного файла.
DATA LIST FILE='c:\\temp\\data.txt' FIXED /Age 1-2 SEX 4 (A) bday 6 - 11.
LIST.