AT_BANNER([EXAMINE]) AT_SETUP([EXAMINE]) AT_DATA([examine.sps], [ DATA LIST LIST /QUALITY * W * BRAND * . BEGIN DATA 3 1 1 2 2 1 1 2 1 1 1 1 4 1 1 4 1 1 5 1 2 2 1 2 4 4 2 2 1 2 3 1 2 7 1 3 4 2 3 5 3 3 3 1 3 6 1 3 END DATA WEIGHT BY w. VARIABLE LABELS brand 'Manufacturer'. VARIABLE LABELS quality 'Breaking Strain'. VALUE LABELS /brand 1 'Aspeger' 2 'Bloggs' 3 'Charlies'. LIST /FORMAT=NUMBERED. EXAMINE quality BY brand /STATISTICS descriptives extreme(3) . ]) AT_CHECK([pspp -o pspp.csv examine.sps]) dnl In the following data, only the extreme values have been checked. dnl The descriptives have been blindly pasted. AT_CHECK([cat pspp.csv], [0], [dnl Table: Reading free-form data from INLINE. Variable,Format QUALITY,F8.0 W,F8.0 BRAND,F8.0 Table: Data List Case Number,QUALITY,W,BRAND 1,3.00,1.00,1.00 2,2.00,2.00,1.00 3,1.00,2.00,1.00 4,1.00,1.00,1.00 5,4.00,1.00,1.00 6,4.00,1.00,1.00 7,5.00,1.00,2.00 8,2.00,1.00,2.00 9,4.00,4.00,2.00 10,2.00,1.00,2.00 11,3.00,1.00,2.00 12,7.00,1.00,3.00 13,4.00,2.00,3.00 14,5.00,3.00,3.00 15,3.00,1.00,3.00 16,6.00,1.00,3.00 Table: Case Processing Summary ,Cases,,,,, ,Valid,,Missing,,Total, ,N,Percent,N,Percent,N,Percent Breaking Strain,24.00,100%,.00,0%,24.00,100% Table: Extreme Values ,,,Case Number,Value Breaking Strain,Highest,1,12,7.00 ,,2,16,6.00 ,,3,7,5.00 ,Lowest,1,3,1.00 ,,2,3,1.00 ,,3,4,1.00 Table: Descriptives ,,,Statistic,Std. Error Breaking Strain,Mean,,3.54,.32 ,95% Confidence Interval for Mean,Lower Bound,2.87, ,,Upper Bound,4.21, ,5% Trimmed Mean,,3.50, ,Median,,4.00, ,Variance,,2.52, ,Std. Deviation,,1.59, ,Minimum,,1.00, ,Maximum,,7.00, ,Range,,6.00, ,Interquartile Range,,2.75, ,Skewness,,.06,.47 ,Kurtosis,,-.36,.92 Table: Case Processing Summary ,,Cases,,,,, ,,Valid,,Missing,,Total, ,Manufacturer,N,Percent,N,Percent,N,Percent Breaking Strain,Aspeger,8.00,100%,.00,0%,8.00,100% ,Bloggs,8.00,100%,.00,0%,8.00,100% ,Charlies,8.00,100%,.00,0%,8.00,100% Table: Extreme Values ,Manufacturer,,,Case Number,Value Breaking Strain,Aspeger,Highest,1,5,4.00 ,,,2,6,4.00 ,,,3,1,3.00 ,,Lowest,1,3,1.00 ,,,2,3,1.00 ,,,3,4,1.00 ,Bloggs,Highest,1,7,5.00 ,,,2,9,4.00 ,,,3,9,4.00 ,,Lowest,1,8,2.00 ,,,2,10,2.00 ,,,3,11,3.00 ,Charlies,Highest,1,12,7.00 ,,,2,16,6.00 ,,,3,14,5.00 ,,Lowest,1,15,3.00 ,,,2,13,4.00 ,,,3,13,4.00 Table: Descriptives ,Manufacturer,,,Statistic,Std. Error Breaking Strain,Aspeger,Mean,,2.25,.45 ,,95% Confidence Interval for Mean,Lower Bound,1.18, ,,,Upper Bound,3.32, ,,5% Trimmed Mean,,2.22, ,,Median,,2.00, ,,Variance,,1.64, ,,Std. Deviation,,1.28, ,,Minimum,,1.00, ,,Maximum,,4.00, ,,Range,,3.00, ,,Interquartile Range,,2.75, ,,Skewness,,.47,.75 ,,Kurtosis,,-1.55,1.48 ,Bloggs,Mean,,3.50,.38 ,,95% Confidence Interval for Mean,Lower Bound,2.61, ,,,Upper Bound,4.39, ,,5% Trimmed Mean,,3.50, ,,Median,,4.00, ,,Variance,,1.14, ,,Std. Deviation,,1.07, ,,Minimum,,2.00, ,,Maximum,,5.00, ,,Range,,3.00, ,,Interquartile Range,,1.75, ,,Skewness,,-.47,.75 ,,Kurtosis,,-.83,1.48 ,Charlies,Mean,,4.88,.44 ,,95% Confidence Interval for Mean,Lower Bound,3.83, ,,,Upper Bound,5.92, ,,5% Trimmed Mean,,4.86, ,,Median,,5.00, ,,Variance,,1.55, ,,Std. Deviation,,1.25, ,,Minimum,,3.00, ,,Maximum,,7.00, ,,Range,,4.00, ,,Interquartile Range,,1.75, ,,Skewness,,.30,.75 ,,Kurtosis,,.15,1.48 ]) AT_CLEANUP AT_SETUP([EXAMINE -- extremes]) AT_DATA([examine.sps], [dnl data list free /V1 W begin data. 1 1 2 1 3 2 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 1 11 1 12 1 13 1 14 1 15 1 16 1 17 1 18 2 19 1 20 1 end data. weight by w. examine v1 /statistics=extreme(6) . ]) AT_CHECK([pspp -o pspp.csv examine.sps]) AT_CHECK([cat pspp.csv], [0], [dnl Table: Case Processing Summary ,Cases,,,,, ,Valid,,Missing,,Total, ,N,Percent,N,Percent,N,Percent V1,23.00,100%,.00,0%,23.00,100% Table: Extreme Values ,,,Case Number,Value V1,Highest,1,21,20.00 ,,2,20,19.00 ,,3,19,18.00 ,,4,19,18.00 ,,5,18,17.00 ,,6,17,16.00 ,Lowest,1,1,1.00 ,,2,2,2.00 ,,3,3,3.00 ,,4,3,3.00 ,,5,4,3.00 ,,6,5,4.00 ]) AT_CLEANUP dnl Test the PERCENTILES subcommand of the EXAMINE command. dnl In particular test that it behaves properly when there are only dnl a few cases. AT_SETUP([EXAMINE -- percentiles]) AT_DATA([examine.sps], [dnl DATA LIST LIST /X *. BEGIN DATA. 2.00 8.00 5.00 END DATA. EXAMINE /x /PERCENTILES=HAVERAGE. EXAMINE /x /PERCENTILES=WAVERAGE. EXAMINE /x /PERCENTILES=ROUND. EXAMINE /x /PERCENTILES=EMPIRICAL. EXAMINE /x /PERCENTILES=AEMPIRICAL. ]) AT_CHECK([pspp -o pspp.csv examine.sps]) AT_CHECK([cat pspp.csv], [0], [dnl Table: Reading free-form data from INLINE. Variable,Format X,F8.0 Table: Case Processing Summary ,Cases,,,,, ,Valid,,Missing,,Total, ,N,Percent,N,Percent,N,Percent X,3,100%,0,0%,3,100% Table: Percentiles ,,Percentiles,,,,,, ,,5,10,25,50,75,90,95 X,HAverage,.40,.80,2.00,5.00,8.00,8.00,8.00 ,Tukey's Hinges,,,3.50,5.00,6.50,, Table: Case Processing Summary ,Cases,,,,, ,Valid,,Missing,,Total, ,N,Percent,N,Percent,N,Percent X,3,100%,0,0%,3,100% Table: Percentiles ,,Percentiles,,,,,, ,,5,10,25,50,75,90,95 X,Weighted Average,.30,.60,1.50,3.50,5.75,7.10,7.55 ,Tukey's Hinges,,,3.50,5.00,6.50,, Table: Case Processing Summary ,Cases,,,,, ,Valid,,Missing,,Total, ,N,Percent,N,Percent,N,Percent X,3,100%,0,0%,3,100% Table: Percentiles ,,Percentiles,,,,,, ,,5,10,25,50,75,90,95 X,Rounded,.00,.00,2.00,5.00,5.00,8.00,8.00 ,Tukey's Hinges,,,3.50,5.00,6.50,, Table: Case Processing Summary ,Cases,,,,, ,Valid,,Missing,,Total, ,N,Percent,N,Percent,N,Percent X,3,100%,0,0%,3,100% Table: Percentiles ,,Percentiles,,,,,, ,,5,10,25,50,75,90,95 X,Empirical,2.00,2.00,2.00,5.00,8.00,8.00,8.00 ,Tukey's Hinges,,,3.50,5.00,6.50,, Table: Case Processing Summary ,Cases,,,,, ,Valid,,Missing,,Total, ,N,Percent,N,Percent,N,Percent X,3,100%,0,0%,3,100% Table: Percentiles ,,Percentiles,,,,,, ,,5,10,25,50,75,90,95 X,Empirical with averaging,2.00,2.00,2.00,5.00,8.00,8.00,8.00 ,Tukey's Hinges,,,3.50,5.00,6.50,, ]) AT_CLEANUP AT_SETUP([EXAMINE -- missing values]) AT_DATA([examine.sps], [dnl DATA LIST LIST /x * y *. BEGIN DATA. 1 1 2 1 3 1 4 1 5 2 6 2 . 2 END DATA EXAMINE /x by y. ]) AT_CHECK([pspp -o pspp.csv examine.sps]) AT_CHECK([cat pspp.csv], [0], [dnl Table: Reading free-form data from INLINE. Variable,Format x,F8.0 y,F8.0 Table: Case Processing Summary ,Cases,,,,, ,Valid,,Missing,,Total, ,N,Percent,N,Percent,N,Percent x,6,85.7143%,1,14.2857%,7,100% Table: Case Processing Summary ,,Cases,,,,, ,,Valid,,Missing,,Total, ,y,N,Percent,N,Percent,N,Percent x,1.00,4,100%,0,0%,4,100% ,2.00,2,66.6667%,1,33.3333%,3,100% ]) AT_CLEANUP AT_SETUP([EXAMINE -- missing values and percentiles]) AT_DATA([examine.sps], [dnl DATA LIST LIST /X *. BEGIN DATA. 99 99 5.00 END DATA. MISSING VALUE X (99). EXAMINE /x /PERCENTILES=HAVERAGE. ]) AT_CHECK([pspp -o pspp.csv examine.sps]) dnl Ignore output -- this is just a no-crash check. AT_CLEANUP dnl Tests the trimmed mean calculation in the case dnl where the data is weighted towards the centre. AT_SETUP([EXAMINE -- trimmed mean]) AT_DATA([examine.sps], [dnl DATA LIST LIST /X * C *. BEGIN DATA. 1 1 2 49 3 2 END DATA. WEIGHT BY c. EXAMINE x /STATISTICS=DESCRIPTIVES . ]) AT_CHECK([pspp -o pspp.csv examine.sps]) AT_CHECK([cat pspp.csv], [0], [dnl Table: Reading free-form data from INLINE. Variable,Format X,F8.0 C,F8.0 Table: Case Processing Summary ,Cases,,,,, ,Valid,,Missing,,Total, ,N,Percent,N,Percent,N,Percent X,52.00,100%,.00,0%,52.00,100% Table: Descriptives ,,,Statistic,Std. Error X,Mean,,2.02,.03 ,95% Confidence Interval for Mean,Lower Bound,1.95, ,,Upper Bound,2.09, ,5% Trimmed Mean,,2.00, ,Median,,2.00, ,Variance,,.06, ,Std. Deviation,,.24, ,Minimum,,1.00, ,Maximum,,3.00, ,Range,,2.00, ,Interquartile Range,,.00, ,Skewness,,1.19,.33 ,Kurtosis,,15.73,.65 ]) AT_CLEANUP AT_SETUP([EXAMINE -- crash bug]) AT_DATA([examine.sps], [dnl data list list /a * x * y *. begin data. 3 1 3 5 1 4 7 2 3 end data. examine a by x by y /statistics=DESCRIPTIVES . ]) AT_CHECK([pspp -o pspp.csv examine.sps]) dnl Ignore output -- this is just a no-crash check. AT_CLEANUP dnl Test that two consecutive EXAMINE commands don't crash PSPP. AT_SETUP([EXAMINE -- consecutive runs don't crash]) AT_DATA([examine.sps], [dnl data list list /y * z *. begin data. 6 4 5 3 7 6 end data. EXAMINE /VARIABLES= z BY y. EXAMINE /VARIABLES= z. ]) AT_CHECK([pspp -o pspp.csv examine.sps]) dnl Ignore output -- this is just a no-crash check. AT_CLEANUP dnl Test that /DESCRIPTIVES does not crash in presence of missing values. AT_SETUP([EXAMINE -- missing values don't crash]) AT_DATA([examine.sps], [dnl data list list /x * y *. begin data. 1 0 2 0 . 0 3 1 4 1 end data. examine x by y /statistics=descriptives. ]) AT_CHECK([pspp -o pspp.csv examine.sps]) dnl Ignore output -- this is just a no-crash check. AT_CLEANUP dnl Test that having only a single case doesn't crash. AT_SETUP([EXAMINE -- single case doesn't crash]) AT_DATA([examine.sps], [dnl DATA LIST LIST /quality * . BEGIN DATA 3 END DATA EXAMINE quality /STATISTICS descriptives . ]) AT_CHECK([pspp -o pspp.csv examine.sps]) dnl Ignore output -- this is just a no-crash check. AT_CLEANUP dnl Test that all-missing data doesn't crash. AT_SETUP([EXAMINE -- all-missing data doesn't crash]) AT_DATA([examine.sps], [dnl DATA LIST LIST /x *. BEGIN DATA. . . . . END DATA. EXAMINE /x PLOT=HISTOGRAM. ]) AT_CHECK([pspp -o pspp.csv examine.sps], [0], [dnl warning: Not creating plot because data set is empty. ]) dnl Ignore output -- this is just a no-crash check. AT_CLEANUP dnl Test that big input doesn't crash (bug 11307). AT_SETUP([EXAMINE -- big input doesn't crash]) AT_DATA([examine.sps], [dnl INPUT PROGRAM. LOOP #I=1 TO 50000. COMPUTE X=NORMAL(10). END CASE. END LOOP. END FILE. END INPUT PROGRAM. EXAMINE /x /STATISTICS=DESCRIPTIVES. ]) AT_CHECK([pspp -o pspp.csv examine.sps]) dnl Ignore output -- this is just a no-crash check. AT_CLEANUP dnl Another test that big input doesn't crash. dnl The actual bug that this checks for has been lost. AT_SETUP([EXAMINE -- big input doesn't crash 2]) AT_DATA([make-big-input.pl], [for ($i=0; $i<100000; $i++) { print "AB12\n" }; for ($i=0; $i<100000; $i++) { print "AB04\n" }; ]) AT_CHECK([$PERL make-big-input.pl > large.txt]) AT_DATA([examine.sps], [dnl DATA LIST FILE='large.txt' /S 1-2 (A) X 3 . AGGREGATE OUTFILE=* /BREAK=X /A=N. EXAMINE /A BY /X. ]) AT_CHECK([pspp -o pspp.csv examine.sps]) dnl Ignore output -- this is just a no-crash check. AT_DATA([more-big-input.pl], [for ($i=0; $i<25000; $i++) { print "AB04\nAB12\n" }; ]) AT_CHECK([$PERL more-big-input.pl >> large.txt]) AT_CHECK([pspp -o pspp.csv examine.sps]) dnl Ignore output -- this is just a no-crash check. AT_CLEANUP