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
* Заполнение пропусков значениями из предыдущих строк.

*(Вопрос) Имеется файл с кодами переписных районов (CT), названием городов (city) и почтовыми индексами (zip).

* В тех случаях, когда название города повторяется, соответствующее поле остается пустым.
* То же самое - с почтовыми индексами. Мне же надо как-то восполнить эти пробелы.

*( Ответ) Размещен в SPSSX-L 07.02.2002. Автор: Raynald Levesque.
* Решение УНИВЕРСАЛЬНОЕ. Работает в том виде, в котором есть, для любого числа и любых сочетаний 
  числовых и строковых переменных.

DATA LIST LIST / CT(F6.2)  City (A20)  Zip (F5.0).
BEGIN DATA
320.11,'MODJESKA',92676
423.06 'MONARCH BEACH' 92629
423.22
423.23
626.10 'NEWPORT BEACH' 	92660
626.18
627.01
627.17
630.04
630.05
630.07
630.08
630.09
630.10
631.03
627.99 	' '			92661
628.00
630.06	' ' 			92662
628.00	' ' 			92663
629.00
630.05
630.10
634.00
635.00
636.01
636.02
636.03
626.17	' ' 			92625
626.18
627.01
627.02
626.04	'NEWPORT COAST'	92657
626.17
626.18
627.02
762.01	'OLIVE'			92865
762.02
762.98
524.12	'IRVINE'			92602
524.14
525.95
626.04	' ' 			92603
626.17
END DATA.

SET ERRORS=no.
DO IF $CASENUM>1.
DO REPEAT v=ALL.
* Следующая пара строк предназначена для обработки строковых и числовых переменных:
* одна из двух строк всегда даст ошибку, т.к. рассчитана на переменные одного типа,
* но тогда срабатывает другая строка.
IF LEN(RTRIM(v))=0 v=LAG(v).
IF MISSING(v) v=LAG(v).
END REPEAT PRINT.
END IF.
SET ERRORS=yes.
EXECUTE.