EXAMINE: Allow the /ID subcommand to take a non-numeric variable
[pspp] / tests / language / stats / examine.at
1 AT_BANNER([EXAMINE])
2
3 AT_SETUP([EXAMINE])
4 AT_DATA([examine.sps], [
5 DATA LIST LIST /QUALITY * W * BRAND * .
6 BEGIN DATA
7 3  1  1
8 2  2  1
9 1  2  1
10 1  1  1
11 4  1  1
12 4  1  1
13 5  1  2
14 2  1  2
15 4  4  2
16 2  1  2
17 3  1  2
18 7  1  3
19 4  2  3
20 5  3  3
21 3  1  3
22 6  1  3
23 END DATA
24
25 WEIGHT BY w.
26
27 VARIABLE LABELS brand   'Manufacturer'.
28 VARIABLE LABELS quality 'Breaking Strain'.
29
30 VALUE LABELS /brand 1 'Aspeger' 2 'Bloggs' 3 'Charlies'.
31
32 LIST /FORMAT=NUMBERED.
33
34 EXAMINE
35         quality BY brand
36         /STATISTICS descriptives extreme(3)
37         .
38 ])
39 AT_CHECK([pspp -o pspp.csv examine.sps])
40 dnl In the following data, only the extreme values have been checked.
41 dnl The descriptives have been blindly pasted.
42 AT_CHECK([cat pspp.csv], [0], [dnl
43 Table: Reading free-form data from INLINE.
44 Variable,Format
45 QUALITY,F8.0
46 W,F8.0
47 BRAND,F8.0
48
49 Table: Data List
50 Case Number,QUALITY,W,BRAND
51 1,3.00,1.00,1.00
52 2,2.00,2.00,1.00
53 3,1.00,2.00,1.00
54 4,1.00,1.00,1.00
55 5,4.00,1.00,1.00
56 6,4.00,1.00,1.00
57 7,5.00,1.00,2.00
58 8,2.00,1.00,2.00
59 9,4.00,4.00,2.00
60 10,2.00,1.00,2.00
61 11,3.00,1.00,2.00
62 12,7.00,1.00,3.00
63 13,4.00,2.00,3.00
64 14,5.00,3.00,3.00
65 15,3.00,1.00,3.00
66 16,6.00,1.00,3.00
67
68 Table: Case Processing Summary
69 ,Cases,,,,,
70 ,Valid,,Missing,,Total,
71 ,N,Percent,N,Percent,N,Percent
72 Breaking Strain,24.00,100%,.00,0%,24.00,100%
73
74 Table: Extreme Values
75 ,,,Case Number,Value
76 Breaking Strain,Highest,1,12,7.00
77 ,,2,16,6.00
78 ,,3,14,5.00
79 ,Lowest,1,3,1.00
80 ,,2,3,1.00
81 ,,3,4,1.00
82
83 Table: Descriptives
84 ,,,Statistic,Std. Error
85 Breaking Strain,Mean,,3.54,.32
86 ,95% Confidence Interval for Mean,Lower Bound,2.87,
87 ,,Upper Bound,4.21,
88 ,5% Trimmed Mean,,3.50,
89 ,Median,,4.00,
90 ,Variance,,2.52,
91 ,Std. Deviation,,1.59,
92 ,Minimum,,1.00,
93 ,Maximum,,7.00,
94 ,Range,,6.00,
95 ,Interquartile Range,,2.75,
96 ,Skewness,,.06,.47
97 ,Kurtosis,,-.36,.92
98
99 Table: Case Processing Summary
100 ,,Cases,,,,,
101 ,,Valid,,Missing,,Total,
102 ,Manufacturer,N,Percent,N,Percent,N,Percent
103 Breaking Strain,Aspeger,8.00,100%,.00,0%,8.00,100%
104 ,Bloggs,8.00,100%,.00,0%,8.00,100%
105 ,Charlies,8.00,100%,.00,0%,8.00,100%
106
107 Table: Extreme Values
108 ,Manufacturer,,,Case Number,Value
109 Breaking Strain,Aspeger,Highest,1,6,4.00
110 ,,,2,5,4.00
111 ,,,3,1,3.00
112 ,,Lowest,1,3,1.00
113 ,,,2,3,1.00
114 ,,,3,4,1.00
115 ,Bloggs,Highest,1,7,5.00
116 ,,,2,9,4.00
117 ,,,3,9,4.00
118 ,,Lowest,1,8,2.00
119 ,,,2,10,2.00
120 ,,,3,11,3.00
121 ,Charlies,Highest,1,12,7.00
122 ,,,2,16,6.00
123 ,,,3,14,5.00
124 ,,Lowest,1,15,3.00
125 ,,,2,13,4.00
126 ,,,3,13,4.00
127
128 Table: Descriptives
129 ,Manufacturer,,,Statistic,Std. Error
130 Breaking Strain,Aspeger,Mean,,2.25,.45
131 ,,95% Confidence Interval for Mean,Lower Bound,1.18,
132 ,,,Upper Bound,3.32,
133 ,,5% Trimmed Mean,,2.22,
134 ,,Median,,2.00,
135 ,,Variance,,1.64,
136 ,,Std. Deviation,,1.28,
137 ,,Minimum,,1.00,
138 ,,Maximum,,4.00,
139 ,,Range,,3.00,
140 ,,Interquartile Range,,2.75,
141 ,,Skewness,,.47,.75
142 ,,Kurtosis,,-1.55,1.48
143 ,Bloggs,Mean,,3.50,.38
144 ,,95% Confidence Interval for Mean,Lower Bound,2.61,
145 ,,,Upper Bound,4.39,
146 ,,5% Trimmed Mean,,3.50,
147 ,,Median,,4.00,
148 ,,Variance,,1.14,
149 ,,Std. Deviation,,1.07,
150 ,,Minimum,,2.00,
151 ,,Maximum,,5.00,
152 ,,Range,,3.00,
153 ,,Interquartile Range,,1.75,
154 ,,Skewness,,-.47,.75
155 ,,Kurtosis,,-.83,1.48
156 ,Charlies,Mean,,4.88,.44
157 ,,95% Confidence Interval for Mean,Lower Bound,3.83,
158 ,,,Upper Bound,5.92,
159 ,,5% Trimmed Mean,,4.86,
160 ,,Median,,5.00,
161 ,,Variance,,1.55,
162 ,,Std. Deviation,,1.25,
163 ,,Minimum,,3.00,
164 ,,Maximum,,7.00,
165 ,,Range,,4.00,
166 ,,Interquartile Range,,1.75,
167 ,,Skewness,,.30,.75
168 ,,Kurtosis,,.15,1.48
169 ])
170 AT_CLEANUP
171
172 AT_SETUP([EXAMINE -- extremes])
173 AT_DATA([examine.sps], [dnl
174 data list free /V1 W
175 begin data.
176 1  1
177 2  1
178 3  2
179 3  1
180 4  1
181 5  1
182 6  1
183 7  1
184 8  1
185 9  1
186 10 1
187 11 1
188 12 1
189 13 1
190 14 1
191 15 1
192 16 1
193 17 1
194 18 2
195 19 1
196 20 1
197 end data.
198
199 weight by w.
200
201 examine v1 
202  /statistics=extreme(6)
203  .
204 ])
205 AT_CHECK([pspp -o pspp.csv examine.sps])
206 AT_CHECK([cat pspp.csv], [0], [dnl
207 Table: Case Processing Summary
208 ,Cases,,,,,
209 ,Valid,,Missing,,Total,
210 ,N,Percent,N,Percent,N,Percent
211 V1,23.00,100%,.00,0%,23.00,100%
212
213 Table: Extreme Values
214 ,,,Case Number,Value
215 V1,Highest,1,21,20.00
216 ,,2,20,19.00
217 ,,3,19,18.00
218 ,,4,19,18.00
219 ,,5,18,17.00
220 ,,6,17,16.00
221 ,Lowest,1,1,1.00
222 ,,2,2,2.00
223 ,,3,3,3.00
224 ,,4,3,3.00
225 ,,5,4,3.00
226 ,,6,5,4.00
227 ])
228 AT_CLEANUP
229
230 dnl Test the PERCENTILES subcommand of the EXAMINE command.
231 dnl In particular test that it behaves properly when there are only 
232 dnl a few cases.
233 AT_SETUP([EXAMINE -- percentiles])
234 AT_DATA([examine.sps], [dnl
235 DATA LIST LIST /X *.
236 BEGIN DATA.
237 2.00 
238 8.00 
239 5.00 
240 END DATA.
241
242 EXAMINE /x
243         /PERCENTILES=HAVERAGE.
244
245 EXAMINE /x
246         /PERCENTILES=WAVERAGE.
247
248 EXAMINE /x
249         /PERCENTILES=ROUND.
250
251 EXAMINE /x
252         /PERCENTILES=EMPIRICAL.
253
254 EXAMINE /x
255         /PERCENTILES=AEMPIRICAL.
256 ])
257 AT_CHECK([pspp -o pspp.csv examine.sps])
258 AT_CHECK([cat pspp.csv], [0], [dnl
259 Table: Reading free-form data from INLINE.
260 Variable,Format
261 X,F8.0
262
263 Table: Case Processing Summary
264 ,Cases,,,,,
265 ,Valid,,Missing,,Total,
266 ,N,Percent,N,Percent,N,Percent
267 X,3,100%,0,0%,3,100%
268
269 Table: Percentiles
270 ,,Percentiles,,,,,,
271 ,,5,10,25,50,75,90,95
272 X,HAverage,.40,.80,2.00,5.00,8.00,8.00,8.00
273 ,Tukey's Hinges,,,3.50,5.00,6.50,,
274
275 Table: Case Processing Summary
276 ,Cases,,,,,
277 ,Valid,,Missing,,Total,
278 ,N,Percent,N,Percent,N,Percent
279 X,3,100%,0,0%,3,100%
280
281 Table: Percentiles
282 ,,Percentiles,,,,,,
283 ,,5,10,25,50,75,90,95
284 X,Weighted Average,.30,.60,1.50,3.50,5.75,7.10,7.55
285 ,Tukey's Hinges,,,3.50,5.00,6.50,,
286
287 Table: Case Processing Summary
288 ,Cases,,,,,
289 ,Valid,,Missing,,Total,
290 ,N,Percent,N,Percent,N,Percent
291 X,3,100%,0,0%,3,100%
292
293 Table: Percentiles
294 ,,Percentiles,,,,,,
295 ,,5,10,25,50,75,90,95
296 X,Rounded,.00,.00,2.00,5.00,5.00,8.00,8.00
297 ,Tukey's Hinges,,,3.50,5.00,6.50,,
298
299 Table: Case Processing Summary
300 ,Cases,,,,,
301 ,Valid,,Missing,,Total,
302 ,N,Percent,N,Percent,N,Percent
303 X,3,100%,0,0%,3,100%
304
305 Table: Percentiles
306 ,,Percentiles,,,,,,
307 ,,5,10,25,50,75,90,95
308 X,Empirical,2.00,2.00,2.00,5.00,8.00,8.00,8.00
309 ,Tukey's Hinges,,,3.50,5.00,6.50,,
310
311 Table: Case Processing Summary
312 ,Cases,,,,,
313 ,Valid,,Missing,,Total,
314 ,N,Percent,N,Percent,N,Percent
315 X,3,100%,0,0%,3,100%
316
317 Table: Percentiles
318 ,,Percentiles,,,,,,
319 ,,5,10,25,50,75,90,95
320 X,Empirical with averaging,2.00,2.00,2.00,5.00,8.00,8.00,8.00
321 ,Tukey's Hinges,,,3.50,5.00,6.50,,
322 ])
323 AT_CLEANUP
324
325 AT_SETUP([EXAMINE -- missing values])
326 AT_DATA([examine.sps], [dnl
327 DATA LIST LIST /x * y *.
328 BEGIN DATA.
329 1   1 
330 2   1
331 3   1
332 4   1
333 5   2
334 6   2
335 .   2
336 END DATA
337
338 EXAMINE /x by y
339         /MISSING = PAIRWISE
340         .
341 ])
342 AT_CHECK([pspp -o pspp.csv examine.sps])
343 AT_CHECK([cat pspp.csv], [0], [dnl
344 Table: Reading free-form data from INLINE.
345 Variable,Format
346 x,F8.0
347 y,F8.0
348
349 Table: Case Processing Summary
350 ,Cases,,,,,
351 ,Valid,,Missing,,Total,
352 ,N,Percent,N,Percent,N,Percent
353 x,6,85.7143%,1,14.2857%,7,100%
354
355 Table: Case Processing Summary
356 ,,Cases,,,,,
357 ,,Valid,,Missing,,Total,
358 ,y,N,Percent,N,Percent,N,Percent
359 x,1.00,4,100%,0,0%,4,100%
360 ,2.00,2,66.6667%,1,33.3333%,3,100%
361 ])
362 AT_CLEANUP
363
364
365 AT_SETUP([EXAMINE -- user missing values])
366 AT_DATA([examine-m.sps], [dnl
367 DATA LIST notable LIST /x * y *.
368 BEGIN DATA.
369 1                   2
370 9999999999          2
371 9999999999          99
372 END DATA.
373
374 MISSING VALUES x (9999999999).
375 MISSING VALUES y (99).
376
377 EXAMINE
378         /VARIABLES= x y
379         /MISSING=PAIRWISE.
380 ])
381 AT_CHECK([pspp -O format=csv examine-m.sps], [0], [dnl
382 Table: Case Processing Summary
383 ,Cases,,,,,
384 ,Valid,,Missing,,Total,
385 ,N,Percent,N,Percent,N,Percent
386 x,1,33.3333%,2,66.6667%,3,100%
387 y,2,66.6667%,1,33.3333%,3,100%
388 ])
389 AT_CLEANUP
390
391 AT_SETUP([EXAMINE -- missing values and percentiles])
392 AT_DATA([examine.sps], [dnl
393 DATA LIST LIST /X *.
394 BEGIN DATA.
395 99
396 99
397 5.00
398 END DATA.
399
400 MISSING VALUE X (99).
401
402 EXAMINE /x
403         /PERCENTILES=HAVERAGE.
404 ])
405 AT_CHECK([pspp -o pspp.csv examine.sps])
406 dnl Ignore output -- this is just a no-crash check.
407 AT_CLEANUP
408
409 dnl Tests the trimmed mean calculation in the case
410 dnl where the data is weighted towards the centre.
411 AT_SETUP([EXAMINE -- trimmed mean])
412 AT_DATA([examine.sps], [dnl
413 DATA LIST LIST /X * C *.
414 BEGIN DATA.
415 1 1
416 2 49
417 3 2
418 END DATA.
419
420 WEIGHT BY c.
421
422 EXAMINE
423         x
424         /STATISTICS=DESCRIPTIVES
425         .
426 ])
427 AT_CHECK([pspp -o pspp.csv examine.sps])
428 AT_CHECK([cat pspp.csv], [0], [dnl
429 Table: Reading free-form data from INLINE.
430 Variable,Format
431 X,F8.0
432 C,F8.0
433
434 Table: Case Processing Summary
435 ,Cases,,,,,
436 ,Valid,,Missing,,Total,
437 ,N,Percent,N,Percent,N,Percent
438 X,52.00,100%,.00,0%,52.00,100%
439
440 Table: Descriptives
441 ,,,Statistic,Std. Error
442 X,Mean,,2.02,.03
443 ,95% Confidence Interval for Mean,Lower Bound,1.95,
444 ,,Upper Bound,2.09,
445 ,5% Trimmed Mean,,2.00,
446 ,Median,,2.00,
447 ,Variance,,.06,
448 ,Std. Deviation,,.24,
449 ,Minimum,,1.00,
450 ,Maximum,,3.00,
451 ,Range,,2.00,
452 ,Interquartile Range,,.00,
453 ,Skewness,,1.19,.33
454 ,Kurtosis,,15.73,.65
455 ])
456 AT_CLEANUP
457
458 AT_SETUP([EXAMINE -- crash bug])
459 AT_DATA([examine.sps], [dnl
460 data list list /a * x * y *.
461 begin data.
462 3 1 3
463 5 1 4
464 7 2 3
465 end data.
466
467 examine a by x by y
468         /statistics=DESCRIPTIVES
469         . 
470 ])
471 AT_CHECK([pspp -o pspp.csv examine.sps])
472 dnl Ignore output -- this is just a no-crash check.
473 AT_CLEANUP
474
475 dnl Test that two consecutive EXAMINE commands don't crash PSPP.
476 AT_SETUP([EXAMINE -- consecutive runs don't crash])
477 AT_DATA([examine.sps], [dnl
478 data list list /y * z *.
479 begin data.
480 6 4
481 5 3
482 7 6
483 end data.
484
485 EXAMINE /VARIABLES= z BY y.
486
487 EXAMINE /VARIABLES= z. 
488 ])
489 AT_CHECK([pspp -o pspp.csv examine.sps])
490 dnl Ignore output -- this is just a no-crash check.
491 AT_CLEANUP
492
493 dnl Test that /DESCRIPTIVES does not crash in presence of missing values.
494 AT_SETUP([EXAMINE -- missing values don't crash])
495 AT_DATA([examine.sps], [dnl
496 data list list /x * y *.
497 begin data.
498 1 0
499 2 0
500 . 0
501 3 1
502 4 1
503 end data.
504 examine x by y /statistics=descriptives. 
505 ])
506 AT_CHECK([pspp -o pspp.csv examine.sps])
507 dnl Ignore output -- this is just a no-crash check.
508 AT_CLEANUP
509
510 dnl Test that having only a single case doesn't crash.
511 AT_SETUP([EXAMINE -- single case doesn't crash])
512 AT_DATA([examine.sps], [dnl
513 DATA LIST LIST /quality * .
514 BEGIN DATA
515 3  
516 END DATA
517
518
519 EXAMINE
520         quality 
521         /STATISTICS descriptives 
522         .
523 ])
524 AT_CHECK([pspp -o pspp.csv examine.sps])
525 dnl Ignore output -- this is just a no-crash check.
526 AT_CLEANUP
527
528 dnl Test that all-missing data doesn't crash.
529 AT_SETUP([EXAMINE -- all-missing data doesn't crash])
530 AT_DATA([examine.sps], [dnl
531 DATA LIST LIST /x *.
532 BEGIN DATA.
533 .
534 .
535 .
536 .
537 END DATA.
538
539 EXAMINE /x PLOT=HISTOGRAM.
540 ])
541 AT_CHECK([pspp -o pspp.csv examine.sps], [0], [ignore])
542 dnl Ignore output -- this is just a no-crash check.
543 AT_CLEANUP
544
545 dnl Test that big input doesn't crash (bug 11307).
546 AT_SETUP([EXAMINE -- big input doesn't crash])
547 AT_DATA([examine.sps], [dnl
548 INPUT PROGRAM.
549         LOOP #I=1 TO 50000.
550                 COMPUTE X=NORMAL(10).
551                 END CASE.
552         END LOOP.
553         END FILE.
554 END INPUT PROGRAM.
555
556
557 EXAMINE /x
558         /STATISTICS=DESCRIPTIVES.
559 ])
560 AT_CHECK([pspp -o pspp.csv examine.sps])
561 dnl Ignore output -- this is just a no-crash check.
562 AT_CLEANUP
563
564 dnl Another test that big input doesn't crash.
565 dnl The actual bug that this checks for has been lost.
566 AT_SETUP([EXAMINE -- big input doesn't crash 2])
567 AT_DATA([make-big-input.pl], 
568   [for ($i=0; $i<100000; $i++) { print "AB12\n" };
569    for ($i=0; $i<100000; $i++) { print "AB04\n" };
570 ])
571 AT_CHECK([$PERL make-big-input.pl > large.txt])
572 AT_DATA([examine.sps], [dnl
573 DATA LIST FILE='large.txt' /S 1-2 (A) X 3 .
574
575
576 AGGREGATE OUTFILE=* /BREAK=X /A=N.
577
578
579 EXAMINE /A BY X.
580 ])
581 AT_CHECK([pspp -o pspp.csv examine.sps])
582 dnl Ignore output -- this is just a no-crash check.
583 AT_DATA([more-big-input.pl], 
584   [for ($i=0; $i<25000; $i++) { print "AB04\nAB12\n" };
585 ])
586 AT_CHECK([$PERL more-big-input.pl >> large.txt])
587 AT_CHECK([pspp -o pspp.csv examine.sps])
588 dnl Ignore output -- this is just a no-crash check.
589 AT_CLEANUP
590
591
592 dnl Test that the ID command works with non-numberic variables
593 AT_SETUP([EXAMINE -- non-numeric ID])
594
595 AT_DATA([examine-id.sps], [dnl
596 data list notable list /x * y (a12).
597 begin data.
598 1  one
599 2  two
600 3  three
601 4  four
602 5  five
603 6  six
604 7  seven
605 8  eight
606 9  nine
607 10 ten
608 11 eleven
609 12 twelve
610 30 thirty
611 300 threehundred
612 end data.
613
614 examine x
615         /statistics = extreme
616         /id = y
617         /plot = boxplot
618         .
619 ])
620
621 AT_CHECK([pspp -O format=csv examine-id.sps], [0], 
622 [Table: Case Processing Summary
623 ,Cases,,,,,
624 ,Valid,,Missing,,Total,
625 ,N,Percent,N,Percent,N,Percent
626 x,14,100%,0,0%,14,100%
627
628 Table: Extreme Values
629 ,,,y,Value
630 x,Highest,1,threehundred,300.00
631 ,,2,thirty      ,30.00
632 ,,3,twelve      ,12.00
633 ,,4,eleven      ,11.00
634 ,,5,ten         ,10.00
635 ,Lowest,1,one         ,1.00
636 ,,2,two         ,2.00
637 ,,3,three       ,3.00
638 ,,4,four        ,4.00
639 ,,5,five        ,5.00
640 ])
641
642 AT_CLEANUP