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
* Вычисление процента от суммарного веса вопросов.

* У меня имеется шкала, состоящая из 47 пунктов (вопросов), кодами ответов на которые
  являются нули и единицы. Каждый вопрос имеет свой вес, варьирующийся от 9.16 до 13.51.
  При обработке вес каждого вопроса умножается, соответственно, на 0 или 1, в зависимости от
  ответа на него. Затем сумма этих произведений делится на максимально возможную сумму произведений
  (как если бы все ответы были единицами), которая составляет 544.76, для вычисления процента
  накопленных весов.

* Мой вопрос касается того, как скорректировать общий максимальный вес, если по одному или
  большему числу вопросов ответ пропущен (не стоит ни 0, ни 1). Например, если пропущен вопрос
  с весом 11.55, я желал бы вычесть 11.55 из 544.76, чтобы максимально возможная сумма составила
  533.21. Если два вопроса пропущены, из 544.76 я буду вычитать веса и того, и другого.
  
* Я бы хотел написать синтаксис, который бы делал нужные мне вычисления автоматически.
  Любые предложения приветствуются.
  
* Ответ размещен в SPSSX-L 23.10.2000. Автор: Raynald Levesque.

DATA LIST LIST /s1 TO s3 w1 TO w3.
BEGIN DATA 
1 1 1 
0 1 0 
. 1 . 
0 0 0 
1 1 0 
END DATA.
LIST.

* Припишем вопросам веса.
COMPUTE w1=9.
COMPUTE w2=11.
COMPUTE w3=10.

*Зафиксируем, какие вопросы не имеют пропусков.
VECTOR s=s1 TO s3.
VECTOR exist(3F1.0).
LOOP #cnt=1 TO 3.
COMPUTE exist(#cnt)=~SYSMIS(s(#cnt)).
END LOOP.

* Вычислим максимально возможную сумму весов для вопросов без пропусков.
VECTOR w=w1 TO w3.
VECTOR maxw(3F3.2).
LOOP #cnt=1 TO 3.
COMPUTE maxw(#cnt)=w(#cnt)*exist(#cnt).
END LOOP.

*Вычислим накопленную сумму весов из ответов, равных единице.
VECTOR score(3F3.2).
LOOP #cnt=1 TO 3.
COMPUTE score(#cnt)=s(#cnt)*w(#cnt).
END LOOP.

*Вычислим процент накопленных весов.
COMPUTE pcscore=SUM(score1 TO score3)/SUM(maxw1 TO maxw3).
EXECUTE.