MATRIX DATA: Fully implement.
[pspp] / tests / language / data-io / matrix-data.at
1 dnl PSPP - a program for statistical analysis.
2 dnl Copyright (C) 2017, 2020 Free Software Foundation, Inc.
3 dnl
4 dnl This program is free software: you can redistribute it and/or modify
5 dnl it under the terms of the GNU General Public License as published by
6 dnl the Free Software Foundation, either version 3 of the License, or
7 dnl (at your option) any later version.
8 dnl
9 dnl This program is distributed in the hope that it will be useful,
10 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
11 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 dnl GNU General Public License for more details.
13 dnl
14 dnl You should have received a copy of the GNU General Public License
15 dnl along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 dnl
17 AT_BANNER([MATRIX DATA])
18
19 dnl Keep this test in sync with Example 1 in doc/matrices.texi.
20 AT_SETUP([MATRIX DATA - LOWER DIAGONAL with ROWTYPE_])
21 AT_DATA([matrix-data.sps], [dnl
22 MATRIX DATA
23     VARIABLES=ROWTYPE_ var01 TO var08
24     /FILE='matrix-data.txt'.
25 FORMATS var01 TO var08(F5.2).
26 LIST.
27 ])
28 AT_DATA([matrix-data.txt], [dnl
29 MEAN  24.3   5.4  69.7  20.1  13.4   2.7  27.9   3.7
30 SD     5.7   1.5  23.5   5.8   2.8   4.5   5.4   1.5
31 N       92    92    92    92    92    92    92    92
32 'CORR'  1.00
33 CORR   .18  1.00
34 CORR  -.22  -.17  1.00
35 "CORR"   .36   .31  -.14  1.00
36 COR   .27   .16  -.12   .22  1.00
37 CORR   .33   .15  -.17   .24   .21  1.00
38 CORR   .50   .29  -.20   .32   .12   .38  1.00
39 CORR   .17   .29  -.05   .20   .27   .20   .04  1.00
40 ])
41
42 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
43 Table: Data List
44 ROWTYPE_,VARNAME_,var01,var02,var03,var04,var05,var06,var07,var08
45 MEAN,,24.30,5.40,69.70,20.10,13.40,2.70,27.90,3.70
46 STDDEV,,5.70,1.50,23.50,5.80,2.80,4.50,5.40,1.50
47 N,,92.00,92.00,92.00,92.00,92.00,92.00,92.00,92.00
48 CORR,var01,1.00,.18,-.22,.36,.27,.33,.50,.17
49 CORR,var02,.18,1.00,-.17,.31,.16,.15,.29,.29
50 CORR,var03,-.22,-.17,1.00,-.14,-.12,-.17,-.20,-.05
51 CORR,var04,.36,.31,-.14,1.00,.22,.24,.32,.20
52 CORR,var05,.27,.16,-.12,.22,1.00,.21,.12,.27
53 CORR,var06,.33,.15,-.17,.24,.21,1.00,.38,.20
54 CORR,var07,.50,.29,-.20,.32,.12,.38,1.00,.04
55 CORR,var08,.17,.29,-.05,.20,.27,.20,.04,1.00
56 ])
57 AT_CLEANUP
58
59 AT_SETUP([MATRIX DATA - UPPER DIAGONAL with ROWTYPE_])
60 AT_DATA([matrix-data.sps], [dnl
61 matrix data
62     variables = rowtype_  var01 var02 var03 var04
63     /format = upper diagonal.
64
65 begin data
66 mean        34 35 36 37
67 sd          22 11 55 66
68 n_ve    100 101 102 103
69 corr        1 9 8 7
70 corr        1 6 5
71 corr        1 4
72 corr        1
73 end data.
74
75 list.
76 ])
77
78 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
79 Table: Data List
80 ROWTYPE_,VARNAME_,var01,var02,var03,var04
81 MEAN,,34.0000,35.0000,36.0000,37.0000
82 STDDEV,,22.0000,11.0000,55.0000,66.0000
83 N,,100.0000,101.0000,102.0000,103.0000
84 CORR,var01,1.0000,9.0000,8.0000,7.0000
85 CORR,var02,9.0000,1.0000,6.0000,5.0000
86 CORR,var03,8.0000,6.0000,1.0000,4.0000
87 CORR,var04,7.0000,5.0000,4.0000,1.0000
88 ])
89 AT_CLEANUP
90
91 AT_SETUP([MATRIX DATA - FULL with ROWTYPE_])
92 dnl Just for fun, this one is in a different case.
93 AT_DATA([matrix-data.sps], [dnl
94 matrix data
95     variables = ROWTYPE_  var01 var02 var03 var04
96     /format = full diagonal.
97
98 begin data
99 MEAN 34 35 36 37
100 SD   22 11 55 66
101 N    100 101 102 103
102 CORR 1 9 8 7
103 CORR 9 1 6 5
104 CORR 8 6 1 4
105 CORR 7 5 4 1
106 end data.
107
108 list.
109 ])
110
111 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
112 Table: Data List
113 ROWTYPE_,VARNAME_,var01,var02,var03,var04
114 MEAN,,34.0000,35.0000,36.0000,37.0000
115 STDDEV,,22.0000,11.0000,55.0000,66.0000
116 N,,100.0000,101.0000,102.0000,103.0000
117 CORR,var01,1.0000,9.0000,8.0000,7.0000
118 CORR,var02,9.0000,1.0000,6.0000,5.0000
119 CORR,var03,8.0000,6.0000,1.0000,4.0000
120 CORR,var04,7.0000,5.0000,4.0000,1.0000
121 ])
122 AT_CLEANUP
123
124
125 AT_SETUP([MATRIX DATA - UPPER NODIAGONAL with ROWTYPE_])
126 AT_DATA([matrix-data.sps], [dnl
127 matrix data
128     variables = rowtype_  var01 var02 var03 var04
129     /format = upper nodiagonal.
130
131 begin data
132 mean 34 35 36 37
133 sd   22 11 55 66
134 n    100 101 102 103
135 corr  9 8 7
136 corr  6 5
137 corr  4
138 end data.
139
140 list.
141 ])
142
143 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
144 Table: Data List
145 ROWTYPE_,VARNAME_,var01,var02,var03,var04
146 MEAN,,34.0000,35.0000,36.0000,37.0000
147 STDDEV,,22.0000,11.0000,55.0000,66.0000
148 N,,100.0000,101.0000,102.0000,103.0000
149 CORR,var01,1.0000,9.0000,8.0000,7.0000
150 CORR,var02,9.0000,1.0000,6.0000,5.0000
151 CORR,var03,8.0000,6.0000,1.0000,4.0000
152 CORR,var04,7.0000,5.0000,4.0000,1.0000
153 ])
154 AT_CLEANUP
155
156 dnl Keep this test in sync with Example 2 in doc/matrices.texi.
157 AT_SETUP([MATRIX DATA - UPPER NODIAGONAL with ROWTYPE_ - 2])
158 AT_DATA([matrix-data.sps], [dnl
159 MATRIX DATA
160     VARIABLES=ROWTYPE_ var01 TO var08
161     /FORMAT=UPPER NODIAGONAL.
162 BEGIN DATA.
163 MEAN  24.3   5.4  69.7  20.1  13.4   2.7  27.9   3.7
164 SD     5.7   1.5  23.5   5.8   2.8   4.5   5.4   1.5
165 N       92    92    92    92    92    92    92    92
166 CORR         .17   .50  -.33   .27   .36  -.22   .18
167 CORR               .29   .29  -.20   .32   .12   .38
168 CORR                     .05   .20  -.15   .16   .21
169 CORR                           .20   .32  -.17   .12
170 CORR                                 .27   .12  -.24
171 CORR                                      -.20  -.38
172 CORR                                             .04
173 END DATA.
174 FORMATS var01 TO var08(F6.2).
175 LIST.
176 ])
177 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
178 Table: Data List
179 ROWTYPE_,VARNAME_,var01,var02,var03,var04,var05,var06,var07,var08
180 MEAN,,24.30,5.40,69.70,20.10,13.40,2.70,27.90,3.70
181 STDDEV,,5.70,1.50,23.50,5.80,2.80,4.50,5.40,1.50
182 N,,92.00,92.00,92.00,92.00,92.00,92.00,92.00,92.00
183 CORR,var01,1.00,.17,.50,-.33,.27,.36,-.22,.18
184 CORR,var02,.17,1.00,.29,.29,-.20,.32,.12,.38
185 CORR,var03,.50,.29,1.00,.05,.20,-.15,.16,.21
186 CORR,var04,-.33,.29,.05,1.00,.20,.32,-.17,.12
187 CORR,var05,.27,-.20,.20,.20,1.00,.27,.12,-.24
188 CORR,var06,.36,.32,-.15,.32,.27,1.00,-.20,-.38
189 CORR,var07,-.22,.12,.16,-.17,.12,-.20,1.00,.04
190 CORR,var08,.18,.38,.21,.12,-.24,-.38,.04,1.00
191 ])
192 AT_CLEANUP
193
194 AT_SETUP([MATRIX DATA - LOWER NODIAGONAL with ROWTYPE_])
195 AT_DATA([matrix-data.sps], [dnl
196 matrix data
197     variables = rowtype_  var01 var02 var03 var04
198     /format = lower nodiagonal
199     /cells = 2.
200
201 begin data
202 mean 34 35 36 37
203 sd   22 11 55 66
204 n    100 101 102 103
205 corr  9
206 corr  8 6
207 corr  7 5 4
208 end data.
209
210 list.
211 ])
212
213 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
214 matrix-data.sps:4: warning: MATRIX DATA: CELLS is ignored when VARIABLES includes ROWTYPE_
215
216 Table: Data List
217 ROWTYPE_,VARNAME_,var01,var02,var03,var04
218 MEAN,,34.0000,35.0000,36.0000,37.0000
219 STDDEV,,22.0000,11.0000,55.0000,66.0000
220 N,,100.0000,101.0000,102.0000,103.0000
221 CORR,var01,1.0000,9.0000,8.0000,7.0000
222 CORR,var02,9.0000,1.0000,6.0000,5.0000
223 CORR,var03,8.0000,6.0000,1.0000,4.0000
224 CORR,var04,7.0000,5.0000,4.0000,1.0000
225 ])
226 AT_CLEANUP
227
228 AT_SETUP([MATRIX DATA - split data])
229 AT_DATA([matrix-data.sps], [dnl
230 matrix data
231     variables = s1 s2 rowtype_  var01 var02 var03
232     /split=s1 s2.
233
234 begin data
235 8 0   mean     21.4  5.0  72.9
236 8 0   sd       6.5   1.6  22.8
237 8 0   n        106   106  106
238 8 0   corr     1
239 8 0   corr    .41  1
240 8 0   corr    -.16  -.22  1
241 8 1   mean     11.4  1.0  52.9
242 8 1   sd       9.5   8.6  12.8
243 8 1   n        10   11  12
244 8 1   corr     1
245 8 1   corr    .51  1
246 8 1   corr    .36  -.41  1
247 end data.
248
249 display dictionary.
250
251 list.
252 ])
253
254 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
255 Table: Variables
256 Name,Position,Measurement Level,Role,Width,Alignment,Print Format,Write Format
257 s1,1,Scale,Input,8,Right,F4.0,F4.0
258 s2,2,Scale,Input,8,Right,F4.0,F4.0
259 ROWTYPE_,3,Nominal,Input,8,Left,A8,A8
260 VARNAME_,4,Nominal,Input,8,Left,A8,A8
261 var01,5,Scale,Input,8,Right,F10.4,F10.4
262 var02,6,Scale,Input,8,Right,F10.4,F10.4
263 var03,7,Scale,Input,8,Right,F10.4,F10.4
264
265 Table: Split Values
266 Variable,Value
267 s1,8
268 s2,0
269
270 Table: Data List
271 s1,s2,ROWTYPE_,VARNAME_,var01,var02,var03
272 8,0,MEAN,,21.4000,5.0000,72.9000
273 8,0,STDDEV,,6.5000,1.6000,22.8000
274 8,0,N,,106.0000,106.0000,106.0000
275 8,0,CORR,var01,1.0000,.4100,-.1600
276 8,0,CORR,var02,.4100,1.0000,-.2200
277 8,0,CORR,var03,-.1600,-.2200,1.0000
278
279 Table: Split Values
280 Variable,Value
281 s1,8
282 s2,1
283
284 Table: Data List
285 s1,s2,ROWTYPE_,VARNAME_,var01,var02,var03
286 8,1,MEAN,,11.4000,1.0000,52.9000
287 8,1,STDDEV,,9.5000,8.6000,12.8000
288 8,1,N,,10.0000,11.0000,12.0000
289 8,1,CORR,var01,1.0000,.5100,.3600
290 8,1,CORR,var02,.5100,1.0000,-.4100
291 8,1,CORR,var03,.3600,-.4100,1.0000
292 ])
293
294 AT_CLEANUP
295
296 dnl Keep this test in sync with Example 4 in doc/matrices.texi.
297 AT_SETUP([MATRIX DATA - split data - 2])
298 AT_DATA([matrix-data.sps], [dnl
299 MATRIX DATA
300     VARIABLES=s1 ROWTYPE_  var01 TO var04
301     /SPLIT=s1
302     /FORMAT=FULL.
303 BEGIN DATA.
304 0 MEAN 34 35 36 37
305 0 SD   22 11 55 66
306 0 N    99 98 99 92
307 0 CORR  1 .9 .8 .7
308 0 CORR .9  1 .6 .5
309 0 CORR .8 .6  1 .4
310 0 CORR .7 .5 .4  1
311 1 MEAN 44 45 34 39
312 1 SD   23 15 51 46
313 1 N    98 34 87 23
314 1 CORR  1 .2 .3 .4
315 1 CORR .2  1 .5 .6
316 1 CORR .3 .5  1 .7
317 1 CORR .4 .6 .7  1
318 END DATA.
319 FORMATS var01 TO var04(F5.1).
320 LIST.
321 ])
322
323 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
324 Table: Split Values
325 Variable,Value
326 s1,0
327
328 Table: Data List
329 s1,ROWTYPE_,VARNAME_,var01,var02,var03,var04
330 0,MEAN,,34.0,35.0,36.0,37.0
331 0,STDDEV,,22.0,11.0,55.0,66.0
332 0,N,,99.0,98.0,99.0,92.0
333 0,CORR,var01,1.0,.9,.8,.7
334 0,CORR,var02,.9,1.0,.6,.5
335 0,CORR,var03,.8,.6,1.0,.4
336 0,CORR,var04,.7,.5,.4,1.0
337
338 Table: Split Values
339 Variable,Value
340 s1,1
341
342 Table: Data List
343 s1,ROWTYPE_,VARNAME_,var01,var02,var03,var04
344 1,MEAN,,44.0,45.0,34.0,39.0
345 1,STDDEV,,23.0,15.0,51.0,46.0
346 1,N,,98.0,34.0,87.0,23.0
347 1,CORR,var01,1.0,.2,.3,.4
348 1,CORR,var02,.2,1.0,.5,.6
349 1,CORR,var03,.3,.5,1.0,.7
350 1,CORR,var04,.4,.6,.7,1.0
351 ])
352 AT_CLEANUP
353
354 dnl Keep this test in sync with Example 5 in doc/matrices.texi.
355 AT_SETUP([MATRIX DATA - factor variables])
356 AT_DATA([matrix-data.sps], [dnl
357 MATRIX DATA
358     VARIABLES=ROWTYPE_ f1 var01 TO var04
359     /FACTOR=f1.
360 BEGIN DATA.
361 MEAN 0 34 35 36 37
362 SD   0 22 11 55 66
363 N    0 99 98 99 92
364 MEAN 1 44 45 34 39
365 SD   1 23 15 51 46
366 N    1 98 34 87 23
367 CORR .  1
368 CORR . .9  1
369 CORR . .8 .6  1
370 CORR . .7 .5 .4  1
371 END DATA.
372 FORMATS var01 TO var04(F5.1).
373 LIST.
374 ])
375
376 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
377 Table: Data List
378 ROWTYPE_,f1,VARNAME_,var01,var02,var03,var04
379 MEAN,0,,34.0,35.0,36.0,37.0
380 STDDEV,0,,22.0,11.0,55.0,66.0
381 N,0,,99.0,98.0,99.0,92.0
382 MEAN,1,,44.0,45.0,34.0,39.0
383 STDDEV,1,,23.0,15.0,51.0,46.0
384 N,1,,98.0,34.0,87.0,23.0
385 CORR,.,var01,1.0,.9,.8,.7
386 CORR,.,var02,.9,1.0,.6,.5
387 CORR,.,var03,.8,.6,1.0,.4
388 CORR,.,var04,.7,.5,.4,1.0
389 ])
390 AT_CLEANUP
391
392 AT_SETUP([MATRIX DATA - bad ROWTYPE_])
393 AT_DATA([matrix-data.sps], [dnl
394 matrix data
395     variables = rowtype_  var01 var02 var03 var04
396     /format = upper diagonal.
397
398 begin data
399 cork        1 9 8 7
400 corr        1 6 5
401 corr        1 4
402 corr        1
403 end data.
404
405 list.
406 ])
407
408 AT_CHECK([pspp -O format=csv matrix-data.sps], [1], [dnl
409 "matrix-data.sps:6.1-6.4: error: Unknown row type ""cork""."
410 ])
411 AT_CLEANUP
412
413 AT_SETUP([MATRIX DATA - unexpected ROWTYPE_])
414 AT_DATA([matrix-data.sps], [dnl
415 matrix data
416     variables = rowtype_ f1 var01 var02 var03 var04
417     /content = corr (sd)
418     /factor = f1
419     /format = upper diagonal.
420
421 begin data
422 corr . 1 9 8 7
423 corr . 1 6 5
424 corr . 1 4
425 corr . 1
426 sd   . 1 2 3 4
427
428 corr 0 1 9 8 7
429 corr 0 1 6 5
430 corr 0 1 4
431 corr 0 1
432 sd   0 1 2 3 4
433 end data.
434
435 list.
436 ])
437
438 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
439 matrix-data.sps:12: warning: Data contains pooled row type STDDEV not included in CONTENTS.
440
441 matrix-data.sps:14: warning: Data contains with-factors row type CORR not included in CONTENTS.
442
443 Table: Data List
444 ROWTYPE_,f1,VARNAME_,var01,var02,var03,var04
445 CORR,.,var01,1.0000,9.0000,8.0000,7.0000
446 CORR,.,var02,9.0000,1.0000,6.0000,5.0000
447 CORR,.,var03,8.0000,6.0000,1.0000,4.0000
448 CORR,.,var04,7.0000,5.0000,4.0000,1.0000
449 STDDEV,.,,1.0000,2.0000,3.0000,4.0000
450 CORR,0,var01,1.0000,9.0000,8.0000,7.0000
451 CORR,0,var02,9.0000,1.0000,6.0000,5.0000
452 CORR,0,var03,8.0000,6.0000,1.0000,4.0000
453 CORR,0,var04,7.0000,5.0000,4.0000,1.0000
454 STDDEV,0,,1.0000,2.0000,3.0000,4.0000
455 ])
456 AT_CLEANUP
457
458 AT_SETUP([MATRIX DATA - bad number])
459 AT_DATA([matrix-data.sps], [dnl
460 matrix data
461     variables = rowtype_  var01 var02 var03 var04
462     /format = upper diagonal.
463
464 begin data
465 corr        1 9 8 7
466 corr        1 x 5
467 corr        1 4
468 corr        1
469 end data.
470
471 list.
472 ])
473
474 AT_CHECK([pspp -O format=csv matrix-data.sps], [1], [dnl
475 matrix-data.sps:7.15: error: Field contents are not numeric.
476
477 Table: Data List
478 ROWTYPE_,VARNAME_,var01,var02,var03,var04
479 CORR,var01,1.0000,9.0000,8.0000,7.0000
480 CORR,var02,9.0000,1.0000,.    ,5.0000
481 CORR,var03,8.0000,.    ,1.0000,4.0000
482 CORR,var04,7.0000,5.0000,4.0000,1.0000
483 ])
484 AT_CLEANUP
485
486 AT_SETUP([MATRIX DATA - long variable names])
487 AT_DATA([matrix-data.sps], [dnl
488 matrix data
489     variables = rowtype_  var01 var_two variable_number_three variableFour
490     /format = upper diagonal.
491
492 begin data
493 mean         34  35  36  37
494 sd           22  11  55  66
495 n_vector    100 101 102 103
496 corr          1   9   8   7
497 corr              1   6   5
498 corr                  1   4
499 corr                      1
500 end data.
501
502 list.
503 ])
504
505 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
506 Table: Data List
507 ROWTYPE_,VARNAME_,var01,var_two,variable_number_three,variableFour
508 MEAN,,34.0000,35.0000,36.0000,37.0000
509 STDDEV,,22.0000,11.0000,55.0000,66.0000
510 N,,100.0000,101.0000,102.0000,103.0000
511 CORR,var01,1.0000,9.0000,8.0000,7.0000
512 CORR,var_two,9.0000,1.0000,6.0000,5.0000
513 CORR,variable_number_three,8.0000,6.0000,1.0000,4.0000
514 CORR,variableFour,7.0000,5.0000,4.0000,1.0000
515 ])
516 AT_CLEANUP
517
518 AT_SETUP([MATRIX DATA - read integrity])
519 dnl Check that matrices presented are read correctly.
520 dnl The example below is an unlikely one since all
521 dnl covariance/correlation matrices must be symmetrical
522 dnl but it serves a purpose for this test.
523 AT_DATA([matrix-reader.sps], [dnl
524 matrix data
525     variables = rowtype_  var01 to var9
526     /format = full.
527
528 begin data
529 n    1  2  3  4  5  6  7  8  9
530 sd   100 200 300 400 500 600 700 800 900
531 corr 11 12 13 14 15 16 17 18 19
532 corr 21 22 23 24 25 26 27 28 29
533 corr 31 32 33 34 35 36 37 38 39
534 corr 41 42 43 44 45 46 47 48 49
535 corr 51 52 53 54 55 56 57 58 59
536 corr 61 62 63 64 65 66 67 68 69
537 corr 71 72 73 74 75 76 77 78 79
538 corr 81 82 83 84 85 86 87 88 89
539 corr 91 92 93 94 95 96 97 98 99
540 end data.
541 DEBUG MATRIX READ.
542 FORMATS var01 to var09(F3.0).
543 list.
544 factor  /matrix = in (corr = *)
545         /analysis var02 var04 var06
546         /method = correlation
547         /rotation = norotate
548         /print correlation.
549 ])
550
551 AT_CHECK([pspp --testing-mode -O format=csv matrix-reader.sps], [0], [dnl
552 Table: Debug Matrix Reader
553 ,,,var01,var02,var03,var04,var05,var06,var07,var08,var09
554 1,Correlation,var01,11.000,12.000,13.000,14.000,15.000,16.000,17.000,18.000,19.000
555 ,,var02,21.000,22.000,23.000,24.000,25.000,26.000,27.000,28.000,29.000
556 ,,var03,31.000,32.000,33.000,34.000,35.000,36.000,37.000,38.000,39.000
557 ,,var04,41.000,42.000,43.000,44.000,45.000,46.000,47.000,48.000,49.000
558 ,,var05,51.000,52.000,53.000,54.000,55.000,56.000,57.000,58.000,59.000
559 ,,var06,61.000,62.000,63.000,64.000,65.000,66.000,67.000,68.000,69.000
560 ,,var07,71.000,72.000,73.000,74.000,75.000,76.000,77.000,78.000,79.000
561 ,,var08,81.000,82.000,83.000,84.000,85.000,86.000,87.000,88.000,89.000
562 ,,var09,91.000,92.000,93.000,94.000,95.000,96.000,97.000,98.000,99.000
563 ,N,Value,1.000,2.000,3.000,4.000,5.000,6.000,7.000,8.000,9.000
564 ,Mean,Value,.000,.000,.000,.000,.000,.000,.000,.000,.000
565 ,Standard Deviation,Value,100.000,200.000,300.000,400.000,500.000,600.000,700.000,800.000,900.000
566
567 Table: Data List
568 ROWTYPE_,VARNAME_,var01,var02,var03,var04,var05,var06,var07,var08,var09
569 N,,1,2,3,4,5,6,7,8,9
570 STDDEV,,100,200,300,400,500,600,700,800,900
571 CORR,var01,11,12,13,14,15,16,17,18,19
572 CORR,var02,21,22,23,24,25,26,27,28,29
573 CORR,var03,31,32,33,34,35,36,37,38,39
574 CORR,var04,41,42,43,44,45,46,47,48,49
575 CORR,var05,51,52,53,54,55,56,57,58,59
576 CORR,var06,61,62,63,64,65,66,67,68,69
577 CORR,var07,71,72,73,74,75,76,77,78,79
578 CORR,var08,81,82,83,84,85,86,87,88,89
579 CORR,var09,91,92,93,94,95,96,97,98,99
580
581 Table: Correlation Matrix
582 ,,var02,var04,var06
583 Correlation,var02,22.000,24.000,26.000
584 ,var04,42.000,44.000,46.000
585 ,var06,62.000,64.000,66.000
586
587 Table: Component Matrix
588 ,Component,
589 ,1,2
590 var02,6.73,-2.23
591 var04,6.95,2.15
592 var06,9.22,.01
593 ])
594 AT_CLEANUP
595
596 AT_SETUP([MATRIX DATA - too many rows])
597 dnl Test for a crash which occurred when the matrix had more rows declared
598 dnl than variables to hold them.
599 AT_DATA([matrix-data.sps], [dnl
600 matrix data
601     variables = rowtype_
602     var01 var02 var03 var04
603     / format = upper diagonal .
604 begin data
605     mean     21.4  5.0  72.9  17.4
606     sd       6.5  1.6  22.8  5.7
607     n       106  106  106  106
608     corr    1.00  .32  .48  .28
609     corr    1.00  .72  .54  .44
610     corr    1.00  .50  .59  .64
611     corr    1.00  .62  .49  -.30
612     corr    1.00  .56  -.38  .52
613     corr    1.00  -.73  .91  .80
614     corr    1.00  -.65  -.60
615     corr    1.00  .70
616     corr    1.00
617 end data .
618 FORMATS var01 TO var04 (F6.2).
619 LIST.
620 ])
621
622 AT_CHECK([pspp -O format=csv matrix-data.sps], [1], [dnl
623 matrix-data.sps:10.29-10.31: error: Extraneous data expecting end of line.
624
625 matrix-data.sps:11.24-11.31: error: Extraneous data expecting end of line.
626
627 matrix-data.sps:12.19-12.32: error: Extraneous data expecting end of line.
628
629 matrix-data.sps:18: error: Matrix CORR had 9 rows but 4 rows were expected.
630
631 Table: Data List
632 ROWTYPE_,VARNAME_,var01,var02,var03,var04
633 MEAN,,21.40,5.00,72.90,17.40
634 STDDEV,,6.50,1.60,22.80,5.70
635 N,,106.00,106.00,106.00,106.00
636 CORR,var01,1.00,.32,.48,.28
637 CORR,var02,.32,1.00,.72,.54
638 CORR,var03,.48,.72,1.00,.50
639 CORR,var04,.28,.54,.50,1.00
640 ])
641 AT_CLEANUP
642
643 AT_SETUP([MATRIX DATA - too few rows])
644 AT_DATA([matrix-data.sps], [dnl
645 matrix data
646     variables = rowtype_ s1 var01 var02 var03 var04
647     /split s1
648     /format = upper diagonal
649     /file='matrix-data.txt'.
650 FORMATS var01 TO var04 (F6.2).
651 LIST.
652 ])
653 AT_DATA([matrix-data.txt], [dnl
654 mean 1    21.4  5.0  72.9  17.4
655 sd   1    6.5  1.6  22.8  5.7
656 n    1   106  106  106  106
657 corr 1   1.00  .32  .48  .28
658 corr 2   1.00  .32  .48  .28
659 corr 2        2.00  .72  .54
660 ])
661
662 AT_CHECK([pspp -O format=csv matrix-data.sps], [1], [dnl
663 matrix-data.txt:5: error: Matrix CORR had 1 rows but 4 rows were expected.
664  
665 matrix-data.txt:6: error: Matrix CORR had 2 rows but 4 rows were expected.
666
667 Table: Split Values
668 Variable,Value
669 s1,1
670
671 Table: Data List
672 s1,ROWTYPE_,VARNAME_,var01,var02,var03,var04
673 1,MEAN,,21.40,5.00,72.90,17.40
674 1,STDDEV,,6.50,1.60,22.80,5.70
675 1,N,,106.00,106.00,106.00,106.00
676 1,CORR,var01,1.00,.32,.48,.28
677 1,CORR,var02,.32,1.00,.  ,.  @&t@
678 1,CORR,var03,.48,.  ,1.00,.  @&t@
679 1,CORR,var04,.28,.  ,.  ,1.00
680
681 Table: Split Values
682 Variable,Value
683 s1,2
684
685 Table: Data List
686 s1,ROWTYPE_,VARNAME_,var01,var02,var03,var04
687 2,CORR,var01,1.00,.32,.48,.28
688 2,CORR,var02,.32,2.00,.72,.54
689 2,CORR,var03,.48,.72,1.00,.  @&t@
690 2,CORR,var04,.28,.54,.  ,1.00
691 ])
692 AT_CLEANUP
693
694 AT_SETUP([MATRIX DATA - badly formed])
695 AT_DATA([data.sps], [dnl
696 data list list NOTABLE /ROWTYPE_ (a8) VARNAME_(a4) v1 v2 v3 v4xxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzxxxxxxxxx.
697 begin data
698 mean ""                          1 2 3 4
699 sd   ""                          5 6 7 8
700 n    ""                          2 3 4 5
701 corr v1                          11 22 33 44
702 corr v2                          55 66 77 88
703 corr v3                          111 222 333 444
704 corr v4                           4 3 21 1
705 end data.
706
707 DEBUG MATRIX READ.
708 ])
709
710 AT_CHECK([pspp --testing-mode -O format=csv data.sps], [0], [dnl
711 data.sps:12: warning: DEBUG MATRIX READ: CORR matrix has 4 columns but 3 rows named variables to be analyzed (and 1 rows named unknown variables).
712
713 Table: Debug Matrix Reader
714 ,,,v1,v2,v3,v4xxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzxxxxxxxxx
715 1,Correlation,v1,11.000,22.000,33.000,44.000
716 ,,v2,55.000,66.000,77.000,88.000
717 ,,v3,111.000,222.000,333.000,444.000
718 ,,v4xxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzxxxxxxxxx,.   ,.   ,.   ,.   @&t@
719 ,N,Value,2.000,3.000,4.000,5.000
720 ,Mean,Value,1.000,2.000,3.000,4.000
721 ,Standard Deviation,Value,.000,.000,.000,.000
722 ])
723 AT_CLEANUP
724
725 AT_SETUP([MATRIX DATA - N subcommand])
726 AT_DATA([matrix-data.sps], [dnl
727 matrix data
728     variables = rowtype_  var01 var02 var03 var04
729     /n = 99
730     /format = upper nodiagonal.
731 begin data
732 mean 34 35 36 37
733 sd   22 11 55 66
734 n_vector 1 2 3 4
735 corr  9 8 7
736 corr  6 5
737 corr  4
738 end data.
739
740 list.
741 ])
742
743 AT_CHECK([pspp -O format=csv matrix-data.sps], [1], [dnl
744 matrix-data.sps:8: error: N record is not allowed with N subcommand.  Ignoring N record.
745
746 Table: Data List
747 ROWTYPE_,VARNAME_,var01,var02,var03,var04
748 N,,99.0000,99.0000,99.0000,99.0000
749 MEAN,,34.0000,35.0000,36.0000,37.0000
750 STDDEV,,22.0000,11.0000,55.0000,66.0000
751 CORR,var01,1.0000,9.0000,8.0000,7.0000
752 CORR,var02,9.0000,1.0000,6.0000,5.0000
753 CORR,var03,8.0000,6.0000,1.0000,4.0000
754 CORR,var04,7.0000,5.0000,4.0000,1.0000
755 ])
756 AT_CLEANUP
757
758 dnl Keep this test in sync with Example 3 in doc/matrices.texi.
759 AT_SETUP([MATRIX DATA - N subcommand - 2])
760 AT_DATA([matrix-data.sps], [dnl
761 MATRIX DATA
762     VARIABLES=ROWTYPE_ var01 TO var08
763     /FORMAT=UPPER NODIAGONAL
764     /N 92.
765 BEGIN DATA.
766 MEAN  24.3   5.4  69.7  20.1  13.4   2.7  27.9   3.7
767 SD     5.7   1.5  23.5   5.8   2.8   4.5   5.4   1.5
768 CORR         .17   .50  -.33   .27   .36  -.22   .18
769 CORR               .29   .29  -.20   .32   .12   .38
770 CORR                     .05   .20  -.15   .16   .21
771 CORR                           .20   .32  -.17   .12
772 CORR                                 .27   .12  -.24
773 CORR                                      -.20  -.38
774 CORR                                             .04
775 END DATA.
776 FORMATS var01 TO var08(F6.2).
777 LIST.
778 ])
779
780 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
781 Table: Data List
782 ROWTYPE_,VARNAME_,var01,var02,var03,var04,var05,var06,var07,var08
783 N,,92.00,92.00,92.00,92.00,92.00,92.00,92.00,92.00
784 MEAN,,24.30,5.40,69.70,20.10,13.40,2.70,27.90,3.70
785 STDDEV,,5.70,1.50,23.50,5.80,2.80,4.50,5.40,1.50
786 CORR,var01,1.00,.17,.50,-.33,.27,.36,-.22,.18
787 CORR,var02,.17,1.00,.29,.29,-.20,.32,.12,.38
788 CORR,var03,.50,.29,1.00,.05,.20,-.15,.16,.21
789 CORR,var04,-.33,.29,.05,1.00,.20,.32,-.17,.12
790 CORR,var05,.27,-.20,.20,.20,1.00,.27,.12,-.24
791 CORR,var06,.36,.32,-.15,.32,.27,1.00,-.20,-.38
792 CORR,var07,-.22,.12,.16,-.17,.12,-.20,1.00,.04
793 CORR,var08,.18,.38,.21,.12,-.24,-.38,.04,1.00
794 ])
795 AT_CLEANUP
796
797 dnl A "no-crash" test.  This was observed to cause problems.
798 dnl See bug #58596
799 AT_SETUP([MATRIX DATA - crash])
800
801 AT_DATA([matrix-data.sps], [dnl
802 begin data
803 corr 31
804
805 matrix data
806     var1
807 begin data
808     corr    1.00
809 end data .
810
811 matrix data
812     variables = roxtype_  var01
813    /format = upper nodiagonal.
814 begin data
815 ])
816
817 AT_CHECK([pspp -O format=csv matrix-data.sps], [1], [ignore])
818 AT_CLEANUP
819 \f
820 dnl Keep this test in sync with Example 6 in doc/matrices.texi.
821 AT_SETUP([MATRIX DATA - LOWER DIAGONAL without ROWTYPE_])
822 AT_DATA([matrix-data.sps], [dnl
823 MATRIX DATA
824     VARIABLES=var01 TO var08
825    /CONTENTS=MEAN SD N CORR.
826 BEGIN DATA.
827 24.3   5.4  69.7  20.1  13.4   2.7  27.9   3.7
828  5.7   1.5  23.5   5.8   2.8   4.5   5.4   1.5
829   92    92    92    92    92    92    92    92
830 1.00
831  .18  1.00
832 -.22  -.17  1.00
833  .36   .31  -.14  1.00
834  .27   .16  -.12   .22  1.00
835  .33   .15  -.17   .24   .21  1.00
836  .50   .29  -.20   .32   .12   .38  1.00
837  .17   .29  -.05   .20   .27   .20   .04  1.00
838 END DATA.
839 FORMATS var01 TO var08(F5.2).
840 LIST.
841 ])
842 AT_CHECK([pspp matrix-data.sps -O format=csv], [0], [dnl
843 Table: Data List
844 ROWTYPE_,VARNAME_,var01,var02,var03,var04,var05,var06,var07,var08
845 MEAN,,24.30,5.40,69.70,20.10,13.40,2.70,27.90,3.70
846 STDDEV,,5.70,1.50,23.50,5.80,2.80,4.50,5.40,1.50
847 N,,92.00,92.00,92.00,92.00,92.00,92.00,92.00,92.00
848 CORR,var01,1.00,.18,-.22,.36,.27,.33,.50,.17
849 CORR,var02,.18,1.00,-.17,.31,.16,.15,.29,.29
850 CORR,var03,-.22,-.17,1.00,-.14,-.12,-.17,-.20,-.05
851 CORR,var04,.36,.31,-.14,1.00,.22,.24,.32,.20
852 CORR,var05,.27,.16,-.12,.22,1.00,.21,.12,.27
853 CORR,var06,.33,.15,-.17,.24,.21,1.00,.38,.20
854 CORR,var07,.50,.29,-.20,.32,.12,.38,1.00,.04
855 CORR,var08,.17,.29,-.05,.20,.27,.20,.04,1.00
856 ])
857 AT_CLEANUP
858
859 AT_SETUP([MATRIX DATA - extraneous data without ROWTYPE_])
860 AT_DATA([matrix-data.sps], [dnl
861 MATRIX DATA
862     VARIABLES=var01 TO var08
863    /CONTENTS=MEAN SD N CORR.
864 BEGIN DATA.
865 24.3   5.4  69.7  20.1  13.4   2.7  27.9   3.7
866  5.7   1.5  23.5   5.8   2.8   4.5   5.4   1.5
867   92    92    92    92    92    92    92    92
868 1.00   .18
869  .18  1.00
870 -.22  -.17  1.00
871  .36   .31  -.14  1.00
872  .27   .16  -.12   .22  1.00
873  .33   .15  -.17   .24   .21  1.00
874  .50   .29  -.20   .32   .12   .38  1.00
875  .17   .29  -.05   .20   .27   .20   .04  1.00
876 END DATA.
877 FORMATS var01 TO var08(F5.2).
878 LIST.
879 ])
880 AT_CHECK([pspp matrix-data.sps -O format=csv], [1], [dnl
881 matrix-data.sps:8.8-8.10: error: Extraneous data expecting end of line.
882
883 Table: Data List
884 ROWTYPE_,VARNAME_,var01,var02,var03,var04,var05,var06,var07,var08
885 MEAN,,24.30,5.40,69.70,20.10,13.40,2.70,27.90,3.70
886 STDDEV,,5.70,1.50,23.50,5.80,2.80,4.50,5.40,1.50
887 N,,92.00,92.00,92.00,92.00,92.00,92.00,92.00,92.00
888 CORR,var01,1.00,.18,-.22,.36,.27,.33,.50,.17
889 CORR,var02,.18,1.00,-.17,.31,.16,.15,.29,.29
890 CORR,var03,-.22,-.17,1.00,-.14,-.12,-.17,-.20,-.05
891 CORR,var04,.36,.31,-.14,1.00,.22,.24,.32,.20
892 CORR,var05,.27,.16,-.12,.22,1.00,.21,.12,.27
893 CORR,var06,.33,.15,-.17,.24,.21,1.00,.38,.20
894 CORR,var07,.50,.29,-.20,.32,.12,.38,1.00,.04
895 CORR,var08,.17,.29,-.05,.20,.27,.20,.04,1.00
896 ])
897 AT_CLEANUP
898
899 dnl Keep this test in sync with Example 7 in doc/matrices.texi.
900 AT_SETUP([MATRIX DATA - Split variables with explicit values without ROWTYPE_])
901 AT_DATA([matrix-data.sps], [dnl
902 MATRIX DATA
903     VARIABLES=s1 var01 TO var04
904     /SPLIT=s1
905     /FORMAT=FULL
906     /CONTENTS=MEAN SD N CORR.
907 BEGIN DATA.
908 0 34 35 36 37
909 0 22 11 55 66
910 0 99 98 99 92
911 0  1 .9 .8 .7
912 0 .9  1 .6 .5
913 0 .8 .6  1 .4
914 0 .7 .5 .4  1
915 1 44 45 34 39
916 1 23 15 51 46
917 1 98 34 87 23
918 1  1 .2 .3 .4
919 1 .2  1 .5 .6
920 1 .3 .5  1 .7
921 1 .4 .6 .7  1
922 END DATA.
923 FORMATS var01 TO var04(F5.2).
924 LIST.
925 ])
926 AT_CHECK([pspp matrix-data.sps -O format=csv], [0], [dnl
927 Table: Split Values
928 Variable,Value
929 s1,0
930
931 Table: Data List
932 s1,ROWTYPE_,VARNAME_,var01,var02,var03,var04
933 0,MEAN,,34.00,35.00,36.00,37.00
934 0,STDDEV,,22.00,11.00,55.00,66.00
935 0,N,,99.00,98.00,99.00,92.00
936 0,CORR,var01,1.00,.90,.80,.70
937 0,CORR,var02,.90,1.00,.60,.50
938 0,CORR,var03,.80,.60,1.00,.40
939 0,CORR,var04,.70,.50,.40,1.00
940
941 Table: Split Values
942 Variable,Value
943 s1,1
944
945 Table: Data List
946 s1,ROWTYPE_,VARNAME_,var01,var02,var03,var04
947 1,MEAN,,44.00,45.00,34.00,39.00
948 1,STDDEV,,23.00,15.00,51.00,46.00
949 1,N,,98.00,34.00,87.00,23.00
950 1,CORR,var01,1.00,.20,.30,.40
951 1,CORR,var02,.20,1.00,.50,.60
952 1,CORR,var03,.30,.50,1.00,.70
953 1,CORR,var04,.40,.60,.70,1.00
954 ])
955 AT_CLEANUP
956
957 dnl Keep this test in sync with Example 8 in doc/matrices.texi.
958 AT_SETUP([MATRIX DATA - Split variable with sequential values without ROWTYPE_])
959 AT_DATA([matrix-data.sps], [dnl
960 MATRIX DATA
961     VARIABLES=var01 TO var04
962     /SPLIT=s1
963     /FORMAT=FULL
964     /CONTENTS=MEAN SD N CORR.
965 BEGIN DATA.
966 34 35 36 37
967 22 11 55 66
968 99 98 99 92
969  1 .9 .8 .7
970 .9  1 .6 .5
971 .8 .6  1 .4
972 .7 .5 .4  1
973 44 45 34 39
974 23 15 51 46
975 98 34 87 23
976  1 .2 .3 .4
977 .2  1 .5 .6
978 .3 .5  1 .7
979 .4 .6 .7  1
980 END DATA.
981 FORMATS var01 TO var04(F5.2).
982 LIST.
983 ])
984 AT_CHECK([pspp matrix-data.sps -O format=csv], [0], [dnl
985 Table: Split Values
986 Variable,Value
987 s1,1
988
989 Table: Data List
990 s1,ROWTYPE_,VARNAME_,var01,var02,var03,var04
991 1,MEAN,,34.00,35.00,36.00,37.00
992 1,STDDEV,,22.00,11.00,55.00,66.00
993 1,N,,99.00,98.00,99.00,92.00
994 1,CORR,var01,1.00,.90,.80,.70
995 1,CORR,var02,.90,1.00,.60,.50
996 1,CORR,var03,.80,.60,1.00,.40
997 1,CORR,var04,.70,.50,.40,1.00
998
999 Table: Split Values
1000 Variable,Value
1001 s1,2
1002
1003 Table: Data List
1004 s1,ROWTYPE_,VARNAME_,var01,var02,var03,var04
1005 2,MEAN,,44.00,45.00,34.00,39.00
1006 2,STDDEV,,23.00,15.00,51.00,46.00
1007 2,N,,98.00,34.00,87.00,23.00
1008 2,CORR,var01,1.00,.20,.30,.40
1009 2,CORR,var02,.20,1.00,.50,.60
1010 2,CORR,var03,.30,.50,1.00,.70
1011 2,CORR,var04,.40,.60,.70,1.00
1012 ])
1013 AT_CLEANUP
1014
1015 dnl Keep this test in sync with Example 9 in doc/matrices.texi.
1016 AT_SETUP([MATRIX DATA - Factor variables grouping within-cell records by factor without ROWTYPE_])
1017 AT_DATA([matrix-data.sps], [dnl
1018 MATRIX DATA
1019     VARIABLES=f1 var01 TO var04
1020     /FACTOR=f1
1021     /CELLS=2
1022     /CONTENTS=(MEAN SD N) CORR.
1023 BEGIN DATA.
1024 0 34 35 36 37
1025 0 22 11 55 66
1026 0 99 98 99 92
1027 1 44 45 34 39
1028 1 23 15 51 46
1029 1 98 34 87 23
1030    1
1031   .9  1
1032   .8 .6  1
1033   .7 .5 .4  1
1034 END DATA.
1035 FORMATS var01 TO var04(F5.1).
1036 LIST.
1037 ])
1038 AT_CHECK([pspp matrix-data.sps -O format=csv], [0], [dnl
1039 Table: Data List
1040 ROWTYPE_,f1,VARNAME_,var01,var02,var03,var04
1041 MEAN,0,,34.0,35.0,36.0,37.0
1042 STDDEV,0,,22.0,11.0,55.0,66.0
1043 N,0,,99.0,98.0,99.0,92.0
1044 MEAN,1,,44.0,45.0,34.0,39.0
1045 STDDEV,1,,23.0,15.0,51.0,46.0
1046 N,1,,98.0,34.0,87.0,23.0
1047 CORR,.,var01,1.0,.9,.8,.7
1048 CORR,.,var02,.9,1.0,.6,.5
1049 CORR,.,var03,.8,.6,1.0,.4
1050 CORR,.,var04,.7,.5,.4,1.0
1051 ])
1052 AT_CLEANUP
1053
1054 dnl Keep this test in sync with Example 10 in doc/matrices.texi.
1055 AT_SETUP([MATRIX DATA - Factor variables grouping within-cell records by row type without ROWTYPE_])
1056 AT_DATA([matrix-data.sps], [dnl
1057 MATRIX DATA
1058     VARIABLES=f1 var01 TO var04
1059     /FACTOR=f1
1060     /CELLS=2
1061     /CONTENTS=(MEAN) (SD) (N) CORR.
1062 BEGIN DATA.
1063 0 34 35 36 37
1064 1 44 45 34 39
1065 0 22 11 55 66
1066 1 23 15 51 46
1067 0 99 98 99 92
1068 1 98 34 87 23
1069    1
1070   .9  1
1071   .8 .6  1
1072   .7 .5 .4  1
1073 END DATA.
1074 FORMATS var01 TO var04(F5.1).
1075 LIST.
1076 ])
1077 AT_CHECK([pspp matrix-data.sps -O format=csv], [0], [dnl
1078 Table: Data List
1079 ROWTYPE_,f1,VARNAME_,var01,var02,var03,var04
1080 MEAN,0,,34.0,35.0,36.0,37.0
1081 MEAN,1,,44.0,45.0,34.0,39.0
1082 STDDEV,0,,22.0,11.0,55.0,66.0
1083 STDDEV,1,,23.0,15.0,51.0,46.0
1084 N,0,,99.0,98.0,99.0,92.0
1085 N,1,,98.0,34.0,87.0,23.0
1086 CORR,.,var01,1.0,.9,.8,.7
1087 CORR,.,var02,.9,1.0,.6,.5
1088 CORR,.,var03,.8,.6,1.0,.4
1089 CORR,.,var04,.7,.5,.4,1.0
1090 ])
1091 AT_CLEANUP
1092
1093 AT_SETUP([MATRIX DATA - syntax errors])
1094 AT_DATA([matrix-data.sps], [dnl
1095 MATRIX DATA VARIABLES=var01 varname_.
1096 MATRIX DATA VARIABLES=v v v.
1097 MATRIX DATA VARIABLES=rowtype_ v1 v2 v3/SPLIT=rowtype_.
1098 MATRIX DATA VARIABLES=rowtype_ v1 v2 v3/FACTORS=rowtype_.
1099 MATRIX DATA VARIABLES=rowtype_ s1 v1 v2 v3/SPLIT=v1/FACTORS=v1.
1100
1101 MATRIX DATA VARIABLES=v1 v2 v3/FORMAT=FULL NODIAGONAL.
1102 MATRIX DATA VARIABLES=v1 v2 v3/FACTORS=v1.
1103 MATRIX DATA VARIABLES=v1 v2 v3.
1104 BEGIN DATA.
1105 END DATA.
1106 MATRIX DATA VARIABLES=v1/FACTORS=v1.
1107 MATRIX DATA VARIABLES=v1 v2 v3 ROWTYPE_.
1108 MATRIX DATA VARIABLES=v1 v2 v3/CONTENTS=N/N=5.
1109 MATRIX DATA VARIABLES=v1/CONTENTS=XYZZY.
1110 MATRIX DATA VARIABLES=v1/CONTENTS=(.
1111 MATRIX DATA VARIABLES=v1/CONTENTS=(CORR.
1112 MATRIX DATA VARIABLES=v1/CONTENTS=).
1113 MATRIX DATA.
1114 MATRIX DATA VARIABLES=v*.
1115 MATRIX DATA VARIABLES=v/N=-1.
1116 MATRIX DATA VARIABLES=v/FORMAT=XYZZY.
1117 MATRIX DATA VARIABLES=v/FILE=123.
1118 MATRIX DATA VARIABLES=v/SPLIT=123.
1119 MATRIX DATA VARIABLES=v/CELLS=-1.
1120 MATRIX DATA VARIABLES=v/XYZZY.
1121 ])
1122 AT_CHECK([pspp matrix-data.sps -O format=csv], [1], [dnl
1123 matrix-data.sps:1: error: MATRIX DATA: VARIABLES may not include VARNAME_.
1124
1125 matrix-data.sps:2: error: MATRIX DATA: Variable v appears twice in variable list.
1126
1127 matrix-data.sps:3: error: MATRIX DATA: ROWTYPE_ is not allowed on SPLIT or FACTORS.
1128
1129 matrix-data.sps:4: error: MATRIX DATA: ROWTYPE_ is not allowed on SPLIT or FACTORS.
1130
1131 matrix-data.sps:5: error: MATRIX DATA: v1 may not appear on both SPLIT and FACTORS.
1132
1133 matrix-data.sps:7: error: MATRIX DATA: FORMAT=FULL and FORMAT=NODIAGONAL are mutually exclusive.
1134
1135 matrix-data.sps:8: error: MATRIX DATA: CELLS is required when factor variables are specified and VARIABLES does not include ROWTYPE_.
1136
1137 matrix-data.sps:9: warning: MATRIX DATA: CONTENTS was not specified and VARIABLES does not include ROWTYPE_.  Assuming CONTENTS=CORR.
1138
1139 matrix-data.sps:12: error: MATRIX DATA: CELLS is required when factor variables are specified and VARIABLES does not include ROWTYPE_.
1140
1141 matrix-data.sps:13: error: MATRIX DATA: VARIABLES includes ROWTYPE_ but the continuous variables are not the last ones on VARIABLES.
1142
1143 matrix-data.sps:14: error: MATRIX DATA: Cannot specify N on CONTENTS along with the N subcommand.
1144
1145 matrix-data.sps:15.35-15.39: error: MATRIX DATA: Syntax error at `XYZZY': Row type keyword expected.
1146
1147 matrix-data.sps:16.36: error: MATRIX DATA: Syntax error at end of command: Row type keyword expected.
1148
1149 matrix-data.sps:17.40: error: MATRIX DATA: Syntax error at end of command: Row type keyword expected.
1150
1151 matrix-data.sps:18.35: error: MATRIX DATA: Syntax error at `)': Row type keyword expected.
1152
1153 matrix-data.sps:19.12: error: MATRIX DATA: Syntax error at end of command: expecting VARIABLES.
1154
1155 matrix-data.sps:20.24: error: MATRIX DATA: Syntax error at `*': expecting `/'.
1156
1157 matrix-data.sps:21.27-21.28: error: MATRIX DATA: Syntax error at `-1': Expected non-negative integer for N.
1158
1159 matrix-data.sps:22.32-22.36: error: MATRIX DATA: Syntax error at `XYZZY'.
1160
1161 matrix-data.sps:23.30-23.32: error: MATRIX DATA: Syntax error at `123': expecting a file name or handle name.
1162
1163 matrix-data.sps:24.31-24.33: error: MATRIX DATA: Syntax error at `123': expecting variable name.
1164
1165 matrix-data.sps:25.31-25.32: error: MATRIX DATA: Syntax error at `-1': Expected non-negative integer for CELLS.
1166
1167 matrix-data.sps:26.25-26.29: error: MATRIX DATA: Syntax error at `XYZZY'.
1168 ])
1169 AT_CLEANUP
1170
1171 dnl I don't know what lunatic thought this was OK, but we strive to be
1172 dnl compatible.
1173 AT_SETUP([MATRIX DATA - plus and minus as delimiters])
1174 AT_DATA([matrix-data.sps], [dnl
1175 MATRIX DATA
1176     VARIABLES=ROWTYPE_ var01 TO var08.
1177 BEGIN DATA.
1178 MEAN+24.3+5.4+69.7+20.1+13.4+2.7+27.9+3.7
1179 SD +5.7+1.5+23.5+5.8+2.8+4.5+5.4+1.5
1180 N+92+92+92+92+92+92+92+92
1181 CORR+1.00
1182 CORR+.18+1.00
1183 CORR-.22e+0-.17+1.00
1184 CORR+.36d-0+.31-.14+1.00
1185 CORR+.27+.16-.12+.22+1.00
1186 CORR+.33+.15-.17+.24+.21+1.00
1187 CORR+.50+.29-.20+.32+.12+.38+1.00
1188 CORR+.17+.29-.05+.20+.27+.20+.04+1.00
1189 END DATA.
1190 FORMATS var01 TO var08(F5.2).
1191 LIST.
1192 ])
1193
1194 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
1195 Table: Data List
1196 ROWTYPE_,VARNAME_,var01,var02,var03,var04,var05,var06,var07,var08
1197 MEAN,,24.30,5.40,69.70,20.10,13.40,2.70,27.90,3.70
1198 STDDEV,,5.70,1.50,23.50,5.80,2.80,4.50,5.40,1.50
1199 N,,92.00,92.00,92.00,92.00,92.00,92.00,92.00,92.00
1200 CORR,var01,1.00,.18,-.22,.36,.27,.33,.50,.17
1201 CORR,var02,.18,1.00,-.17,.31,.16,.15,.29,.29
1202 CORR,var03,-.22,-.17,1.00,-.14,-.12,-.17,-.20,-.05
1203 CORR,var04,.36,.31,-.14,1.00,.22,.24,.32,.20
1204 CORR,var05,.27,.16,-.12,.22,1.00,.21,.12,.27
1205 CORR,var06,.33,.15,-.17,.24,.21,1.00,.38,.20
1206 CORR,var07,.50,.29,-.20,.32,.12,.38,1.00,.04
1207 CORR,var08,.17,.29,-.05,.20,.27,.20,.04,1.00
1208 ])
1209 AT_CLEANUP