From ccf2f45c091ce1555b4e2a36186c501675c18a59 Mon Sep 17 00:00:00 2001 From: John Darrington Date: Wed, 18 Feb 2004 14:13:54 +0000 Subject: [PATCH] Added Levene test. Added T-TEST section to pspp.texi --- doc/ChangeLog | 4 + doc/pspp.texi | 115 ++++++- po/POTFILES.in | 85 ----- po/en_GB.po | 586 ++++++++++++++++----------------- po/pspp.pot | 586 ++++++++++++++++----------------- src/ChangeLog | 15 + src/Makefile.am | 3 +- src/levene.c | 334 +++++++++++++++++++ src/levene.h | 43 +++ src/t-test.h | 36 +- src/t-test.q | 288 ++++++++-------- src/val.h | 72 ++++ src/var.h | 48 +-- src/vars-atr.c | 2 +- tests/command/t-test-groups.sh | 24 +- 15 files changed, 1355 insertions(+), 886 deletions(-) create mode 100644 src/levene.c create mode 100644 src/levene.h create mode 100644 src/val.h diff --git a/doc/ChangeLog b/doc/ChangeLog index c6520e22..3c70bf04 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +Wed Feb 18 21:50:36 WST 2004 John Darrington + + * Added a section on T-TEST + Mon Jan 5 12:37:03 WAST 2004 John Darrington * Added documentation for the HOST command. diff --git a/doc/pspp.texi b/doc/pspp.texi index c0efc83f..582692e8 100644 --- a/doc/pspp.texi +++ b/doc/pspp.texi @@ -7470,6 +7470,7 @@ far. * DESCRIPTIVES:: Descriptive statistics. * FREQUENCIES:: Frequency tables. * CROSSTABS:: Crosstabulation tables. +* T-TEST:: Test Hypotheses about means. @end menu @node DESCRIPTIVES, FREQUENCIES, Statistics, Statistics @@ -7663,7 +7664,7 @@ NTILES causes the specified quartiles to be reported. For instance, @code{/NTILES=4} would cause quartiles to be reported. In addition, particular percentiles can be requested with the PERCENTILES subcommand. -@node CROSSTABS, , FREQUENCIES, Statistics +@node CROSSTABS, T-TEST, FREQUENCIES, Statistics @section CROSSTABS @display @@ -7842,6 +7843,118 @@ Approximate T of uncertainty coefficient is wrong. Fixes for any of these deficiencies would be welcomed. +@node T-TEST, , CROSSTABS, Statistics +@comment node-name, next, previous, up + +@section T-TEST + +@display +T-TEST + /MISSING=@{ANALYSIS,LISTWISE@} @{EXCLUDE,INCLUDE@} + /CRITERIA=CIN(confidence) + + +(One Sample mode.) + TESTVAL=test_value + /VARIABLES=var_list + + +(Independent Samples mode.) + GROUPS=var(value1 [, value2]) + /VARIABLES=var_list + + +(Paired Samples mode.) + PAIRS=var_list [WITH var_list [(PAIRED)] ] + +@end display + + +The @cmd{T-TEST} procedure outputs tables used in testing hypotheses about +means. +It operates in one of three modes: +@itemize +@item One Sample mode. +@item Independent Groups mode. +@item Paired mode. +@end itemize + +@noindent +Each of these modes are described in more detail below. +There are two optional subcommands which are common to all modes. + +The @cmd{/CRITERIA} subcommand tells PSPP the confidence interval used +in the tests. The default value is 0.95. + + +The @cmd{MISSING} subcommand determines the handling of missing +variables. +If INCLUDE is set, then user-missing values are included in the +calculations. +If EXCLUDE is set, which is the default, user-missing +values are excluded. +If LISTWISE is set, then +the entire case is excluded whenever any value in that case has a +system-missing or, if INCLUDE is set, user-missing value. +If ANALYSIS is set, then cases are excluded only where a value used in +the analysis has a system-missing or, if INCLUDE is set, user-missing value. + + +@menu +* One Sample Mode:: Testing against a hypothesised mean +* Independent Samples Mode:: Testing two independent groups for the same mean +* Paired Samples Mode:: Testing two interdependet groups for the same mean +@end menu + +@node One Sample Mode, Independent Samples Mode, T-TEST, T-TEST +@comment node-name, next, previous, up + +@subsection One Sample Mode + +The @cmd{TESTVAL} subcommand invokes the One Sample mode. +This mode is used to test a population mean against a hypothesised +mean. +The value given to the @cmd{TESTVAL} subcommand is the value against +which you wish to test. +In this mode, you must also use the @cmd{/VARIABLES} subcommand to +tell PSPP which variables you wish to test. + +@node Independent Samples Mode, Paired Samples Mode, One Sample Mode, T-TEST +@comment node-name, next, previous, up +@subsection Independent Samples Mode + +The @cmd{GROUPS} subcommand invokes Independent Samples mode or +`Groups' mode. +This mode is used to test whether two groups of values have the +same population mean. +The variable given in the @cmd{GROUPS} subcommand is the independent +variable which determines to which group the samples belong. +The values in parentheses are the specific values of the independent +variable for each group. +In this mode, you must also use the @cmd{/VARIABLES} subcommand to +tell PSPP the dependent variables you wish to test. + +@node Paired Samples Mode, , Independent Samples Mode, T-TEST +@comment node-name, next, previous, up +@subsection Paired Samples Mode + +The @cmd{PAIRS} subcommand introduces Paired Samples mode. +Use this mode when repeated measures have been taken from the same +samples. +If the the @code{WITH} keyword is omitted, then tables for all +combinations of variables given in the @cmd{PAIRS} subcommand are +generated. +If the @code{WITH} keyword is given, and the @code{(PAIRED)} keyword +is also given, then the number of variables preceding @code{WITH} +must be the same as the number following it. +In this case, tables for each respective pair of variables are +generated. +In the event that the @code{WITH} keyword is given, but the +@code{(PAIRED)} keyword is omitted, then tables for each combination +of variable preceding @code{WITH} against variable following +@code{WITH} are generated. + + @node Utilities, Not Implemented, Statistics, Top @chapter Utilities diff --git a/po/POTFILES.in b/po/POTFILES.in index b71f4f6f..e69de29b 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -1,85 +0,0 @@ -src/correlations.q -src/crosstabs.q -src/descript.q -src/file-handle.q -src/frequencies.q -src/list.q -src/means.q -src/set.q -src/t-test.q -src/aggregate.c -src/algorithm.c -src/alloc.c -src/apply-dict.c -src/ascii.c -src/autorecode.c -src/cases.c -src/cmdline.c -src/command.c -src/compute.c -src/count.c -src/data-in.c -src/data-list.c -src/data-out.c -src/dfm.c -src/do-if.c -src/error.c -src/expr-evl.c -src/expr-opt.c -src/expr-prs.c -src/file-type.c -src/filename.c -src/flip.c -src/format.c -src/formats.c -src/get.c -src/getline.c -src/glob.c -src/groff-font.c -src/hash.c -src/heap.c -src/html.c -src/include.c -src/inpt-pgm.c -src/lexer.c -src/loop.c -src/magic.c -src/main.c -src/matrix-data.c -src/matrix.c -src/mis-val.c -src/misc.c -src/modify-vars.c -src/numeric.c -src/output.c -src/pfm-read.c -src/pfm-write.c -src/pool.c -src/postscript.c -src/print.c -src/random.c -src/recode.c -src/rename-vars.c -src/repeat.c -src/sample.c -src/sel-if.c -src/sfm-read.c -src/sfm-write.c -src/som.c -src/sort.c -src/split-file.c -src/stats.c -src/str.c -src/sysfile-info.c -src/tab.c -src/temporary.c -src/title.c -src/val-labs.c -src/value-labels.c -src/var-labs.c -src/vars-atr.c -src/vars-prs.c -src/vector.c -src/version.c -src/vfm.c -src/weight.c diff --git a/po/en_GB.po b/po/en_GB.po index 7b409412..7e293a06 100644 --- a/po/en_GB.po +++ b/po/en_GB.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PSPP 0.3.1\n" "Report-Msgid-Bugs-To: pspp-dev@gnu.org\n" -"POT-Creation-Date: 2004-02-12 19:27+0800\n" +"POT-Creation-Date: 2004-02-17 17:30+0800\n" "PO-Revision-Date: 2004-01-23 13:04+0800\n" "Last-Translator: John Darrington \n" "Language-Team: John Darrington \n" @@ -16,276 +16,276 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" -#: src/crosstabs.q:254 +#: src/crosstabs.q:257 msgid "" "Missing mode REPORT not allowed in general mode. Assuming MISSING=TABLE." msgstr "" -#: src/crosstabs.q:264 +#: src/crosstabs.q:267 msgid "Write mode ALL not allowed in general mode. Assuming WRITE=CELLS." msgstr "" -#: src/crosstabs.q:323 +#: src/crosstabs.q:327 msgid "expecting BY" msgstr "" -#: src/crosstabs.q:390 +#: src/crosstabs.q:394 msgid "VARIABLES must be specified before TABLES." msgstr "" -#: src/crosstabs.q:427 +#: src/crosstabs.q:431 #, c-format msgid "Maximum value (%ld) less than minimum value (%ld)." msgstr "" -#: src/crosstabs.q:864 +#: src/crosstabs.q:865 msgid "Summary." msgstr "" -#: src/crosstabs.q:866 +#: src/crosstabs.q:867 msgid "Cases" msgstr "" -#: src/crosstabs.q:867 src/frequencies.q:999 +#: src/crosstabs.q:868 src/frequencies.q:999 msgid "Valid" msgstr "" -#: src/crosstabs.q:868 src/frequencies.q:1066 +#: src/crosstabs.q:869 src/frequencies.q:1066 msgid "Missing" msgstr "" -#: src/crosstabs.q:869 src/crosstabs.q:1070 src/crosstabs.q:1799 +#: src/crosstabs.q:870 src/crosstabs.q:1073 src/crosstabs.q:1806 #: src/frequencies.q:1075 msgid "Total" msgstr "" -#: src/crosstabs.q:879 src/t-test.q:623 src/t-test.q:646 src/t-test.q:726 +#: src/crosstabs.q:880 src/t-test.q:623 src/t-test.q:646 src/t-test.q:726 #: src/t-test.q:1297 msgid "N" msgstr "" -#: src/crosstabs.q:880 src/frequencies.q:1003 src/frequencies.q:1004 +#: src/crosstabs.q:881 src/frequencies.q:1003 src/frequencies.q:1004 #: src/frequencies.q:1005 msgid "Percent" msgstr "" -#: src/crosstabs.q:1119 +#: src/crosstabs.q:1123 msgid "count" msgstr "" -#: src/crosstabs.q:1120 +#: src/crosstabs.q:1124 msgid "row %" msgstr "" -#: src/crosstabs.q:1121 +#: src/crosstabs.q:1125 msgid "column %" msgstr "" -#: src/crosstabs.q:1122 +#: src/crosstabs.q:1126 msgid "total %" msgstr "" -#: src/crosstabs.q:1123 +#: src/crosstabs.q:1127 msgid "expected" msgstr "" -#: src/crosstabs.q:1124 +#: src/crosstabs.q:1128 msgid "residual" msgstr "" -#: src/crosstabs.q:1125 +#: src/crosstabs.q:1129 msgid "std. resid." msgstr "" -#: src/crosstabs.q:1126 +#: src/crosstabs.q:1130 msgid "adj. resid." msgstr "" -#: src/crosstabs.q:1159 src/crosstabs.q:1186 src/crosstabs.q:1206 -#: src/crosstabs.q:1227 +#: src/crosstabs.q:1163 src/crosstabs.q:1190 src/crosstabs.q:1210 +#: src/crosstabs.q:1231 msgid "Statistic" msgstr "" -#: src/crosstabs.q:1160 src/crosstabs.q:1187 src/crosstabs.q:1207 -#: src/crosstabs.q:1229 src/frequencies.q:1001 src/frequencies.q:1118 -#: src/sysfile-info.c:536 src/vfm.c:1094 +#: src/crosstabs.q:1164 src/crosstabs.q:1191 src/crosstabs.q:1211 +#: src/crosstabs.q:1233 src/frequencies.q:1001 src/frequencies.q:1118 +#: src/sysfile-info.c:536 src/vfm.c:1082 msgid "Value" msgstr "" -#: src/crosstabs.q:1161 src/t-test.q:879 src/t-test.q:1067 src/t-test.q:1181 +#: src/crosstabs.q:1165 src/t-test.q:879 src/t-test.q:1067 src/t-test.q:1181 msgid "df" msgstr "" -#: src/crosstabs.q:1163 +#: src/crosstabs.q:1167 msgid "Asymp. Sig. (2-sided)" msgstr "" -#: src/crosstabs.q:1165 +#: src/crosstabs.q:1169 msgid "Exact. Sig. (2-sided)" msgstr "" -#: src/crosstabs.q:1167 +#: src/crosstabs.q:1171 msgid "Exact. Sig. (1-sided)" msgstr "" -#: src/crosstabs.q:1185 src/crosstabs.q:1226 +#: src/crosstabs.q:1189 src/crosstabs.q:1230 msgid "Category" msgstr "" -#: src/crosstabs.q:1188 src/crosstabs.q:1230 +#: src/crosstabs.q:1192 src/crosstabs.q:1234 msgid "Asymp. Std. Error" msgstr "" -#: src/crosstabs.q:1189 src/crosstabs.q:1231 +#: src/crosstabs.q:1193 src/crosstabs.q:1235 msgid "Approx. T" msgstr "" -#: src/crosstabs.q:1190 src/crosstabs.q:1232 +#: src/crosstabs.q:1194 src/crosstabs.q:1236 msgid "Approx. Sig." msgstr "" -#: src/crosstabs.q:1205 +#: src/crosstabs.q:1209 #, c-format msgid " 95%% Confidence Interval" msgstr "" -#: src/crosstabs.q:1208 src/t-test.q:883 src/t-test.q:1064 src/t-test.q:1184 +#: src/crosstabs.q:1212 src/t-test.q:883 src/t-test.q:1064 src/t-test.q:1184 msgid "Lower" msgstr "" -#: src/crosstabs.q:1209 src/t-test.q:884 src/t-test.q:1065 src/t-test.q:1185 +#: src/crosstabs.q:1213 src/t-test.q:884 src/t-test.q:1065 src/t-test.q:1185 msgid "Upper" msgstr "" -#: src/crosstabs.q:1228 +#: src/crosstabs.q:1232 msgid "Type" msgstr "" -#: src/crosstabs.q:1976 +#: src/crosstabs.q:1983 msgid "Pearson Chi-Square" msgstr "" -#: src/crosstabs.q:1977 +#: src/crosstabs.q:1984 msgid "Likelihood Ratio" msgstr "" -#: src/crosstabs.q:1978 +#: src/crosstabs.q:1985 msgid "Fisher's Exact Test" msgstr "" -#: src/crosstabs.q:1979 +#: src/crosstabs.q:1986 msgid "Continuity Correction" msgstr "" -#: src/crosstabs.q:1980 +#: src/crosstabs.q:1987 msgid "Linear-by-Linear Association" msgstr "" -#: src/crosstabs.q:2017 src/crosstabs.q:2087 src/crosstabs.q:2146 +#: src/crosstabs.q:2024 src/crosstabs.q:2094 src/crosstabs.q:2153 msgid "N of Valid Cases" msgstr "" -#: src/crosstabs.q:2033 src/crosstabs.q:2162 +#: src/crosstabs.q:2040 src/crosstabs.q:2169 msgid "Nominal by Nominal" msgstr "" -#: src/crosstabs.q:2034 src/crosstabs.q:2163 +#: src/crosstabs.q:2041 src/crosstabs.q:2170 msgid "Ordinal by Ordinal" msgstr "" -#: src/crosstabs.q:2035 +#: src/crosstabs.q:2042 msgid "Interval by Interval" msgstr "" -#: src/crosstabs.q:2036 +#: src/crosstabs.q:2043 msgid "Measure of Agreement" msgstr "" -#: src/crosstabs.q:2041 +#: src/crosstabs.q:2048 msgid "Phi" msgstr "" -#: src/crosstabs.q:2042 +#: src/crosstabs.q:2049 msgid "Cramer's V" msgstr "" -#: src/crosstabs.q:2043 +#: src/crosstabs.q:2050 msgid "Contingency Coefficient" msgstr "" -#: src/crosstabs.q:2044 +#: src/crosstabs.q:2051 msgid "Kendall's tau-b" msgstr "" -#: src/crosstabs.q:2045 +#: src/crosstabs.q:2052 msgid "Kendall's tau-c" msgstr "" -#: src/crosstabs.q:2046 +#: src/crosstabs.q:2053 msgid "Gamma" msgstr "" -#: src/crosstabs.q:2047 +#: src/crosstabs.q:2054 msgid "Spearman Correlation" msgstr "" -#: src/crosstabs.q:2048 +#: src/crosstabs.q:2055 msgid "Pearson's R" msgstr "" -#: src/crosstabs.q:2049 +#: src/crosstabs.q:2056 msgid "Kappa" msgstr "" -#: src/crosstabs.q:2119 +#: src/crosstabs.q:2126 #, c-format msgid "Odds Ratio for %s (%g / %g)" msgstr "" -#: src/crosstabs.q:2122 +#: src/crosstabs.q:2129 #, c-format msgid "Odds Ratio for %s (%.*s / %.*s)" msgstr "" -#: src/crosstabs.q:2130 +#: src/crosstabs.q:2137 #, c-format msgid "For cohort %s = %g" msgstr "" -#: src/crosstabs.q:2133 +#: src/crosstabs.q:2140 #, c-format msgid "For cohort %s = %.*s" msgstr "" -#: src/crosstabs.q:2164 +#: src/crosstabs.q:2171 msgid "Nominal by Interval" msgstr "" -#: src/crosstabs.q:2169 +#: src/crosstabs.q:2176 msgid "Lambda" msgstr "" -#: src/crosstabs.q:2170 +#: src/crosstabs.q:2177 msgid "Goodman and Kruskal tau" msgstr "" -#: src/crosstabs.q:2171 +#: src/crosstabs.q:2178 msgid "Uncertainty Coefficient" msgstr "" -#: src/crosstabs.q:2172 +#: src/crosstabs.q:2179 msgid "Somers' d" msgstr "" -#: src/crosstabs.q:2173 +#: src/crosstabs.q:2180 msgid "Eta" msgstr "" -#: src/crosstabs.q:2178 +#: src/crosstabs.q:2185 msgid "Symmetric" msgstr "" -#: src/crosstabs.q:2179 src/crosstabs.q:2180 +#: src/crosstabs.q:2186 src/crosstabs.q:2187 #, c-format msgid "%s Dependent" msgstr "" @@ -506,8 +506,8 @@ msgstr "" msgid "Z-score of " msgstr "" -#: src/descript.q:792 src/data-list.c:732 src/data-list.c:869 src/print.c:801 -#: src/sysfile-info.c:135 src/sysfile-info.c:370 src/vfm.c:1093 +#: src/descript.q:792 src/data-list.c:736 src/data-list.c:877 src/print.c:801 +#: src/sysfile-info.c:135 src/sysfile-info.c:370 src/vfm.c:1081 msgid "Variable" msgstr "" @@ -532,10 +532,10 @@ msgid "" msgstr "" #: src/file-handle.q:88 src/autorecode.c:121 src/command.c:696 -#: src/compute.c:284 src/data-list.c:372 src/data-list.c:842 -#: src/data-list.c:1645 src/do-if.c:264 src/get.c:359 src/lexer.c:387 -#: src/loop.c:248 src/matrix-data.c:506 src/print.c:336 src/print.c:1064 -#: src/recode.c:409 src/sel-if.c:56 src/sel-if.c:136 src/vector.c:197 +#: src/compute.c:283 src/data-list.c:370 src/data-list.c:850 +#: src/data-list.c:1666 src/do-if.c:264 src/get.c:359 src/lexer.c:387 +#: src/loop.c:248 src/matrix-data.c:503 src/print.c:336 src/print.c:1057 +#: src/recode.c:408 src/sel-if.c:56 src/sel-if.c:136 src/vector.c:194 msgid "expecting end of command" msgstr "" @@ -1007,9 +1007,9 @@ msgstr "" msgid "%s & %s" msgstr "" -#: src/aggregate.c:188 src/aggregate.c:229 src/data-list.c:1321 -#: src/data-list.c:1356 src/data-list.c:1369 src/data-list.c:1382 -#: src/data-list.c:1415 +#: src/aggregate.c:188 src/aggregate.c:229 src/data-list.c:1341 +#: src/data-list.c:1376 src/data-list.c:1389 src/data-list.c:1402 +#: src/data-list.c:1435 #, c-format msgid "%s subcommand given multiple times." msgstr "" @@ -1022,41 +1022,41 @@ msgstr "" msgid "BREAK subcommand not specified." msgstr "" -#: src/aggregate.c:494 +#: src/aggregate.c:492 msgid "expecting aggregation function" msgstr "" -#: src/aggregate.c:510 +#: src/aggregate.c:508 #, c-format msgid "Unknown aggregation function %s." msgstr "" -#: src/aggregate.c:525 +#: src/aggregate.c:523 msgid "expecting `('" msgstr "" -#: src/aggregate.c:560 +#: src/aggregate.c:558 #, c-format msgid "Missing argument %d to %s." msgstr "" -#: src/aggregate.c:568 +#: src/aggregate.c:566 #, c-format msgid "Arguments to %s must be of same type as source variables." msgstr "" -#: src/aggregate.c:578 src/expr-prs.c:665 +#: src/aggregate.c:576 src/expr-prs.c:665 msgid "expecting `)'" msgstr "" -#: src/aggregate.c:590 src/autorecode.c:110 +#: src/aggregate.c:588 src/autorecode.c:110 #, c-format msgid "" "Number of source variables (%d) does not match number of target variables (%" "d)." msgstr "" -#: src/aggregate.c:657 +#: src/aggregate.c:655 #, c-format msgid "" "Variable name %s is not unique within the aggregate file dictionary, which " @@ -1382,25 +1382,25 @@ msgstr "" msgid "This command is not valid in a syntax file." msgstr "" -#: src/compute.c:141 src/compute.c:200 +#: src/compute.c:140 src/compute.c:199 #, c-format msgid "" "When executing COMPUTE: SYSMIS is not a valid value as an index into vector %" "s." msgstr "" -#: src/compute.c:144 src/compute.c:204 +#: src/compute.c:143 src/compute.c:203 #, c-format msgid "" "When executing COMPUTE: %g is not a valid value as an index into vector %s." msgstr "" -#: src/compute.c:343 +#: src/compute.c:342 #, c-format msgid "There is no vector named %s." msgstr "" -#: src/compute.c:449 +#: src/compute.c:441 msgid "Extra characters after expression." msgstr "" @@ -1408,7 +1408,7 @@ msgstr "" msgid "Destination cannot be a string variable." msgstr "" -#: src/count.c:286 +#: src/count.c:283 #, c-format msgid "" "%g THRU %g is not a valid range. The number following THRU must be at least " @@ -1596,65 +1596,65 @@ msgstr "" msgid "Field too long (%d characters). Truncated after character %d." msgstr "" -#: src/data-list.c:137 +#: src/data-list.c:138 msgid "" "DATA LIST may not use a different file from that specified on its " "surrounding FILE TYPE." msgstr "" -#: src/data-list.c:156 +#: src/data-list.c:157 msgid "The END subcommand may only be specified once." msgstr "" -#: src/data-list.c:195 +#: src/data-list.c:193 msgid "Only one of FIXED, FREE, or LIST may be specified." msgstr "" -#: src/data-list.c:321 src/print.c:297 +#: src/data-list.c:319 src/print.c:297 #, c-format msgid "" "The record number specified, %ld, is before the previous record, %d. Data " "fields must be listed in order of increasing record number." msgstr "" -#: src/data-list.c:353 src/data-list.c:1634 +#: src/data-list.c:351 src/data-list.c:1655 msgid "" "SPSS-like or FORTRAN-like format specification expected after variable names." msgstr "" -#: src/data-list.c:364 src/print.c:329 +#: src/data-list.c:362 src/print.c:329 msgid "" "Variables are specified on records that should not exist according to " "RECORDS subcommand." msgstr "" -#: src/data-list.c:396 src/data-list.c:409 src/print.c:506 src/print.c:519 +#: src/data-list.c:394 src/data-list.c:407 src/print.c:506 src/print.c:519 msgid "Column positions for fields must be positive." msgstr "" -#: src/data-list.c:414 +#: src/data-list.c:412 msgid "The ending column for a field must be greater than the starting column." msgstr "" -#: src/data-list.c:438 src/print.c:547 +#: src/data-list.c:436 src/print.c:547 msgid "A format specifier on this line has extra characters on the end." msgstr "" -#: src/data-list.c:453 src/print.c:563 +#: src/data-list.c:451 src/print.c:563 msgid "The value for number of decimal places must be at least 1." msgstr "" -#: src/data-list.c:467 src/print.c:576 +#: src/data-list.c:465 src/print.c:576 #, c-format msgid "Input format %s doesn't accept decimal places." msgstr "" -#: src/data-list.c:488 src/print.c:596 +#: src/data-list.c:486 src/print.c:596 #, c-format msgid "The %d columns %d-%d can't be evenly divided into %d fields." msgstr "" -#: src/data-list.c:528 src/data-list.c:625 src/data-list.c:825 +#: src/data-list.c:528 src/data-list.c:625 src/data-list.c:829 #, c-format msgid "%s is a duplicate variable name." msgstr "" @@ -1675,233 +1675,233 @@ msgid "" "given." msgstr "" -#: src/data-list.c:698 src/print.c:769 +#: src/data-list.c:702 src/print.c:769 msgid "" "There aren't enough format specifications to match the number of variable " "names given." msgstr "" -#: src/data-list.c:733 src/print.c:802 +#: src/data-list.c:737 src/print.c:802 msgid "Record" msgstr "" -#: src/data-list.c:734 src/print.c:803 +#: src/data-list.c:738 src/print.c:803 msgid "Columns" msgstr "" -#: src/data-list.c:735 src/data-list.c:870 src/print.c:804 +#: src/data-list.c:739 src/data-list.c:878 src/print.c:804 msgid "Format" msgstr "" -#: src/data-list.c:758 +#: src/data-list.c:762 #, c-format msgid "Reading %d record from file %s." msgid_plural "Reading %d records from file %s." msgstr[0] "" msgstr[1] "" -#: src/data-list.c:761 +#: src/data-list.c:765 #, c-format msgid "Reading %d record from the command file." msgid_plural "Reading %d records from the command file." msgstr[0] "" msgstr[1] "" -#: src/data-list.c:768 src/data-list.c:769 +#: src/data-list.c:772 src/data-list.c:773 msgid "Occurrence data specifications." msgstr "" -#: src/data-list.c:893 +#: src/data-list.c:901 #, c-format msgid "Reading free-form data from file %s." msgstr "" -#: src/data-list.c:894 +#: src/data-list.c:902 msgid "Reading free-form data from the command file." msgstr "" -#: src/data-list.c:945 src/matrix-data.c:939 +#: src/data-list.c:953 src/matrix-data.c:935 msgid "Scope of string exceeds line." msgstr "" -#: src/data-list.c:1006 +#: src/data-list.c:1013 msgid "Attempt to read past end of file." msgstr "" -#: src/data-list.c:1035 +#: src/data-list.c:1042 msgid "abort in write_case()\n" msgstr "" -#: src/data-list.c:1063 +#: src/data-list.c:1070 #, c-format msgid "Partial case of %d of %d records discarded." msgstr "" -#: src/data-list.c:1112 +#: src/data-list.c:1119 #, c-format msgid "Partial case discarded. The first variable missing was %s." msgstr "" -#: src/data-list.c:1153 +#: src/data-list.c:1160 #, c-format msgid "" "Missing value(s) for all variables from %s onward. These will be filled " "with the system-missing value or blanks, as appropriate." msgstr "" -#: src/data-list.c:1311 +#: src/data-list.c:1331 msgid "" "REPEATING DATA must use the same file as its corresponding DATA LIST or FILE " "TYPE." msgstr "" -#: src/data-list.c:1345 +#: src/data-list.c:1365 #, c-format msgid "STARTS beginning column (%d) exceeds STARTS ending column (%d)." msgstr "" -#: src/data-list.c:1401 +#: src/data-list.c:1421 #, c-format msgid "CONTINUED beginning column (%d) exceeds CONTINUED ending column (%d)." msgstr "" -#: src/data-list.c:1424 +#: src/data-list.c:1444 #, c-format msgid "ID beginning column (%ld) must be positive." msgstr "" -#: src/data-list.c:1439 +#: src/data-list.c:1459 #, c-format msgid "ID ending column (%ld) must be positive." msgstr "" -#: src/data-list.c:1445 +#: src/data-list.c:1465 #, c-format msgid "ID ending column (%ld) cannot be less than ID beginning column (%d)." msgstr "" -#: src/data-list.c:1484 +#: src/data-list.c:1505 msgid "Missing required specification STARTS." msgstr "" -#: src/data-list.c:1486 +#: src/data-list.c:1507 msgid "Missing required specification OCCURS." msgstr "" -#: src/data-list.c:1493 +#: src/data-list.c:1514 msgid "ID specified without CONTINUED." msgstr "" -#: src/data-list.c:1581 +#: src/data-list.c:1602 msgid "String variable not allowed here." msgstr "" -#: src/data-list.c:1591 +#: src/data-list.c:1612 #, c-format msgid "%s (%d) must be at least 1." msgstr "" -#: src/data-list.c:1597 +#: src/data-list.c:1618 #, c-format msgid "Variable or integer expected for %s." msgstr "" -#: src/data-list.c:1736 +#: src/data-list.c:1753 #, c-format -msgid "Mismatched case ID (%s). Expected value was %s." +msgid "Encountered mismatched record ID \"%s\" expecting \"%s\"." msgstr "" -#: src/data-list.c:1768 +#: src/data-list.c:1785 #, c-format msgid "" "Variable %s starting in column %d extends beyond physical record length of %" "d." msgstr "" -#: src/data-list.c:1836 +#: src/data-list.c:1853 #, c-format msgid "Invalid value %d for OCCURS." msgstr "" -#: src/data-list.c:1842 +#: src/data-list.c:1859 #, c-format msgid "Beginning column for STARTS (%d) must be at least 1." msgstr "" -#: src/data-list.c:1850 +#: src/data-list.c:1867 #, c-format msgid "Ending column for STARTS (%d) is less than beginning column (%d)." msgstr "" -#: src/data-list.c:1858 +#: src/data-list.c:1875 #, c-format msgid "Invalid value %d for LENGTH." msgstr "" -#: src/data-list.c:1865 +#: src/data-list.c:1882 #, c-format msgid "Beginning column for CONTINUED (%d) must be at least 1." msgstr "" -#: src/data-list.c:1873 +#: src/data-list.c:1890 #, c-format msgid "Ending column for CONTINUED (%d) is less than beginning column (%d)." msgstr "" -#: src/data-list.c:1896 +#: src/data-list.c:1913 #, c-format msgid "" "Number of repetitions specified on OCCURS (%d) exceed number of repetitions " "available in space on STARTS (%d), and CONTINUED not specified." msgstr "" -#: src/data-list.c:1913 +#: src/data-list.c:1930 #, c-format msgid "Unexpected end of file with %d repetitions remaining out of %d." msgstr "" -#: src/data-out.c:143 src/sfm-read.c:470 src/sysfile-info.c:116 +#: src/data-out.c:232 src/sfm-read.c:470 src/sysfile-info.c:116 msgid "Unknown" msgstr "" -#: src/data-out.c:251 +#: src/data-out.c:340 msgid "" "The N output format cannot be used to output a negative number or the system-" "missing value." msgstr "" -#: src/data-out.c:362 +#: src/data-out.c:451 #, c-format msgid "" "Quality of zoned decimal (Z) output format code is suspect. Check your " "results. Report bugs to %s." msgstr "" -#: src/data-out.c:369 +#: src/data-out.c:459 msgid "The system-missing value cannot be output as a zoned decimal number." msgstr "" -#: src/data-out.c:382 +#: src/data-out.c:472 #, c-format msgid "Number %g too big to fit in field with format Z%d.%d." msgstr "" -#: src/data-out.c:774 +#: src/data-out.c:864 #, c-format msgid "Time value %g too large in magnitude to convert to alphanumeric time." msgstr "" -#: src/data-out.c:827 +#: src/data-out.c:915 #, c-format -msgid "Weekday index %d does not lie between 1 and 7." +msgid "Weekday index %f does not lie between 1 and 7." msgstr "" -#: src/data-out.c:848 +#: src/data-out.c:935 #, c-format -msgid "Month index %d does not lie between 1 and 12." +msgid "Month index %f does not lie between 1 and 12." msgstr "" -#: src/data-out.c:960 +#: src/data-out.c:1048 #, c-format msgid "" "Year %d cannot be represented in four digits for output formatting purposes." @@ -2082,51 +2082,41 @@ msgstr "" msgid "installation error" msgstr "" -#: src/expr-evl.c:1125 +#: src/expr-evl.c:1118 msgid "" "A number being treated as a Boolean in an expression was found to have a " "value other than 0 (false), 1 (true), or the system-missing value. The " "result was forced to 0." msgstr "" -#: src/expr-evl.c:1169 +#: src/expr-evl.c:1162 #, c-format msgid "" "SYSMIS is not a valid index value for vector %s. The result will be set to " "SYSMIS." msgstr "" -#: src/expr-evl.c:1173 +#: src/expr-evl.c:1166 #, c-format msgid "" "%g is not a valid index value for vector %s. The result will be set to " "SYSMIS." msgstr "" -#: src/expr-evl.c:1191 +#: src/expr-evl.c:1184 #, c-format msgid "" "SYSMIS is not a valid index value for vector %s. The result will be set to " "the empty string." msgstr "" -#: src/expr-evl.c:1196 +#: src/expr-evl.c:1189 #, c-format msgid "" "%g is not a valid index value for vector %s. The result will be set to the " "empty string." msgstr "" -#: src/expr-evl.c:1296 -#, c-format -msgid "evaluate_expression(): not implemented: %s\n" -msgstr "" - -#: src/expr-evl.c:1299 -#, c-format -msgid "evaluate_expression(): not implemented: %d\n" -msgstr "" - #: src/expr-opt.c:663 msgid "" "While optimizing a constant expression, there was a bad value for the third " @@ -2149,7 +2139,7 @@ msgstr "" msgid "Second argument to %cTRIM() must be at least one character in length." msgstr "" -#: src/expr-opt.c:881 +#: src/expr-opt.c:882 msgid "" "When optimizing a constant expression, an integer that was being used as an " "Boolean value was found to have a constant value other than 0, 1, or SYSMIS." @@ -2467,12 +2457,12 @@ msgstr "" msgid "No commands between FILE TYPE and END FILE TYPE." msgstr "" -#: src/file-type.c:654 +#: src/file-type.c:655 #, c-format msgid "Unknown record type \"%.*s\"." msgstr "" -#: src/file-type.c:678 +#: src/file-type.c:679 #, c-format msgid "Unknown record type %g." msgstr "" @@ -2501,49 +2491,49 @@ msgstr "" msgid "Could not create acceptable variant for variable %s." msgstr "" -#: src/flip.c:179 +#: src/flip.c:178 msgid "Cannot create more than 99999 variable names." msgstr "" -#: src/flip.c:295 +#: src/flip.c:293 #, c-format msgid "Error reading FLIP source file: %s." msgstr "" -#: src/flip.c:382 +#: src/flip.c:380 msgid "Could not create temporary file for FLIP." msgstr "" -#: src/flip.c:392 src/flip.c:411 +#: src/flip.c:390 src/flip.c:409 #, c-format msgid "Error writing FLIP file: %s." msgstr "" -#: src/flip.c:447 +#: src/flip.c:445 msgid "Error creating FLIP source file." msgstr "" -#: src/flip.c:450 +#: src/flip.c:448 #, c-format msgid "Error rewinding FLIP file: %s." msgstr "" -#: src/flip.c:459 +#: src/flip.c:457 #, c-format msgid "Error reading FLIP file: %s." msgstr "" -#: src/flip.c:471 +#: src/flip.c:469 #, c-format msgid "Error seeking FLIP source file: %s." msgstr "" -#: src/flip.c:476 +#: src/flip.c:474 #, c-format msgid "Error writing FLIP source file: %s." msgstr "" -#: src/flip.c:484 +#: src/flip.c:482 #, c-format msgid "Error rewind FLIP source file: %s." msgstr "" @@ -2639,7 +2629,7 @@ msgstr "" msgid "Format %s may not be assigned to a %s variable." msgstr "" -#: src/formats.c:123 src/numeric.c:66 src/numeric.c:139 +#: src/formats.c:123 src/numeric.c:65 src/numeric.c:137 msgid "`)' expected after output format." msgstr "" @@ -2658,7 +2648,7 @@ msgstr "" msgid "GET translation table from file to memory:\n" msgstr "" -#: src/get.c:115 src/get.c:1398 +#: src/get.c:115 src/get.c:1397 #, c-format msgid " %8s from %3d,%3d to %3d,%3d\n" msgstr "" @@ -2740,18 +2730,18 @@ msgstr "" msgid "File %s lacks BY variable %s." msgstr "" -#: src/get.c:1311 +#: src/get.c:1310 #, c-format msgid "" "Variable %s in file %s (%s) has different type or width from the same " "variable in earlier file (%s)." msgstr "" -#: src/get.c:1360 +#: src/get.c:1359 msgid "expecting COMM or TAPE" msgstr "" -#: src/get.c:1393 +#: src/get.c:1392 #, c-format msgid "IMPORT translation table from file to memory:\n" msgstr "" @@ -2781,24 +2771,24 @@ msgstr "" msgid "Closing `%s': %s." msgstr "" -#: src/glob.c:222 +#: src/glob.c:217 msgid "data> " msgstr "" -#: src/glob.c:279 +#: src/glob.c:274 msgid "Specify a terminal type with `setenv TERM '." msgstr "" -#: src/glob.c:285 +#: src/glob.c:280 msgid "Could not access the termcap data base." msgstr "" -#: src/glob.c:287 +#: src/glob.c:282 #, c-format msgid "Terminal type `%s' is not defined." msgstr "" -#: src/glob.c:288 +#: src/glob.c:283 msgid "Assuming screen of size 79x25." msgstr "" @@ -3008,31 +2998,31 @@ msgstr "" msgid "Unrecognized filename format." msgstr "" -#: src/inpt-pgm.c:83 +#: src/inpt-pgm.c:84 msgid "No matching INPUT PROGRAM command." msgstr "" -#: src/inpt-pgm.c:88 +#: src/inpt-pgm.c:89 msgid "" "No data-input or transformation commands specified between INPUT PROGRAM and " "END INPUT PROGRAM." msgstr "" -#: src/inpt-pgm.c:265 src/inpt-pgm.c:408 +#: src/inpt-pgm.c:283 src/inpt-pgm.c:420 msgid "" "This command may only be executed between INPUT PROGRAM and END INPUT " "PROGRAM." msgstr "" -#: src/inpt-pgm.c:324 +#: src/inpt-pgm.c:336 msgid "COLUMN subcommand multiply specified." msgstr "" -#: src/inpt-pgm.c:338 +#: src/inpt-pgm.c:350 msgid "expecting file handle name" msgstr "" -#: src/inpt-pgm.c:381 +#: src/inpt-pgm.c:393 msgid "" "REREAD: Column numbers must be positive finite numbers. Column set to 1." msgstr "" @@ -3096,12 +3086,12 @@ msgstr "" msgid "The rest of this command has been discarded." msgstr "" -#: src/lexer.c:842 src/print.c:1157 +#: src/lexer.c:842 src/print.c:1150 #, c-format msgid "" msgstr "" -#: src/lexer.c:968 src/pfm-read.c:132 src/repeat.c:226 +#: src/lexer.c:968 src/pfm-read.c:132 src/repeat.c:225 msgid "Unexpected end of file." msgstr "" @@ -3146,20 +3136,20 @@ msgstr "" msgid "The index variable may not be a string variable." msgstr "" -#: src/loop.c:321 +#: src/loop.c:316 msgid "There is no LOOP command that corresponds to this END LOOP." msgstr "" -#: src/loop.c:522 +#: src/loop.c:517 msgid "" "This command may only appear enclosed in a LOOP/END LOOP control structure." msgstr "" -#: src/loop.c:528 +#: src/loop.c:523 msgid "BREAK not enclosed in DO IF structure." msgstr "" -#: src/loop.c:605 +#: src/loop.c:600 #, c-format msgid "%s without %s." msgstr "" @@ -3198,168 +3188,168 @@ msgstr "" msgid "VARNAME_ cannot be explicitly specified on VARIABLES." msgstr "" -#: src/matrix-data.c:267 +#: src/matrix-data.c:265 msgid "in FORMAT subcommand" msgstr "" -#: src/matrix-data.c:278 +#: src/matrix-data.c:276 msgid "SPLIT subcommand multiply specified." msgstr "" -#: src/matrix-data.c:285 +#: src/matrix-data.c:283 msgid "in SPLIT subcommand" msgstr "" -#: src/matrix-data.c:294 +#: src/matrix-data.c:292 msgid "Split variable may not be named ROWTYPE_ or VARNAME_." msgstr "" -#: src/matrix-data.c:327 +#: src/matrix-data.c:324 #, c-format msgid "Split variable %s is already another type." msgstr "" -#: src/matrix-data.c:342 +#: src/matrix-data.c:339 msgid "FACTORS subcommand multiply specified." msgstr "" -#: src/matrix-data.c:357 +#: src/matrix-data.c:354 #, c-format msgid "Factor variable %s is already another type." msgstr "" -#: src/matrix-data.c:372 +#: src/matrix-data.c:369 msgid "CELLS subcommand multiply specified." msgstr "" -#: src/matrix-data.c:378 src/matrix-data.c:397 +#: src/matrix-data.c:375 src/matrix-data.c:394 msgid "expecting positive integer" msgstr "" -#: src/matrix-data.c:391 +#: src/matrix-data.c:388 msgid "N subcommand multiply specified." msgstr "" -#: src/matrix-data.c:412 +#: src/matrix-data.c:409 msgid "CONTENTS subcommand multiply specified." msgstr "" -#: src/matrix-data.c:432 +#: src/matrix-data.c:429 msgid "Nested parentheses not allowed." msgstr "" -#: src/matrix-data.c:442 +#: src/matrix-data.c:439 msgid "Mismatched right parenthesis (`(')." msgstr "" -#: src/matrix-data.c:447 +#: src/matrix-data.c:444 msgid "Empty parentheses not allowed." msgstr "" -#: src/matrix-data.c:460 src/matrix-data.c:468 +#: src/matrix-data.c:457 src/matrix-data.c:465 msgid "in CONTENTS subcommand" msgstr "" -#: src/matrix-data.c:475 +#: src/matrix-data.c:472 #, c-format msgid "Content multiply specified for %s." msgstr "" -#: src/matrix-data.c:492 +#: src/matrix-data.c:489 msgid "Missing right parenthesis." msgstr "" -#: src/matrix-data.c:512 +#: src/matrix-data.c:509 msgid "Missing VARIABLES subcommand." msgstr "" -#: src/matrix-data.c:518 +#: src/matrix-data.c:515 msgid "" "CONTENTS subcommand not specified: assuming file contains only CORR matrix." msgstr "" -#: src/matrix-data.c:528 +#: src/matrix-data.c:525 msgid "" "Missing CELLS subcommand. CELLS is required when ROWTYPE_ is not given in " "the data and factors are present." msgstr "" -#: src/matrix-data.c:536 +#: src/matrix-data.c:533 msgid "Split file values must be present in the data when ROWTYPE_ is present." msgstr "" -#: src/matrix-data.c:592 +#: src/matrix-data.c:588 msgid "No continuous variables specified." msgstr "" -#: src/matrix-data.c:1006 +#: src/matrix-data.c:1002 #, c-format msgid "End of line expected %s while reading %s." msgstr "" -#: src/matrix-data.c:1193 +#: src/matrix-data.c:1190 #, c-format msgid "expecting value for %s %s" msgstr "" -#: src/matrix-data.c:1344 +#: src/matrix-data.c:1342 #, c-format msgid "Syntax error expecting SPLIT FILE value %s." msgstr "" -#: src/matrix-data.c:1353 +#: src/matrix-data.c:1351 #, c-format msgid "Expecting value %g for %s." msgstr "" -#: src/matrix-data.c:1391 src/matrix-data.c:1820 +#: src/matrix-data.c:1389 src/matrix-data.c:1823 #, c-format msgid "Syntax error expecting factor value %s." msgstr "" -#: src/matrix-data.c:1400 +#: src/matrix-data.c:1398 #, c-format msgid "Syntax error expecting value %g for %s %s." msgstr "" -#: src/matrix-data.c:1610 +#: src/matrix-data.c:1612 #, c-format msgid "Syntax error %s expecting SPLIT FILE value." msgstr "" -#: src/matrix-data.c:1734 +#: src/matrix-data.c:1736 #, c-format msgid "" "Expected %d lines of data for %s content; actually saw %d lines. No data " "will be output for this content." msgstr "" -#: src/matrix-data.c:1765 +#: src/matrix-data.c:1768 #, c-format msgid "Multiply specified ROWTYPE_ %s." msgstr "" -#: src/matrix-data.c:1770 +#: src/matrix-data.c:1773 #, c-format msgid "Syntax error %s expecting ROWTYPE_ string." msgstr "" -#: src/matrix-data.c:1789 +#: src/matrix-data.c:1792 #, c-format msgid "Syntax error %s." msgstr "" -#: src/matrix-data.c:1935 +#: src/matrix-data.c:1938 #, c-format msgid "Duplicate specification for %s." msgstr "" -#: src/matrix-data.c:1947 +#: src/matrix-data.c:1950 #, c-format msgid "Too many rows of matrix data for %s." msgstr "" -#: src/matrix-data.c:1992 +#: src/matrix-data.c:1995 #, c-format msgid "Syntax error expecting value for %s %s." msgstr "" @@ -3402,7 +3392,7 @@ msgstr "" msgid "String is not of proper length." msgstr "" -#: src/mis-val.c:326 src/repeat.c:484 +#: src/mis-val.c:326 src/repeat.c:476 msgid "String expected." msgstr "" @@ -3490,17 +3480,17 @@ msgstr "" msgid "`/' or `.' expected." msgstr "" -#: src/numeric.c:59 +#: src/numeric.c:58 #, c-format msgid "Format type %s may not be used with a numeric variable." msgstr "" -#: src/numeric.c:78 src/numeric.c:161 src/vector.c:158 +#: src/numeric.c:77 src/numeric.c:159 src/vector.c:157 #, c-format msgid "There is already a variable named %s." msgstr "" -#: src/numeric.c:132 +#: src/numeric.c:130 #, c-format msgid "Format type %s may not be used with a string variable." msgstr "" @@ -3685,7 +3675,7 @@ msgstr "" msgid "portable file %s corrupt at offset %ld: " msgstr "" -#: src/pfm-read.c:108 src/pfm-write.c:501 +#: src/pfm-read.c:108 src/pfm-write.c:502 #, c-format msgid "%s: Closing portable file: %s." msgstr "" @@ -3893,12 +3883,12 @@ msgstr "" msgid "Error writing portable-file header." msgstr "" -#: src/pfm-write.c:168 +#: src/pfm-write.c:169 #, c-format msgid "%s: Writing portable file: %s." msgstr "" -#: src/pfm-write.c:510 +#: src/pfm-write.c:511 msgid "writing as a portable file" msgstr "" @@ -4086,25 +4076,25 @@ msgstr "" msgid "Writing %3d records to the listing file." msgstr "" -#: src/print.c:1046 +#: src/print.c:1039 msgid "A file name or handle was expected in the OUTFILE subcommand." msgstr "" -#: src/print.c:1098 +#: src/print.c:1091 #, c-format msgid "" "The expression on PRINT SPACE evaluated to %d. It's not possible to PRINT " "SPACE a negative number of lines." msgstr "" -#: src/recode.c:288 +#: src/recode.c:287 #, c-format msgid "" "%d variable(s) cannot be recoded into %d variable(s). Specify the same " "number of variables as input and output variables." msgstr "" -#: src/recode.c:302 +#: src/recode.c:301 #, c-format msgid "" "There is no string variable named %s. (All string variables specified on " @@ -4112,56 +4102,56 @@ msgid "" "variable.)" msgstr "" -#: src/recode.c:311 +#: src/recode.c:310 #, c-format msgid "" "Type mismatch between input and output variables. Output variable %s is not " "a string variable, but all the input variables are string variables." msgstr "" -#: src/recode.c:330 +#: src/recode.c:329 #, c-format msgid "Type mismatch after INTO: %s is not a numeric variable." msgstr "" -#: src/recode.c:360 +#: src/recode.c:359 msgid "" "INTO must be used when the input values are numeric and output values are " "string." msgstr "" -#: src/recode.c:368 +#: src/recode.c:367 msgid "" "INTO must be used when the input values are string and output values are " "numeric." msgstr "" -#: src/recode.c:504 +#: src/recode.c:501 msgid "" "Inconsistent output types. The output values must be all numeric or all " "string." msgstr "" -#: src/recode.c:555 +#: src/recode.c:552 msgid "following LO THRU" msgstr "" -#: src/recode.c:571 src/recode.c:600 +#: src/recode.c:568 src/recode.c:597 msgid "in source value" msgstr "" -#: src/recode.c:613 +#: src/recode.c:610 msgid "" "Keyword CONVERT may only be used with string input values and numeric output " "values." msgstr "" -#: src/recode.c:869 +#: src/recode.c:866 #, c-format msgid "!!END!!" msgstr "" -#: src/recode.c:890 src/recode.c:906 +#: src/recode.c:887 src/recode.c:903 #, c-format msgid "!!ERROR!!" msgstr "" @@ -4183,12 +4173,12 @@ msgstr "" msgid "Renaming would duplicate variable name %s." msgstr "" -#: src/repeat.c:159 +#: src/repeat.c:158 #, c-format msgid "Identifier %s is given twice." msgstr "" -#: src/repeat.c:202 +#: src/repeat.c:201 #, c-format msgid "" "There must be the same number of substitutions for each dummy variable " @@ -4196,11 +4186,11 @@ msgid "" "s as well, but %d were specified." msgstr "" -#: src/repeat.c:311 +#: src/repeat.c:310 msgid "No commands in scope." msgstr "" -#: src/repeat.c:511 +#: src/repeat.c:503 msgid "No matching DO REPEAT." msgstr "" @@ -4696,7 +4686,7 @@ msgstr "" msgid "SORT: Closing handle %d." msgstr "" -#: src/sort.c:594 src/sort.c:819 +#: src/sort.c:594 src/sort.c:818 #, c-format msgid "%s: Error closing temporary file: %s." msgstr "" @@ -4716,76 +4706,76 @@ msgstr "" msgid "%s: Error creating temporary file: %s." msgstr "" -#: src/sort.c:823 src/sort.c:985 src/sort.c:1035 src/sort.c:1207 -#: src/sort.c:1214 +#: src/sort.c:822 src/sort.c:983 src/sort.c:1033 src/sort.c:1202 +#: src/sort.c:1209 #, c-format msgid "%s: Error removing temporary file: %s." msgstr "" -#: src/sort.c:967 +#: src/sort.c:965 msgid "merging runs" msgstr "" -#: src/sort.c:975 +#: src/sort.c:973 #, c-format msgid " into run %d(%d)\n" msgstr "" -#: src/sort.c:994 +#: src/sort.c:992 msgid "Out of memory expanding Huffman priority queue." msgstr "" -#: src/sort.c:1046 +#: src/sort.c:1044 #, c-format msgid "%s: Error creating temporary file for merge: %s." msgstr "" -#: src/sort.c:1074 src/sort.c:1134 +#: src/sort.c:1071 src/sort.c:1129 #, c-format msgid "%s: Error reading temporary file in merge: %s." msgstr "" -#: src/sort.c:1077 src/sort.c:1138 +#: src/sort.c:1074 src/sort.c:1133 #, c-format msgid "%s: Unexpected end of temporary file in merge." msgstr "" -#: src/sort.c:1103 +#: src/sort.c:1099 #, c-format msgid "%s: Error writing temporary file in merge: %s." msgstr "" -#: src/sort.c:1154 src/sort.c:1187 +#: src/sort.c:1149 src/sort.c:1182 #, c-format msgid "%s: Error closing temporary file in merge: %s." msgstr "" -#: src/sort.c:1159 +#: src/sort.c:1154 #, c-format msgid "%s: Error removing temporary file in merge: %s." msgstr "" -#: src/sort.c:1258 +#: src/sort.c:1253 #, c-format msgid "%s: Cannot open sort result file: %s." msgstr "" -#: src/sort.c:1269 +#: src/sort.c:1264 #, c-format msgid "%s: Error reading sort result file: %s." msgstr "" -#: src/sort.c:1272 +#: src/sort.c:1267 #, c-format msgid "%s: Unexpected end of sort result file: %s." msgstr "" -#: src/sort.c:1283 +#: src/sort.c:1278 #, c-format msgid "%s: Error closing sort result file: %s." msgstr "" -#: src/sort.c:1287 +#: src/sort.c:1282 #, c-format msgid "%s: Error removing sort result file: %s." msgstr "" @@ -4891,7 +4881,7 @@ msgstr "" msgid "Documents in the active file:" msgstr "" -#: src/sysfile-info.c:379 src/sysfile-info.c:537 src/vfm.c:1095 +#: src/sysfile-info.c:379 src/sysfile-info.c:537 src/vfm.c:1083 msgid "Label" msgstr "" @@ -5081,95 +5071,95 @@ msgstr "" msgid "Bad bounds in use of TO convention." msgstr "" -#: src/vector.c:69 +#: src/vector.c:68 #, c-format msgid "Vector name %s is given twice." msgstr "" -#: src/vector.c:75 +#: src/vector.c:74 #, c-format msgid "There is already a vector with name %s." msgstr "" -#: src/vector.c:96 +#: src/vector.c:95 msgid "" "A slash must be used to separate each vector specification when using the " "long form. Commands such as VECTOR A,B=Q1 TO Q20 are not supported." msgstr "" -#: src/vector.c:130 +#: src/vector.c:129 msgid "Vectors must have at least one element." msgstr "" -#: src/vector.c:144 +#: src/vector.c:143 #, c-format msgid "%s%d is too long for a variable name." msgstr "" -#: src/vector.c:184 +#: src/vector.c:181 msgid "" "The syntax for this command does not match the expected syntax for either " "the long form or the short form of VECTOR." msgstr "" -#: src/vfm.c:293 +#: src/vfm.c:286 #, c-format msgid "" "Workspace overflow predicted. Max workspace is currently set to %d KB (%d " "cases at %d bytes each). Paging active file to disk." msgstr "" -#: src/vfm.c:365 +#: src/vfm.c:361 msgid "" msgstr "" -#: src/vfm.c:612 +#: src/vfm.c:566 #, c-format msgid "" "An error occurred attempting to create a temporary file for use as the " "active file: %s." msgstr "" -#: src/vfm.c:630 +#: src/vfm.c:584 #, c-format msgid "" "An error occurred while attempting to read from a temporary file created for " "the active file: %s." msgstr "" -#: src/vfm.c:658 +#: src/vfm.c:612 #, c-format msgid "" "An error occurred while attempting to write to a temporary file used as the " "active file: %s." msgstr "" -#: src/vfm.c:672 +#: src/vfm.c:626 #, c-format msgid "" "An error occurred while attempting to rewind a temporary file used as the " "active file: %s." msgstr "" -#: src/vfm.c:787 +#: src/vfm.c:741 msgid "Virtual memory exhausted. Paging active file to disk." msgstr "" -#: src/vfm.c:790 +#: src/vfm.c:744 #, c-format msgid "" "Workspace limit of %d KB (%d cases at %d bytes each) overflowed. Paging " "active file to disk." msgstr "" -#: src/vfm.c:814 src/vfm.c:851 +#: src/vfm.c:768 src/vfm.c:805 #, c-format msgid "" "An error occurred while attempting to write to a temporary file created as " "the active file, while paging to disk: %s." msgstr "" -#: src/vfm.c:965 +#: src/vfm.c:919 msgid "transform: " msgstr "" diff --git a/po/pspp.pot b/po/pspp.pot index 0808c05d..75b6ac03 100644 --- a/po/pspp.pot +++ b/po/pspp.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: pspp-dev@gnu.org\n" -"POT-Creation-Date: 2004-02-12 19:27+0800\n" +"POT-Creation-Date: 2004-02-17 17:30+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,276 +17,276 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: src/crosstabs.q:254 +#: src/crosstabs.q:257 msgid "" "Missing mode REPORT not allowed in general mode. Assuming MISSING=TABLE." msgstr "" -#: src/crosstabs.q:264 +#: src/crosstabs.q:267 msgid "Write mode ALL not allowed in general mode. Assuming WRITE=CELLS." msgstr "" -#: src/crosstabs.q:323 +#: src/crosstabs.q:327 msgid "expecting BY" msgstr "" -#: src/crosstabs.q:390 +#: src/crosstabs.q:394 msgid "VARIABLES must be specified before TABLES." msgstr "" -#: src/crosstabs.q:427 +#: src/crosstabs.q:431 #, c-format msgid "Maximum value (%ld) less than minimum value (%ld)." msgstr "" -#: src/crosstabs.q:864 +#: src/crosstabs.q:865 msgid "Summary." msgstr "" -#: src/crosstabs.q:866 +#: src/crosstabs.q:867 msgid "Cases" msgstr "" -#: src/crosstabs.q:867 src/frequencies.q:999 +#: src/crosstabs.q:868 src/frequencies.q:999 msgid "Valid" msgstr "" -#: src/crosstabs.q:868 src/frequencies.q:1066 +#: src/crosstabs.q:869 src/frequencies.q:1066 msgid "Missing" msgstr "" -#: src/crosstabs.q:869 src/crosstabs.q:1070 src/crosstabs.q:1799 +#: src/crosstabs.q:870 src/crosstabs.q:1073 src/crosstabs.q:1806 #: src/frequencies.q:1075 msgid "Total" msgstr "" -#: src/crosstabs.q:879 src/t-test.q:623 src/t-test.q:646 src/t-test.q:726 +#: src/crosstabs.q:880 src/t-test.q:623 src/t-test.q:646 src/t-test.q:726 #: src/t-test.q:1297 msgid "N" msgstr "" -#: src/crosstabs.q:880 src/frequencies.q:1003 src/frequencies.q:1004 +#: src/crosstabs.q:881 src/frequencies.q:1003 src/frequencies.q:1004 #: src/frequencies.q:1005 msgid "Percent" msgstr "" -#: src/crosstabs.q:1119 +#: src/crosstabs.q:1123 msgid "count" msgstr "" -#: src/crosstabs.q:1120 +#: src/crosstabs.q:1124 msgid "row %" msgstr "" -#: src/crosstabs.q:1121 +#: src/crosstabs.q:1125 msgid "column %" msgstr "" -#: src/crosstabs.q:1122 +#: src/crosstabs.q:1126 msgid "total %" msgstr "" -#: src/crosstabs.q:1123 +#: src/crosstabs.q:1127 msgid "expected" msgstr "" -#: src/crosstabs.q:1124 +#: src/crosstabs.q:1128 msgid "residual" msgstr "" -#: src/crosstabs.q:1125 +#: src/crosstabs.q:1129 msgid "std. resid." msgstr "" -#: src/crosstabs.q:1126 +#: src/crosstabs.q:1130 msgid "adj. resid." msgstr "" -#: src/crosstabs.q:1159 src/crosstabs.q:1186 src/crosstabs.q:1206 -#: src/crosstabs.q:1227 +#: src/crosstabs.q:1163 src/crosstabs.q:1190 src/crosstabs.q:1210 +#: src/crosstabs.q:1231 msgid "Statistic" msgstr "" -#: src/crosstabs.q:1160 src/crosstabs.q:1187 src/crosstabs.q:1207 -#: src/crosstabs.q:1229 src/frequencies.q:1001 src/frequencies.q:1118 -#: src/sysfile-info.c:536 src/vfm.c:1094 +#: src/crosstabs.q:1164 src/crosstabs.q:1191 src/crosstabs.q:1211 +#: src/crosstabs.q:1233 src/frequencies.q:1001 src/frequencies.q:1118 +#: src/sysfile-info.c:536 src/vfm.c:1082 msgid "Value" msgstr "" -#: src/crosstabs.q:1161 src/t-test.q:879 src/t-test.q:1067 src/t-test.q:1181 +#: src/crosstabs.q:1165 src/t-test.q:879 src/t-test.q:1067 src/t-test.q:1181 msgid "df" msgstr "" -#: src/crosstabs.q:1163 +#: src/crosstabs.q:1167 msgid "Asymp. Sig. (2-sided)" msgstr "" -#: src/crosstabs.q:1165 +#: src/crosstabs.q:1169 msgid "Exact. Sig. (2-sided)" msgstr "" -#: src/crosstabs.q:1167 +#: src/crosstabs.q:1171 msgid "Exact. Sig. (1-sided)" msgstr "" -#: src/crosstabs.q:1185 src/crosstabs.q:1226 +#: src/crosstabs.q:1189 src/crosstabs.q:1230 msgid "Category" msgstr "" -#: src/crosstabs.q:1188 src/crosstabs.q:1230 +#: src/crosstabs.q:1192 src/crosstabs.q:1234 msgid "Asymp. Std. Error" msgstr "" -#: src/crosstabs.q:1189 src/crosstabs.q:1231 +#: src/crosstabs.q:1193 src/crosstabs.q:1235 msgid "Approx. T" msgstr "" -#: src/crosstabs.q:1190 src/crosstabs.q:1232 +#: src/crosstabs.q:1194 src/crosstabs.q:1236 msgid "Approx. Sig." msgstr "" -#: src/crosstabs.q:1205 +#: src/crosstabs.q:1209 #, c-format msgid " 95%% Confidence Interval" msgstr "" -#: src/crosstabs.q:1208 src/t-test.q:883 src/t-test.q:1064 src/t-test.q:1184 +#: src/crosstabs.q:1212 src/t-test.q:883 src/t-test.q:1064 src/t-test.q:1184 msgid "Lower" msgstr "" -#: src/crosstabs.q:1209 src/t-test.q:884 src/t-test.q:1065 src/t-test.q:1185 +#: src/crosstabs.q:1213 src/t-test.q:884 src/t-test.q:1065 src/t-test.q:1185 msgid "Upper" msgstr "" -#: src/crosstabs.q:1228 +#: src/crosstabs.q:1232 msgid "Type" msgstr "" -#: src/crosstabs.q:1976 +#: src/crosstabs.q:1983 msgid "Pearson Chi-Square" msgstr "" -#: src/crosstabs.q:1977 +#: src/crosstabs.q:1984 msgid "Likelihood Ratio" msgstr "" -#: src/crosstabs.q:1978 +#: src/crosstabs.q:1985 msgid "Fisher's Exact Test" msgstr "" -#: src/crosstabs.q:1979 +#: src/crosstabs.q:1986 msgid "Continuity Correction" msgstr "" -#: src/crosstabs.q:1980 +#: src/crosstabs.q:1987 msgid "Linear-by-Linear Association" msgstr "" -#: src/crosstabs.q:2017 src/crosstabs.q:2087 src/crosstabs.q:2146 +#: src/crosstabs.q:2024 src/crosstabs.q:2094 src/crosstabs.q:2153 msgid "N of Valid Cases" msgstr "" -#: src/crosstabs.q:2033 src/crosstabs.q:2162 +#: src/crosstabs.q:2040 src/crosstabs.q:2169 msgid "Nominal by Nominal" msgstr "" -#: src/crosstabs.q:2034 src/crosstabs.q:2163 +#: src/crosstabs.q:2041 src/crosstabs.q:2170 msgid "Ordinal by Ordinal" msgstr "" -#: src/crosstabs.q:2035 +#: src/crosstabs.q:2042 msgid "Interval by Interval" msgstr "" -#: src/crosstabs.q:2036 +#: src/crosstabs.q:2043 msgid "Measure of Agreement" msgstr "" -#: src/crosstabs.q:2041 +#: src/crosstabs.q:2048 msgid "Phi" msgstr "" -#: src/crosstabs.q:2042 +#: src/crosstabs.q:2049 msgid "Cramer's V" msgstr "" -#: src/crosstabs.q:2043 +#: src/crosstabs.q:2050 msgid "Contingency Coefficient" msgstr "" -#: src/crosstabs.q:2044 +#: src/crosstabs.q:2051 msgid "Kendall's tau-b" msgstr "" -#: src/crosstabs.q:2045 +#: src/crosstabs.q:2052 msgid "Kendall's tau-c" msgstr "" -#: src/crosstabs.q:2046 +#: src/crosstabs.q:2053 msgid "Gamma" msgstr "" -#: src/crosstabs.q:2047 +#: src/crosstabs.q:2054 msgid "Spearman Correlation" msgstr "" -#: src/crosstabs.q:2048 +#: src/crosstabs.q:2055 msgid "Pearson's R" msgstr "" -#: src/crosstabs.q:2049 +#: src/crosstabs.q:2056 msgid "Kappa" msgstr "" -#: src/crosstabs.q:2119 +#: src/crosstabs.q:2126 #, c-format msgid "Odds Ratio for %s (%g / %g)" msgstr "" -#: src/crosstabs.q:2122 +#: src/crosstabs.q:2129 #, c-format msgid "Odds Ratio for %s (%.*s / %.*s)" msgstr "" -#: src/crosstabs.q:2130 +#: src/crosstabs.q:2137 #, c-format msgid "For cohort %s = %g" msgstr "" -#: src/crosstabs.q:2133 +#: src/crosstabs.q:2140 #, c-format msgid "For cohort %s = %.*s" msgstr "" -#: src/crosstabs.q:2164 +#: src/crosstabs.q:2171 msgid "Nominal by Interval" msgstr "" -#: src/crosstabs.q:2169 +#: src/crosstabs.q:2176 msgid "Lambda" msgstr "" -#: src/crosstabs.q:2170 +#: src/crosstabs.q:2177 msgid "Goodman and Kruskal tau" msgstr "" -#: src/crosstabs.q:2171 +#: src/crosstabs.q:2178 msgid "Uncertainty Coefficient" msgstr "" -#: src/crosstabs.q:2172 +#: src/crosstabs.q:2179 msgid "Somers' d" msgstr "" -#: src/crosstabs.q:2173 +#: src/crosstabs.q:2180 msgid "Eta" msgstr "" -#: src/crosstabs.q:2178 +#: src/crosstabs.q:2185 msgid "Symmetric" msgstr "" -#: src/crosstabs.q:2179 src/crosstabs.q:2180 +#: src/crosstabs.q:2186 src/crosstabs.q:2187 #, c-format msgid "%s Dependent" msgstr "" @@ -507,8 +507,8 @@ msgstr "" msgid "Z-score of " msgstr "" -#: src/descript.q:792 src/data-list.c:732 src/data-list.c:869 src/print.c:801 -#: src/sysfile-info.c:135 src/sysfile-info.c:370 src/vfm.c:1093 +#: src/descript.q:792 src/data-list.c:736 src/data-list.c:877 src/print.c:801 +#: src/sysfile-info.c:135 src/sysfile-info.c:370 src/vfm.c:1081 msgid "Variable" msgstr "" @@ -533,10 +533,10 @@ msgid "" msgstr "" #: src/file-handle.q:88 src/autorecode.c:121 src/command.c:696 -#: src/compute.c:284 src/data-list.c:372 src/data-list.c:842 -#: src/data-list.c:1645 src/do-if.c:264 src/get.c:359 src/lexer.c:387 -#: src/loop.c:248 src/matrix-data.c:506 src/print.c:336 src/print.c:1064 -#: src/recode.c:409 src/sel-if.c:56 src/sel-if.c:136 src/vector.c:197 +#: src/compute.c:283 src/data-list.c:370 src/data-list.c:850 +#: src/data-list.c:1666 src/do-if.c:264 src/get.c:359 src/lexer.c:387 +#: src/loop.c:248 src/matrix-data.c:503 src/print.c:336 src/print.c:1057 +#: src/recode.c:408 src/sel-if.c:56 src/sel-if.c:136 src/vector.c:194 msgid "expecting end of command" msgstr "" @@ -1008,9 +1008,9 @@ msgstr "" msgid "%s & %s" msgstr "" -#: src/aggregate.c:188 src/aggregate.c:229 src/data-list.c:1321 -#: src/data-list.c:1356 src/data-list.c:1369 src/data-list.c:1382 -#: src/data-list.c:1415 +#: src/aggregate.c:188 src/aggregate.c:229 src/data-list.c:1341 +#: src/data-list.c:1376 src/data-list.c:1389 src/data-list.c:1402 +#: src/data-list.c:1435 #, c-format msgid "%s subcommand given multiple times." msgstr "" @@ -1023,41 +1023,41 @@ msgstr "" msgid "BREAK subcommand not specified." msgstr "" -#: src/aggregate.c:494 +#: src/aggregate.c:492 msgid "expecting aggregation function" msgstr "" -#: src/aggregate.c:510 +#: src/aggregate.c:508 #, c-format msgid "Unknown aggregation function %s." msgstr "" -#: src/aggregate.c:525 +#: src/aggregate.c:523 msgid "expecting `('" msgstr "" -#: src/aggregate.c:560 +#: src/aggregate.c:558 #, c-format msgid "Missing argument %d to %s." msgstr "" -#: src/aggregate.c:568 +#: src/aggregate.c:566 #, c-format msgid "Arguments to %s must be of same type as source variables." msgstr "" -#: src/aggregate.c:578 src/expr-prs.c:665 +#: src/aggregate.c:576 src/expr-prs.c:665 msgid "expecting `)'" msgstr "" -#: src/aggregate.c:590 src/autorecode.c:110 +#: src/aggregate.c:588 src/autorecode.c:110 #, c-format msgid "" "Number of source variables (%d) does not match number of target variables (%" "d)." msgstr "" -#: src/aggregate.c:657 +#: src/aggregate.c:655 #, c-format msgid "" "Variable name %s is not unique within the aggregate file dictionary, which " @@ -1383,25 +1383,25 @@ msgstr "" msgid "This command is not valid in a syntax file." msgstr "" -#: src/compute.c:141 src/compute.c:200 +#: src/compute.c:140 src/compute.c:199 #, c-format msgid "" "When executing COMPUTE: SYSMIS is not a valid value as an index into vector %" "s." msgstr "" -#: src/compute.c:144 src/compute.c:204 +#: src/compute.c:143 src/compute.c:203 #, c-format msgid "" "When executing COMPUTE: %g is not a valid value as an index into vector %s." msgstr "" -#: src/compute.c:343 +#: src/compute.c:342 #, c-format msgid "There is no vector named %s." msgstr "" -#: src/compute.c:449 +#: src/compute.c:441 msgid "Extra characters after expression." msgstr "" @@ -1409,7 +1409,7 @@ msgstr "" msgid "Destination cannot be a string variable." msgstr "" -#: src/count.c:286 +#: src/count.c:283 #, c-format msgid "" "%g THRU %g is not a valid range. The number following THRU must be at least " @@ -1597,65 +1597,65 @@ msgstr "" msgid "Field too long (%d characters). Truncated after character %d." msgstr "" -#: src/data-list.c:137 +#: src/data-list.c:138 msgid "" "DATA LIST may not use a different file from that specified on its " "surrounding FILE TYPE." msgstr "" -#: src/data-list.c:156 +#: src/data-list.c:157 msgid "The END subcommand may only be specified once." msgstr "" -#: src/data-list.c:195 +#: src/data-list.c:193 msgid "Only one of FIXED, FREE, or LIST may be specified." msgstr "" -#: src/data-list.c:321 src/print.c:297 +#: src/data-list.c:319 src/print.c:297 #, c-format msgid "" "The record number specified, %ld, is before the previous record, %d. Data " "fields must be listed in order of increasing record number." msgstr "" -#: src/data-list.c:353 src/data-list.c:1634 +#: src/data-list.c:351 src/data-list.c:1655 msgid "" "SPSS-like or FORTRAN-like format specification expected after variable names." msgstr "" -#: src/data-list.c:364 src/print.c:329 +#: src/data-list.c:362 src/print.c:329 msgid "" "Variables are specified on records that should not exist according to " "RECORDS subcommand." msgstr "" -#: src/data-list.c:396 src/data-list.c:409 src/print.c:506 src/print.c:519 +#: src/data-list.c:394 src/data-list.c:407 src/print.c:506 src/print.c:519 msgid "Column positions for fields must be positive." msgstr "" -#: src/data-list.c:414 +#: src/data-list.c:412 msgid "The ending column for a field must be greater than the starting column." msgstr "" -#: src/data-list.c:438 src/print.c:547 +#: src/data-list.c:436 src/print.c:547 msgid "A format specifier on this line has extra characters on the end." msgstr "" -#: src/data-list.c:453 src/print.c:563 +#: src/data-list.c:451 src/print.c:563 msgid "The value for number of decimal places must be at least 1." msgstr "" -#: src/data-list.c:467 src/print.c:576 +#: src/data-list.c:465 src/print.c:576 #, c-format msgid "Input format %s doesn't accept decimal places." msgstr "" -#: src/data-list.c:488 src/print.c:596 +#: src/data-list.c:486 src/print.c:596 #, c-format msgid "The %d columns %d-%d can't be evenly divided into %d fields." msgstr "" -#: src/data-list.c:528 src/data-list.c:625 src/data-list.c:825 +#: src/data-list.c:528 src/data-list.c:625 src/data-list.c:829 #, c-format msgid "%s is a duplicate variable name." msgstr "" @@ -1676,233 +1676,233 @@ msgid "" "given." msgstr "" -#: src/data-list.c:698 src/print.c:769 +#: src/data-list.c:702 src/print.c:769 msgid "" "There aren't enough format specifications to match the number of variable " "names given." msgstr "" -#: src/data-list.c:733 src/print.c:802 +#: src/data-list.c:737 src/print.c:802 msgid "Record" msgstr "" -#: src/data-list.c:734 src/print.c:803 +#: src/data-list.c:738 src/print.c:803 msgid "Columns" msgstr "" -#: src/data-list.c:735 src/data-list.c:870 src/print.c:804 +#: src/data-list.c:739 src/data-list.c:878 src/print.c:804 msgid "Format" msgstr "" -#: src/data-list.c:758 +#: src/data-list.c:762 #, c-format msgid "Reading %d record from file %s." msgid_plural "Reading %d records from file %s." msgstr[0] "" msgstr[1] "" -#: src/data-list.c:761 +#: src/data-list.c:765 #, c-format msgid "Reading %d record from the command file." msgid_plural "Reading %d records from the command file." msgstr[0] "" msgstr[1] "" -#: src/data-list.c:768 src/data-list.c:769 +#: src/data-list.c:772 src/data-list.c:773 msgid "Occurrence data specifications." msgstr "" -#: src/data-list.c:893 +#: src/data-list.c:901 #, c-format msgid "Reading free-form data from file %s." msgstr "" -#: src/data-list.c:894 +#: src/data-list.c:902 msgid "Reading free-form data from the command file." msgstr "" -#: src/data-list.c:945 src/matrix-data.c:939 +#: src/data-list.c:953 src/matrix-data.c:935 msgid "Scope of string exceeds line." msgstr "" -#: src/data-list.c:1006 +#: src/data-list.c:1013 msgid "Attempt to read past end of file." msgstr "" -#: src/data-list.c:1035 +#: src/data-list.c:1042 msgid "abort in write_case()\n" msgstr "" -#: src/data-list.c:1063 +#: src/data-list.c:1070 #, c-format msgid "Partial case of %d of %d records discarded." msgstr "" -#: src/data-list.c:1112 +#: src/data-list.c:1119 #, c-format msgid "Partial case discarded. The first variable missing was %s." msgstr "" -#: src/data-list.c:1153 +#: src/data-list.c:1160 #, c-format msgid "" "Missing value(s) for all variables from %s onward. These will be filled " "with the system-missing value or blanks, as appropriate." msgstr "" -#: src/data-list.c:1311 +#: src/data-list.c:1331 msgid "" "REPEATING DATA must use the same file as its corresponding DATA LIST or FILE " "TYPE." msgstr "" -#: src/data-list.c:1345 +#: src/data-list.c:1365 #, c-format msgid "STARTS beginning column (%d) exceeds STARTS ending column (%d)." msgstr "" -#: src/data-list.c:1401 +#: src/data-list.c:1421 #, c-format msgid "CONTINUED beginning column (%d) exceeds CONTINUED ending column (%d)." msgstr "" -#: src/data-list.c:1424 +#: src/data-list.c:1444 #, c-format msgid "ID beginning column (%ld) must be positive." msgstr "" -#: src/data-list.c:1439 +#: src/data-list.c:1459 #, c-format msgid "ID ending column (%ld) must be positive." msgstr "" -#: src/data-list.c:1445 +#: src/data-list.c:1465 #, c-format msgid "ID ending column (%ld) cannot be less than ID beginning column (%d)." msgstr "" -#: src/data-list.c:1484 +#: src/data-list.c:1505 msgid "Missing required specification STARTS." msgstr "" -#: src/data-list.c:1486 +#: src/data-list.c:1507 msgid "Missing required specification OCCURS." msgstr "" -#: src/data-list.c:1493 +#: src/data-list.c:1514 msgid "ID specified without CONTINUED." msgstr "" -#: src/data-list.c:1581 +#: src/data-list.c:1602 msgid "String variable not allowed here." msgstr "" -#: src/data-list.c:1591 +#: src/data-list.c:1612 #, c-format msgid "%s (%d) must be at least 1." msgstr "" -#: src/data-list.c:1597 +#: src/data-list.c:1618 #, c-format msgid "Variable or integer expected for %s." msgstr "" -#: src/data-list.c:1736 +#: src/data-list.c:1753 #, c-format -msgid "Mismatched case ID (%s). Expected value was %s." +msgid "Encountered mismatched record ID \"%s\" expecting \"%s\"." msgstr "" -#: src/data-list.c:1768 +#: src/data-list.c:1785 #, c-format msgid "" "Variable %s starting in column %d extends beyond physical record length of %" "d." msgstr "" -#: src/data-list.c:1836 +#: src/data-list.c:1853 #, c-format msgid "Invalid value %d for OCCURS." msgstr "" -#: src/data-list.c:1842 +#: src/data-list.c:1859 #, c-format msgid "Beginning column for STARTS (%d) must be at least 1." msgstr "" -#: src/data-list.c:1850 +#: src/data-list.c:1867 #, c-format msgid "Ending column for STARTS (%d) is less than beginning column (%d)." msgstr "" -#: src/data-list.c:1858 +#: src/data-list.c:1875 #, c-format msgid "Invalid value %d for LENGTH." msgstr "" -#: src/data-list.c:1865 +#: src/data-list.c:1882 #, c-format msgid "Beginning column for CONTINUED (%d) must be at least 1." msgstr "" -#: src/data-list.c:1873 +#: src/data-list.c:1890 #, c-format msgid "Ending column for CONTINUED (%d) is less than beginning column (%d)." msgstr "" -#: src/data-list.c:1896 +#: src/data-list.c:1913 #, c-format msgid "" "Number of repetitions specified on OCCURS (%d) exceed number of repetitions " "available in space on STARTS (%d), and CONTINUED not specified." msgstr "" -#: src/data-list.c:1913 +#: src/data-list.c:1930 #, c-format msgid "Unexpected end of file with %d repetitions remaining out of %d." msgstr "" -#: src/data-out.c:143 src/sfm-read.c:470 src/sysfile-info.c:116 +#: src/data-out.c:232 src/sfm-read.c:470 src/sysfile-info.c:116 msgid "Unknown" msgstr "" -#: src/data-out.c:251 +#: src/data-out.c:340 msgid "" "The N output format cannot be used to output a negative number or the system-" "missing value." msgstr "" -#: src/data-out.c:362 +#: src/data-out.c:451 #, c-format msgid "" "Quality of zoned decimal (Z) output format code is suspect. Check your " "results. Report bugs to %s." msgstr "" -#: src/data-out.c:369 +#: src/data-out.c:459 msgid "The system-missing value cannot be output as a zoned decimal number." msgstr "" -#: src/data-out.c:382 +#: src/data-out.c:472 #, c-format msgid "Number %g too big to fit in field with format Z%d.%d." msgstr "" -#: src/data-out.c:774 +#: src/data-out.c:864 #, c-format msgid "Time value %g too large in magnitude to convert to alphanumeric time." msgstr "" -#: src/data-out.c:827 +#: src/data-out.c:915 #, c-format -msgid "Weekday index %d does not lie between 1 and 7." +msgid "Weekday index %f does not lie between 1 and 7." msgstr "" -#: src/data-out.c:848 +#: src/data-out.c:935 #, c-format -msgid "Month index %d does not lie between 1 and 12." +msgid "Month index %f does not lie between 1 and 12." msgstr "" -#: src/data-out.c:960 +#: src/data-out.c:1048 #, c-format msgid "" "Year %d cannot be represented in four digits for output formatting purposes." @@ -2083,51 +2083,41 @@ msgstr "" msgid "installation error" msgstr "" -#: src/expr-evl.c:1125 +#: src/expr-evl.c:1118 msgid "" "A number being treated as a Boolean in an expression was found to have a " "value other than 0 (false), 1 (true), or the system-missing value. The " "result was forced to 0." msgstr "" -#: src/expr-evl.c:1169 +#: src/expr-evl.c:1162 #, c-format msgid "" "SYSMIS is not a valid index value for vector %s. The result will be set to " "SYSMIS." msgstr "" -#: src/expr-evl.c:1173 +#: src/expr-evl.c:1166 #, c-format msgid "" "%g is not a valid index value for vector %s. The result will be set to " "SYSMIS." msgstr "" -#: src/expr-evl.c:1191 +#: src/expr-evl.c:1184 #, c-format msgid "" "SYSMIS is not a valid index value for vector %s. The result will be set to " "the empty string." msgstr "" -#: src/expr-evl.c:1196 +#: src/expr-evl.c:1189 #, c-format msgid "" "%g is not a valid index value for vector %s. The result will be set to the " "empty string." msgstr "" -#: src/expr-evl.c:1296 -#, c-format -msgid "evaluate_expression(): not implemented: %s\n" -msgstr "" - -#: src/expr-evl.c:1299 -#, c-format -msgid "evaluate_expression(): not implemented: %d\n" -msgstr "" - #: src/expr-opt.c:663 msgid "" "While optimizing a constant expression, there was a bad value for the third " @@ -2150,7 +2140,7 @@ msgstr "" msgid "Second argument to %cTRIM() must be at least one character in length." msgstr "" -#: src/expr-opt.c:881 +#: src/expr-opt.c:882 msgid "" "When optimizing a constant expression, an integer that was being used as an " "Boolean value was found to have a constant value other than 0, 1, or SYSMIS." @@ -2468,12 +2458,12 @@ msgstr "" msgid "No commands between FILE TYPE and END FILE TYPE." msgstr "" -#: src/file-type.c:654 +#: src/file-type.c:655 #, c-format msgid "Unknown record type \"%.*s\"." msgstr "" -#: src/file-type.c:678 +#: src/file-type.c:679 #, c-format msgid "Unknown record type %g." msgstr "" @@ -2502,49 +2492,49 @@ msgstr "" msgid "Could not create acceptable variant for variable %s." msgstr "" -#: src/flip.c:179 +#: src/flip.c:178 msgid "Cannot create more than 99999 variable names." msgstr "" -#: src/flip.c:295 +#: src/flip.c:293 #, c-format msgid "Error reading FLIP source file: %s." msgstr "" -#: src/flip.c:382 +#: src/flip.c:380 msgid "Could not create temporary file for FLIP." msgstr "" -#: src/flip.c:392 src/flip.c:411 +#: src/flip.c:390 src/flip.c:409 #, c-format msgid "Error writing FLIP file: %s." msgstr "" -#: src/flip.c:447 +#: src/flip.c:445 msgid "Error creating FLIP source file." msgstr "" -#: src/flip.c:450 +#: src/flip.c:448 #, c-format msgid "Error rewinding FLIP file: %s." msgstr "" -#: src/flip.c:459 +#: src/flip.c:457 #, c-format msgid "Error reading FLIP file: %s." msgstr "" -#: src/flip.c:471 +#: src/flip.c:469 #, c-format msgid "Error seeking FLIP source file: %s." msgstr "" -#: src/flip.c:476 +#: src/flip.c:474 #, c-format msgid "Error writing FLIP source file: %s." msgstr "" -#: src/flip.c:484 +#: src/flip.c:482 #, c-format msgid "Error rewind FLIP source file: %s." msgstr "" @@ -2640,7 +2630,7 @@ msgstr "" msgid "Format %s may not be assigned to a %s variable." msgstr "" -#: src/formats.c:123 src/numeric.c:66 src/numeric.c:139 +#: src/formats.c:123 src/numeric.c:65 src/numeric.c:137 msgid "`)' expected after output format." msgstr "" @@ -2659,7 +2649,7 @@ msgstr "" msgid "GET translation table from file to memory:\n" msgstr "" -#: src/get.c:115 src/get.c:1398 +#: src/get.c:115 src/get.c:1397 #, c-format msgid " %8s from %3d,%3d to %3d,%3d\n" msgstr "" @@ -2741,18 +2731,18 @@ msgstr "" msgid "File %s lacks BY variable %s." msgstr "" -#: src/get.c:1311 +#: src/get.c:1310 #, c-format msgid "" "Variable %s in file %s (%s) has different type or width from the same " "variable in earlier file (%s)." msgstr "" -#: src/get.c:1360 +#: src/get.c:1359 msgid "expecting COMM or TAPE" msgstr "" -#: src/get.c:1393 +#: src/get.c:1392 #, c-format msgid "IMPORT translation table from file to memory:\n" msgstr "" @@ -2782,24 +2772,24 @@ msgstr "" msgid "Closing `%s': %s." msgstr "" -#: src/glob.c:222 +#: src/glob.c:217 msgid "data> " msgstr "" -#: src/glob.c:279 +#: src/glob.c:274 msgid "Specify a terminal type with `setenv TERM '." msgstr "" -#: src/glob.c:285 +#: src/glob.c:280 msgid "Could not access the termcap data base." msgstr "" -#: src/glob.c:287 +#: src/glob.c:282 #, c-format msgid "Terminal type `%s' is not defined." msgstr "" -#: src/glob.c:288 +#: src/glob.c:283 msgid "Assuming screen of size 79x25." msgstr "" @@ -3009,31 +2999,31 @@ msgstr "" msgid "Unrecognized filename format." msgstr "" -#: src/inpt-pgm.c:83 +#: src/inpt-pgm.c:84 msgid "No matching INPUT PROGRAM command." msgstr "" -#: src/inpt-pgm.c:88 +#: src/inpt-pgm.c:89 msgid "" "No data-input or transformation commands specified between INPUT PROGRAM and " "END INPUT PROGRAM." msgstr "" -#: src/inpt-pgm.c:265 src/inpt-pgm.c:408 +#: src/inpt-pgm.c:283 src/inpt-pgm.c:420 msgid "" "This command may only be executed between INPUT PROGRAM and END INPUT " "PROGRAM." msgstr "" -#: src/inpt-pgm.c:324 +#: src/inpt-pgm.c:336 msgid "COLUMN subcommand multiply specified." msgstr "" -#: src/inpt-pgm.c:338 +#: src/inpt-pgm.c:350 msgid "expecting file handle name" msgstr "" -#: src/inpt-pgm.c:381 +#: src/inpt-pgm.c:393 msgid "" "REREAD: Column numbers must be positive finite numbers. Column set to 1." msgstr "" @@ -3097,12 +3087,12 @@ msgstr "" msgid "The rest of this command has been discarded." msgstr "" -#: src/lexer.c:842 src/print.c:1157 +#: src/lexer.c:842 src/print.c:1150 #, c-format msgid "" msgstr "" -#: src/lexer.c:968 src/pfm-read.c:132 src/repeat.c:226 +#: src/lexer.c:968 src/pfm-read.c:132 src/repeat.c:225 msgid "Unexpected end of file." msgstr "" @@ -3147,20 +3137,20 @@ msgstr "" msgid "The index variable may not be a string variable." msgstr "" -#: src/loop.c:321 +#: src/loop.c:316 msgid "There is no LOOP command that corresponds to this END LOOP." msgstr "" -#: src/loop.c:522 +#: src/loop.c:517 msgid "" "This command may only appear enclosed in a LOOP/END LOOP control structure." msgstr "" -#: src/loop.c:528 +#: src/loop.c:523 msgid "BREAK not enclosed in DO IF structure." msgstr "" -#: src/loop.c:605 +#: src/loop.c:600 #, c-format msgid "%s without %s." msgstr "" @@ -3199,168 +3189,168 @@ msgstr "" msgid "VARNAME_ cannot be explicitly specified on VARIABLES." msgstr "" -#: src/matrix-data.c:267 +#: src/matrix-data.c:265 msgid "in FORMAT subcommand" msgstr "" -#: src/matrix-data.c:278 +#: src/matrix-data.c:276 msgid "SPLIT subcommand multiply specified." msgstr "" -#: src/matrix-data.c:285 +#: src/matrix-data.c:283 msgid "in SPLIT subcommand" msgstr "" -#: src/matrix-data.c:294 +#: src/matrix-data.c:292 msgid "Split variable may not be named ROWTYPE_ or VARNAME_." msgstr "" -#: src/matrix-data.c:327 +#: src/matrix-data.c:324 #, c-format msgid "Split variable %s is already another type." msgstr "" -#: src/matrix-data.c:342 +#: src/matrix-data.c:339 msgid "FACTORS subcommand multiply specified." msgstr "" -#: src/matrix-data.c:357 +#: src/matrix-data.c:354 #, c-format msgid "Factor variable %s is already another type." msgstr "" -#: src/matrix-data.c:372 +#: src/matrix-data.c:369 msgid "CELLS subcommand multiply specified." msgstr "" -#: src/matrix-data.c:378 src/matrix-data.c:397 +#: src/matrix-data.c:375 src/matrix-data.c:394 msgid "expecting positive integer" msgstr "" -#: src/matrix-data.c:391 +#: src/matrix-data.c:388 msgid "N subcommand multiply specified." msgstr "" -#: src/matrix-data.c:412 +#: src/matrix-data.c:409 msgid "CONTENTS subcommand multiply specified." msgstr "" -#: src/matrix-data.c:432 +#: src/matrix-data.c:429 msgid "Nested parentheses not allowed." msgstr "" -#: src/matrix-data.c:442 +#: src/matrix-data.c:439 msgid "Mismatched right parenthesis (`(')." msgstr "" -#: src/matrix-data.c:447 +#: src/matrix-data.c:444 msgid "Empty parentheses not allowed." msgstr "" -#: src/matrix-data.c:460 src/matrix-data.c:468 +#: src/matrix-data.c:457 src/matrix-data.c:465 msgid "in CONTENTS subcommand" msgstr "" -#: src/matrix-data.c:475 +#: src/matrix-data.c:472 #, c-format msgid "Content multiply specified for %s." msgstr "" -#: src/matrix-data.c:492 +#: src/matrix-data.c:489 msgid "Missing right parenthesis." msgstr "" -#: src/matrix-data.c:512 +#: src/matrix-data.c:509 msgid "Missing VARIABLES subcommand." msgstr "" -#: src/matrix-data.c:518 +#: src/matrix-data.c:515 msgid "" "CONTENTS subcommand not specified: assuming file contains only CORR matrix." msgstr "" -#: src/matrix-data.c:528 +#: src/matrix-data.c:525 msgid "" "Missing CELLS subcommand. CELLS is required when ROWTYPE_ is not given in " "the data and factors are present." msgstr "" -#: src/matrix-data.c:536 +#: src/matrix-data.c:533 msgid "Split file values must be present in the data when ROWTYPE_ is present." msgstr "" -#: src/matrix-data.c:592 +#: src/matrix-data.c:588 msgid "No continuous variables specified." msgstr "" -#: src/matrix-data.c:1006 +#: src/matrix-data.c:1002 #, c-format msgid "End of line expected %s while reading %s." msgstr "" -#: src/matrix-data.c:1193 +#: src/matrix-data.c:1190 #, c-format msgid "expecting value for %s %s" msgstr "" -#: src/matrix-data.c:1344 +#: src/matrix-data.c:1342 #, c-format msgid "Syntax error expecting SPLIT FILE value %s." msgstr "" -#: src/matrix-data.c:1353 +#: src/matrix-data.c:1351 #, c-format msgid "Expecting value %g for %s." msgstr "" -#: src/matrix-data.c:1391 src/matrix-data.c:1820 +#: src/matrix-data.c:1389 src/matrix-data.c:1823 #, c-format msgid "Syntax error expecting factor value %s." msgstr "" -#: src/matrix-data.c:1400 +#: src/matrix-data.c:1398 #, c-format msgid "Syntax error expecting value %g for %s %s." msgstr "" -#: src/matrix-data.c:1610 +#: src/matrix-data.c:1612 #, c-format msgid "Syntax error %s expecting SPLIT FILE value." msgstr "" -#: src/matrix-data.c:1734 +#: src/matrix-data.c:1736 #, c-format msgid "" "Expected %d lines of data for %s content; actually saw %d lines. No data " "will be output for this content." msgstr "" -#: src/matrix-data.c:1765 +#: src/matrix-data.c:1768 #, c-format msgid "Multiply specified ROWTYPE_ %s." msgstr "" -#: src/matrix-data.c:1770 +#: src/matrix-data.c:1773 #, c-format msgid "Syntax error %s expecting ROWTYPE_ string." msgstr "" -#: src/matrix-data.c:1789 +#: src/matrix-data.c:1792 #, c-format msgid "Syntax error %s." msgstr "" -#: src/matrix-data.c:1935 +#: src/matrix-data.c:1938 #, c-format msgid "Duplicate specification for %s." msgstr "" -#: src/matrix-data.c:1947 +#: src/matrix-data.c:1950 #, c-format msgid "Too many rows of matrix data for %s." msgstr "" -#: src/matrix-data.c:1992 +#: src/matrix-data.c:1995 #, c-format msgid "Syntax error expecting value for %s %s." msgstr "" @@ -3403,7 +3393,7 @@ msgstr "" msgid "String is not of proper length." msgstr "" -#: src/mis-val.c:326 src/repeat.c:484 +#: src/mis-val.c:326 src/repeat.c:476 msgid "String expected." msgstr "" @@ -3491,17 +3481,17 @@ msgstr "" msgid "`/' or `.' expected." msgstr "" -#: src/numeric.c:59 +#: src/numeric.c:58 #, c-format msgid "Format type %s may not be used with a numeric variable." msgstr "" -#: src/numeric.c:78 src/numeric.c:161 src/vector.c:158 +#: src/numeric.c:77 src/numeric.c:159 src/vector.c:157 #, c-format msgid "There is already a variable named %s." msgstr "" -#: src/numeric.c:132 +#: src/numeric.c:130 #, c-format msgid "Format type %s may not be used with a string variable." msgstr "" @@ -3686,7 +3676,7 @@ msgstr "" msgid "portable file %s corrupt at offset %ld: " msgstr "" -#: src/pfm-read.c:108 src/pfm-write.c:501 +#: src/pfm-read.c:108 src/pfm-write.c:502 #, c-format msgid "%s: Closing portable file: %s." msgstr "" @@ -3894,12 +3884,12 @@ msgstr "" msgid "Error writing portable-file header." msgstr "" -#: src/pfm-write.c:168 +#: src/pfm-write.c:169 #, c-format msgid "%s: Writing portable file: %s." msgstr "" -#: src/pfm-write.c:510 +#: src/pfm-write.c:511 msgid "writing as a portable file" msgstr "" @@ -4087,25 +4077,25 @@ msgstr "" msgid "Writing %3d records to the listing file." msgstr "" -#: src/print.c:1046 +#: src/print.c:1039 msgid "A file name or handle was expected in the OUTFILE subcommand." msgstr "" -#: src/print.c:1098 +#: src/print.c:1091 #, c-format msgid "" "The expression on PRINT SPACE evaluated to %d. It's not possible to PRINT " "SPACE a negative number of lines." msgstr "" -#: src/recode.c:288 +#: src/recode.c:287 #, c-format msgid "" "%d variable(s) cannot be recoded into %d variable(s). Specify the same " "number of variables as input and output variables." msgstr "" -#: src/recode.c:302 +#: src/recode.c:301 #, c-format msgid "" "There is no string variable named %s. (All string variables specified on " @@ -4113,56 +4103,56 @@ msgid "" "variable.)" msgstr "" -#: src/recode.c:311 +#: src/recode.c:310 #, c-format msgid "" "Type mismatch between input and output variables. Output variable %s is not " "a string variable, but all the input variables are string variables." msgstr "" -#: src/recode.c:330 +#: src/recode.c:329 #, c-format msgid "Type mismatch after INTO: %s is not a numeric variable." msgstr "" -#: src/recode.c:360 +#: src/recode.c:359 msgid "" "INTO must be used when the input values are numeric and output values are " "string." msgstr "" -#: src/recode.c:368 +#: src/recode.c:367 msgid "" "INTO must be used when the input values are string and output values are " "numeric." msgstr "" -#: src/recode.c:504 +#: src/recode.c:501 msgid "" "Inconsistent output types. The output values must be all numeric or all " "string." msgstr "" -#: src/recode.c:555 +#: src/recode.c:552 msgid "following LO THRU" msgstr "" -#: src/recode.c:571 src/recode.c:600 +#: src/recode.c:568 src/recode.c:597 msgid "in source value" msgstr "" -#: src/recode.c:613 +#: src/recode.c:610 msgid "" "Keyword CONVERT may only be used with string input values and numeric output " "values." msgstr "" -#: src/recode.c:869 +#: src/recode.c:866 #, c-format msgid "!!END!!" msgstr "" -#: src/recode.c:890 src/recode.c:906 +#: src/recode.c:887 src/recode.c:903 #, c-format msgid "!!ERROR!!" msgstr "" @@ -4184,12 +4174,12 @@ msgstr "" msgid "Renaming would duplicate variable name %s." msgstr "" -#: src/repeat.c:159 +#: src/repeat.c:158 #, c-format msgid "Identifier %s is given twice." msgstr "" -#: src/repeat.c:202 +#: src/repeat.c:201 #, c-format msgid "" "There must be the same number of substitutions for each dummy variable " @@ -4197,11 +4187,11 @@ msgid "" "s as well, but %d were specified." msgstr "" -#: src/repeat.c:311 +#: src/repeat.c:310 msgid "No commands in scope." msgstr "" -#: src/repeat.c:511 +#: src/repeat.c:503 msgid "No matching DO REPEAT." msgstr "" @@ -4697,7 +4687,7 @@ msgstr "" msgid "SORT: Closing handle %d." msgstr "" -#: src/sort.c:594 src/sort.c:819 +#: src/sort.c:594 src/sort.c:818 #, c-format msgid "%s: Error closing temporary file: %s." msgstr "" @@ -4717,76 +4707,76 @@ msgstr "" msgid "%s: Error creating temporary file: %s." msgstr "" -#: src/sort.c:823 src/sort.c:985 src/sort.c:1035 src/sort.c:1207 -#: src/sort.c:1214 +#: src/sort.c:822 src/sort.c:983 src/sort.c:1033 src/sort.c:1202 +#: src/sort.c:1209 #, c-format msgid "%s: Error removing temporary file: %s." msgstr "" -#: src/sort.c:967 +#: src/sort.c:965 msgid "merging runs" msgstr "" -#: src/sort.c:975 +#: src/sort.c:973 #, c-format msgid " into run %d(%d)\n" msgstr "" -#: src/sort.c:994 +#: src/sort.c:992 msgid "Out of memory expanding Huffman priority queue." msgstr "" -#: src/sort.c:1046 +#: src/sort.c:1044 #, c-format msgid "%s: Error creating temporary file for merge: %s." msgstr "" -#: src/sort.c:1074 src/sort.c:1134 +#: src/sort.c:1071 src/sort.c:1129 #, c-format msgid "%s: Error reading temporary file in merge: %s." msgstr "" -#: src/sort.c:1077 src/sort.c:1138 +#: src/sort.c:1074 src/sort.c:1133 #, c-format msgid "%s: Unexpected end of temporary file in merge." msgstr "" -#: src/sort.c:1103 +#: src/sort.c:1099 #, c-format msgid "%s: Error writing temporary file in merge: %s." msgstr "" -#: src/sort.c:1154 src/sort.c:1187 +#: src/sort.c:1149 src/sort.c:1182 #, c-format msgid "%s: Error closing temporary file in merge: %s." msgstr "" -#: src/sort.c:1159 +#: src/sort.c:1154 #, c-format msgid "%s: Error removing temporary file in merge: %s." msgstr "" -#: src/sort.c:1258 +#: src/sort.c:1253 #, c-format msgid "%s: Cannot open sort result file: %s." msgstr "" -#: src/sort.c:1269 +#: src/sort.c:1264 #, c-format msgid "%s: Error reading sort result file: %s." msgstr "" -#: src/sort.c:1272 +#: src/sort.c:1267 #, c-format msgid "%s: Unexpected end of sort result file: %s." msgstr "" -#: src/sort.c:1283 +#: src/sort.c:1278 #, c-format msgid "%s: Error closing sort result file: %s." msgstr "" -#: src/sort.c:1287 +#: src/sort.c:1282 #, c-format msgid "%s: Error removing sort result file: %s." msgstr "" @@ -4892,7 +4882,7 @@ msgstr "" msgid "Documents in the active file:" msgstr "" -#: src/sysfile-info.c:379 src/sysfile-info.c:537 src/vfm.c:1095 +#: src/sysfile-info.c:379 src/sysfile-info.c:537 src/vfm.c:1083 msgid "Label" msgstr "" @@ -5082,95 +5072,95 @@ msgstr "" msgid "Bad bounds in use of TO convention." msgstr "" -#: src/vector.c:69 +#: src/vector.c:68 #, c-format msgid "Vector name %s is given twice." msgstr "" -#: src/vector.c:75 +#: src/vector.c:74 #, c-format msgid "There is already a vector with name %s." msgstr "" -#: src/vector.c:96 +#: src/vector.c:95 msgid "" "A slash must be used to separate each vector specification when using the " "long form. Commands such as VECTOR A,B=Q1 TO Q20 are not supported." msgstr "" -#: src/vector.c:130 +#: src/vector.c:129 msgid "Vectors must have at least one element." msgstr "" -#: src/vector.c:144 +#: src/vector.c:143 #, c-format msgid "%s%d is too long for a variable name." msgstr "" -#: src/vector.c:184 +#: src/vector.c:181 msgid "" "The syntax for this command does not match the expected syntax for either " "the long form or the short form of VECTOR." msgstr "" -#: src/vfm.c:293 +#: src/vfm.c:286 #, c-format msgid "" "Workspace overflow predicted. Max workspace is currently set to %d KB (%d " "cases at %d bytes each). Paging active file to disk." msgstr "" -#: src/vfm.c:365 +#: src/vfm.c:361 msgid "" msgstr "" -#: src/vfm.c:612 +#: src/vfm.c:566 #, c-format msgid "" "An error occurred attempting to create a temporary file for use as the " "active file: %s." msgstr "" -#: src/vfm.c:630 +#: src/vfm.c:584 #, c-format msgid "" "An error occurred while attempting to read from a temporary file created for " "the active file: %s." msgstr "" -#: src/vfm.c:658 +#: src/vfm.c:612 #, c-format msgid "" "An error occurred while attempting to write to a temporary file used as the " "active file: %s." msgstr "" -#: src/vfm.c:672 +#: src/vfm.c:626 #, c-format msgid "" "An error occurred while attempting to rewind a temporary file used as the " "active file: %s." msgstr "" -#: src/vfm.c:787 +#: src/vfm.c:741 msgid "Virtual memory exhausted. Paging active file to disk." msgstr "" -#: src/vfm.c:790 +#: src/vfm.c:744 #, c-format msgid "" "Workspace limit of %d KB (%d cases at %d bytes each) overflowed. Paging " "active file to disk." msgstr "" -#: src/vfm.c:814 src/vfm.c:851 +#: src/vfm.c:768 src/vfm.c:805 #, c-format msgid "" "An error occurred while attempting to write to a temporary file created as " "the active file, while paging to disk: %s." msgstr "" -#: src/vfm.c:965 +#: src/vfm.c:919 msgid "transform: " msgstr "" diff --git a/src/ChangeLog b/src/ChangeLog index c1ef9709..7c180a6d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,18 @@ +Wed Feb 18 21:48:54 WST 2004 John Darrington + + * Moved the declarations relating to values to their own header file + (val.h) + + * Added levene.c and levene.h + + * vars-atr.c: Changed the signature of compare_values to + take const * arguments. + + * t-test.q: Changed the structure of struct t_test_proc + variables now contain their own group statistics information. + Eventually, t_test_proc might get renamed, because it'd be + applicable to other commands too. + Mon Feb 16 23:15:51 2004 Ben Pfaff * data-out.c: Clean up. Changed interface of convert_*() to take diff --git a/src/Makefile.am b/src/Makefile.am index 1305ca7e..5024da59 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -44,7 +44,8 @@ expr-prs.c expr.h exprP.h file-handle.h file-type.c \ filename.c filename.h flip.c font.h format.c format.def format.h \ formats.c get.c getline.c getline.h glob.c glob.h \ groff-font.c hash.c hash.h heap.c heap.h html.c htmlP.h include.c \ -inpt-pgm.c lexer.c lexer.h log.h loop.c magic.c magic.h main.c \ +inpt-pgm.c lexer.c lexer.h levene.c levene.h \ +log.h loop.c magic.c magic.h main.c \ main.h matrix-data.c matrix.c matrix.h mis-val.c misc.c misc.h \ modify-vars.c numeric.c output.c output.h pfm-read.c pfm-write.c pfm.h \ pool.c pool.h postscript.c print.c random.c random.h recode.c \ diff --git a/src/levene.c b/src/levene.c new file mode 100644 index 00000000..9f2d3b19 --- /dev/null +++ b/src/levene.c @@ -0,0 +1,334 @@ +/* This file is part of GNU PSPP + Computes Levene test statistic. + + Copyright (C) 2004 Free Software Foundation, Inc. + Written by John Darrington + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + +#include +#include +#include "levene.h" +#include "hash.h" +#include "var.h" +#include "vfm.h" +#include "alloc.h" +#include "stats.h" + +#include + + +/* This module calculates the Levene statistic for variables. + + Just for reference, the Levene Statistic is a defines as follows: + + W = \frac{ (n-k)\sum_{i=1}^k n_i(Z_{iL} - Z_{LL})^2} + { (k-1)\sum_{i=1}^k \sum_{j=1}^{n_i} (Z_{ij} - Z_{iL})^2} + + where: + k is the number of groups + n is the total number of samples + n_i is the number of samples in the ith group + Z_{ij} is | Y_{ij} - Y_{iL} | where Y_{iL} is the mean of the ith group + Z_{iL} is the mean of Z_{ij} over the ith group + Z_{LL} is the grand mean of Z_{ij} + + Imagine calculating that with pencil and paper! + + */ + +static void levene_precalc (void *); +static int levene_calc (struct ccase *, void *); +static void levene_postcalc (void *); + + +/* Second pass */ +static void levene2_precalc (void *); +static int levene2_calc (struct ccase *, void *); +static void levene2_postcalc (void *); + + +struct levene_info +{ + + /* The number of groups */ + int n_groups; + + /* Per group statistics */ + struct t_test_proc **group_stats; + + /* The independent variable */ + struct variable *v_indep; + + /* Number of dependent variables */ + int n_dep; + + /* The dependent variables */ + struct variable **v_dep; + +}; + + + +void +levene(struct variable *v_indep, int n_dep, struct variable **v_dep) +{ + struct levene_info l; + + l.n_dep=n_dep; + l.v_indep=v_indep; + l.v_dep=v_dep; + + procedure(levene_precalc, levene_calc, levene_postcalc, &l); + procedure(levene2_precalc,levene2_calc,levene2_postcalc,&l); + +} + +static struct hsh_table **hash; + +static int +compare_group_id(const void *a_, const void *b_, void *aux) +{ + const struct group_statistics *a = (struct group_statistics *) a_; + const struct group_statistics *b = (struct group_statistics *) b_; + + int width = (int) aux; + + return compare_values(&a->id, &b->id, width); +} + + +static unsigned +hash_group_id(const void *g_, void *aux) +{ + const struct group_statistics *g = (struct group_statistics *) g_; + + int width = (int) aux; + + if ( 0 == width ) + return hsh_hash_double (g->id.f); + else + return hsh_hash_bytes (g->id.s, width); + +} + +/* Internal variables used in calculating the Levene statistic */ + +/* Per variable statistics */ +struct lz_stats +{ + /* Total of all lz */ + double grand_total; + + /* Mean of all lz */ + double grand_mean; + + /* The total number of cases */ + double total_n ; + + /* Number of groups */ + int n_groups; +}; + +/* An array of lz_stats for each variable */ +static struct lz_stats *lz; + + + +static void +levene_precalc (void *_l) +{ + int i; + struct levene_info *l = (struct levene_info *) _l; + + lz = xmalloc (sizeof (struct lz_stats ) * l->n_dep ) ; + + hash = xmalloc (sizeof ( struct hsh_table *) * l->n_dep ); + + for(i=0; i < l->n_dep ; ++i ) + { + struct variable *v = l->v_dep[i]; + int g; + int number_of_groups = v->p.t_t.n_groups ; + + hash[i] = hsh_create (l->n_dep * number_of_groups, + compare_group_id, hash_group_id, + 0,(void *) l->v_indep->width); + + lz[i].grand_total = 0; + lz[i].total_n = 0; + lz[i].n_groups = number_of_groups; + + for (g = 0 ; g < v->p.t_t.n_groups ; ++g ) + { + struct group_statistics *gs = &v->p.t_t.gs[g]; + gs->lz_total=0; + hsh_insert(hash[i],gs); + } + } + +} + +static int +levene_calc (struct ccase *c, void *_l) +{ + int var; + struct levene_info *l = (struct levene_info *) _l; + union value *gv = &c->data[l->v_indep->fv]; + struct group_statistics key; + double weight = dict_get_case_weight(default_dict,c); + + key.id = *gv; + + for (var = 0; var < l->n_dep; ++var) + { + double levene_z; + union value *v = &c->data[l->v_dep[var]->fv]; + struct group_statistics *gs; + gs = hsh_find(hash[var],&key); + assert(0 == compare_values(&gs->id, &key.id, l->v_indep->width)); + + /* FIXME: handle SYSMIS properly */ + + levene_z= fabs(v->f - gs->mean); + lz[var].grand_total += levene_z * weight; + lz[var].total_n += weight; + + gs->lz_total += levene_z * weight; + + } + return 0; +} + + +static void +levene_postcalc (void *_l) +{ + int v; + + struct levene_info *l = (struct levene_info *) _l; + + for (v = 0; v < l->n_dep; ++v) + { + lz[v].grand_mean = lz[v].grand_total / lz[v].total_n ; + + } + +} + + +/* The denominator for the expression for the Levene */ +static double *lz_denominator; + +static void +levene2_precalc (void *_l) +{ + int v; + + struct levene_info *l = (struct levene_info *) _l; + + lz_denominator = (double *) xmalloc(sizeof(double) * l->n_dep); + + /* This stuff could go in the first post calc . . . */ + for (v = 0; v < l->n_dep; ++v) + { + struct hsh_iterator hi; + struct group_statistics *g; + for(g = (struct group_statistics *) hsh_first(hash[v],&hi); + g != 0 ; + g = (struct group_statistics *) hsh_next(hash[v],&hi) ) + { + g->lz_mean = g->lz_total/g->n ; + } + lz_denominator[v] = 0; + } +} + +static int +levene2_calc (struct ccase *c, void *_l) +{ + int var; + + struct levene_info *l = (struct levene_info *) _l; + + double weight = dict_get_case_weight(default_dict,c); + + union value *gv = &c->data[l->v_indep->fv]; + struct group_statistics key; + + key.id = *gv; + + for (var = 0; var < l->n_dep; ++var) + { + double levene_z; + union value *v = &c->data[l->v_dep[var]->fv]; + struct group_statistics *gs; + gs = hsh_find(hash[var],&key); + assert(gs); + assert(0 == compare_values(&gs->id, &key.id, l->v_indep->width)); + + /* FIXME: handle SYSMIS properly */ + + levene_z = fabs(v->f - gs->mean); + + lz_denominator[var] += weight * sqr(levene_z - gs->lz_mean); + } + + return 0; +} + + +static void +levene2_postcalc (void *_l) +{ + int v; + + struct levene_info *l = (struct levene_info *) _l; + + for (v = 0; v < l->n_dep; ++v) + { + double lz_numerator = 0; + struct hsh_iterator hi; + struct group_statistics *g; + for(g = (struct group_statistics *) hsh_first(hash[v],&hi); + g != 0 ; + g = (struct group_statistics *) hsh_next(hash[v],&hi) ) + { + + lz_numerator += g->n * sqr(g->lz_mean - lz[v].grand_mean ); + + + } + lz_numerator *= ( l->v_dep[v]->p.t_t.ugs.n - + l->v_dep[v]->p.t_t.n_groups ); + + lz_denominator[v] /= (l->v_dep[v]->p.t_t.n_groups - 1); + + l->v_dep[v]->p.t_t.levene = lz_numerator/lz_denominator[v] ; + } + + /* Now clear up after ourselves */ + free(lz_denominator); + for (v = 0; v < l->n_dep; ++v) + { + hsh_destroy(hash[v]); + } + + free(hash); + free(lz); +} + + diff --git a/src/levene.h b/src/levene.h new file mode 100644 index 00000000..8f19dead --- /dev/null +++ b/src/levene.h @@ -0,0 +1,43 @@ +/* This file is part of GNU PSPP + Computes Levene test statistic. + + Copyright (C) 2004 Free Software Foundation, Inc. + Written by John Darrington + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + +#if !levene_h +#define levene_h 1 + + +#include "var.h" + + +/* Calculate the Levene statistic + +The independent variable : v_indep; + +Number of dependent variables : n_dep; + +The dependent variables : v_dep; + +*/ + +void levene(struct variable *v_indep, int n_dep, struct variable **v_dep); + + + +#endif /* levene_h */ diff --git a/src/t-test.h b/src/t-test.h index 8a72fb9d..ad1d45ca 100644 --- a/src/t-test.h +++ b/src/t-test.h @@ -20,9 +20,15 @@ #ifndef T_TEST_H #define T_TEST_H -/* T-TEST private data */ -struct t_test_proc +#include "val.h" + +/* Statistics for grouped data */ +struct group_statistics { + /* The value of the independent variable for this group */ + union value id; + + /* The arithmetic mean */ double mean; /* Population std. deviation */ @@ -42,11 +48,35 @@ struct t_test_proc /* Std Err of Mean */ double se_mean; - /* Sum of differnces */ + /* Sum of differences */ double sum_diff; /* Mean of differences */ double mean_diff ; + + /* Running total of the Levene for this group */ + double lz_total; + + /* Group mean of Levene */ + double lz_mean; + }; + +/* T-TEST private data */ +struct t_test_proc +{ + /* Stats for the `universal group' */ + struct group_statistics ugs; + + /* Number of groups */ + int n_groups ; + + /* Stats for individual groups */ + struct group_statistics *gs; + + /* The levene statistic */ + double levene ; +}; + #endif diff --git a/src/t-test.q b/src/t-test.q index 69d658ae..3f802144 100644 --- a/src/t-test.q +++ b/src/t-test.q @@ -40,6 +40,7 @@ #include "hash.h" #include "stats.h" #include "t-test.h" +#include "levene.h" /* (specification) "T-TEST" (tts_): @@ -57,8 +58,6 @@ static struct cmd_t_test cmd; -int value_compare(const union value *a, const union value *b, int width); - static struct pool *t_test_pool ; @@ -67,15 +66,10 @@ static struct variable *groups; /* GROUPS: Number of values specified by the user; the values specified if any. */ + static int n_groups_values; static union value groups_values[2]; -/* Array of statistics for each group */ -typedef struct t_test_proc group_stats_t[2]; -static group_stats_t *groups_stats; - - - /* PAIRS: Number of pairs to be compared ; each pair. */ static int n_pairs = 0 ; @@ -281,10 +275,9 @@ cmd_t_test(void) break; case T_IND_SAMPLES: procedure(group_precalc,group_calc,group_postcalc, NULL); + levene(groups, cmd.n_variables, cmd.v_variables); break; - } - t_test_pool = pool_create (); @@ -293,9 +286,7 @@ cmd_t_test(void) ssbox_finalize(&stat_summary_box); if ( mode == T_PAIRED) - { pscbox(); - } trbox_create(&test_results_box,&cmd,mode); trbox_populate(&test_results_box,&cmd); @@ -309,6 +300,17 @@ cmd_t_test(void) n_pairs=0; free(pairs); pairs=0; + + + if ( mode == T_IND_SAMPLES) + { + int i; + /* Destroy any group statistics we created */ + for (i= 0 ; i < cmd.n_variables ; ++i ) + { + free(cmd.v_variables[i]->p.t_t.gs); + } + } return CMD_SUCCESS; } @@ -693,14 +695,13 @@ ssbox_independent_samples_populate(struct ssbox *ssb, /* Fill in the group statistics */ for ( g=0; g < 2 ; ++g ) { - struct t_test_proc *ttp = &groups_stats[i][g]; + struct group_statistics *gs = &cmd->v_variables[i]->p.t_t.gs[g]; - tab_float(ssb->t, 2 ,i*2+g+1, TAB_RIGHT, ttp->n, 2, 0); - tab_float(ssb->t, 3 ,i*2+g+1, TAB_RIGHT, ttp->mean, 8, 2); - tab_float(ssb->t, 4 ,i*2+g+1, TAB_RIGHT, ttp->std_dev, 8, 3); - tab_float(ssb->t, 5 ,i*2+g+1, TAB_RIGHT, ttp->se_mean, 8, 3); + tab_float(ssb->t, 2 ,i*2+g+1, TAB_RIGHT, gs->n, 2, 0); + tab_float(ssb->t, 3 ,i*2+g+1, TAB_RIGHT, gs->mean, 8, 2); + tab_float(ssb->t, 4 ,i*2+g+1, TAB_RIGHT, gs->std_dev, 8, 3); + tab_float(ssb->t, 5 ,i*2+g+1, TAB_RIGHT, gs->se_mean, 8, 3); } - } } @@ -745,19 +746,19 @@ ssbox_paired_populate(struct ssbox *ssb,struct cmd_t_test *cmd UNUSED) for (j=0 ; j < 2 ; ++j) { - struct t_test_proc *ttp; + struct group_statistics *gs; - ttp=&pairs[i].v[j]->p.t_t; + gs=&pairs[i].v[j]->p.t_t.ugs; /* Titles */ tab_text (ssb->t, 1, i*2+j+1, TAB_LEFT, pairs[i].v[j]->name); /* Values */ - tab_float (ssb->t,2, i*2+j+1, TAB_RIGHT, ttp->mean, 8, 2); - tab_float (ssb->t,3, i*2+j+1, TAB_RIGHT, ttp->n, 2, 0); - tab_float (ssb->t,4, i*2+j+1, TAB_RIGHT, ttp->std_dev, 8, 3); - tab_float (ssb->t,5, i*2+j+1, TAB_RIGHT, ttp->se_mean, 8, 3); + tab_float (ssb->t,2, i*2+j+1, TAB_RIGHT, gs->mean, 8, 2); + tab_float (ssb->t,3, i*2+j+1, TAB_RIGHT, gs->n, 2, 0); + tab_float (ssb->t,4, i*2+j+1, TAB_RIGHT, gs->std_dev, 8, 3); + tab_float (ssb->t,5, i*2+j+1, TAB_RIGHT, gs->se_mean, 8, 3); } @@ -775,14 +776,14 @@ ssbox_one_sample_populate(struct ssbox *ssb, struct cmd_t_test *cmd) for (i=0; i < cmd->n_variables; ++i) { - struct t_test_proc *ttp; - ttp= &cmd->v_variables[i]->p.t_t; + struct group_statistics *gs; + gs= &cmd->v_variables[i]->p.t_t.ugs; tab_text (ssb->t, 0, i+1, TAB_LEFT, cmd->v_variables[i]->name); - tab_float (ssb->t,1, i+1, TAB_RIGHT, ttp->n, 2, 0); - tab_float (ssb->t,2, i+1, TAB_RIGHT, ttp->mean, 8, 2); - tab_float (ssb->t,3, i+1, TAB_RIGHT, ttp->std_dev, 8, 2); - tab_float (ssb->t,4, i+1, TAB_RIGHT, ttp->se_mean, 8, 3); + tab_float (ssb->t,1, i+1, TAB_RIGHT, gs->n, 2, 0); + tab_float (ssb->t,2, i+1, TAB_RIGHT, gs->mean, 8, 2); + tab_float (ssb->t,3, i+1, TAB_RIGHT, gs->std_dev, 8, 2); + tab_float (ssb->t,4, i+1, TAB_RIGHT, gs->se_mean, 8, 3); } } @@ -907,30 +908,47 @@ trbox_independent_samples_populate(struct trbox *self, double t; double df; + double df1, df2; + double pooled_variance; double std_err_diff; double mean_diff; - struct t_test_proc *ttp0; - struct t_test_proc *ttp1; - ttp0=&groups_stats[i][0]; - ttp1=&groups_stats[i][1]; - + struct group_statistics *gs0 = &cmd->v_variables[i]->p.t_t.gs[0]; + struct group_statistics *gs1 = &cmd->v_variables[i]->p.t_t.gs[1]; tab_text (self->t, 0, i*2+3, TAB_LEFT, cmd->v_variables[i]->name); tab_text (self->t, 1, i*2+3, TAB_LEFT, _("Equal variances assumed")); - df = ttp0->n + ttp1->n - 2.0 ; + + tab_float(self->t, 2, i*2+3, TAB_CENTER, + cmd->v_variables[i]->p.t_t.levene, 8,3); + + + /* Now work out the significance of the Levene test */ + + which=1; df1 = 1; df2 = cmd->v_variables[i]->p.t_t.ugs.n - 2; + cdff(&which,&p,&q,&cmd->v_variables[i]->p.t_t.levene, + &df1,&df2,&status,&bound); + + if ( 0 != status ) + { + msg( SE, _("Error calculating F statistic (cdff returned %d)."),status); + } + + tab_float(self->t, 3, i*2+3, TAB_CENTER, q, 8,3 ); + + df = gs0->n + gs1->n - 2.0 ; tab_float (self->t, 5, i*2+3, TAB_RIGHT, df, 2, 0); - pooled_variance = ( (ttp0->n )*sqr(ttp0->s_std_dev) + pooled_variance = ( (gs0->n )*sqr(gs0->s_std_dev) + - (ttp1->n )*sqr(ttp1->s_std_dev) + (gs1->n )*sqr(gs1->s_std_dev) ) / df ; - t = (ttp0->mean - ttp1->mean) / sqrt(pooled_variance) ; - t /= sqrt((ttp0->n + ttp1->n)/(ttp0->n*ttp1->n)); + t = (gs0->mean - gs1->mean) / sqrt(pooled_variance) ; + t /= sqrt((gs0->n + gs1->n)/(gs0->n*gs1->n)); tab_float (self->t, 4, i*2+3, TAB_RIGHT, t, 8, 3); @@ -944,11 +962,11 @@ trbox_independent_samples_populate(struct trbox *self, tab_float(self->t, 6, i*2+3, TAB_RIGHT, 2.0*(t>0?q:p) , 8, 3); - mean_diff = ttp0->mean - ttp1->mean; + mean_diff = gs0->mean - gs1->mean; tab_float(self->t, 7, i*2+3, TAB_RIGHT, mean_diff, 8, 3); - std_err_diff = sqrt( sqr(ttp0->se_mean) + sqr(ttp1->se_mean)); + std_err_diff = sqrt( sqr(gs0->se_mean) + sqr(gs1->se_mean)); tab_float(self->t, 8, i*2+3, TAB_RIGHT, std_err_diff, 8, 3); @@ -976,19 +994,19 @@ trbox_independent_samples_populate(struct trbox *self, TAB_LEFT, _("Equal variances not assumed")); - se2 = (sqr(ttp0->s_std_dev)/(ttp0->n -1) ) + - (sqr(ttp1->s_std_dev)/(ttp1->n -1) ); + se2 = (sqr(gs0->s_std_dev)/(gs0->n -1) ) + + (sqr(gs1->s_std_dev)/(gs1->n -1) ); t = mean_diff / sqrt(se2) ; tab_float (self->t, 4, i*2+3+1, TAB_RIGHT, t, 8, 3); df = sqr(se2) / ( - (sqr(sqr(ttp0->s_std_dev)/(ttp0->n - 1 )) - /(ttp0->n -1 ) + (sqr(sqr(gs0->s_std_dev)/(gs0->n - 1 )) + /(gs0->n -1 ) ) + - (sqr(sqr(ttp1->s_std_dev)/(ttp1->n - 1 )) - /(ttp1->n -1 ) + (sqr(sqr(gs1->s_std_dev)/(gs1->n - 1 )) + /(gs1->n -1 ) ) ) ; tab_float (self->t, 5, i*2+3+1, TAB_RIGHT, df, 8, 3); @@ -1025,11 +1043,7 @@ trbox_independent_samples_populate(struct trbox *self, tab_float(self->t, 10, i*2+3+1, TAB_RIGHT, mean_diff + t * std_err_diff, 8, 3); - - - } - } } @@ -1086,10 +1100,10 @@ trbox_paired_populate(struct trbox *trb, struct variable *v0 = pairs[i].v[0]; struct variable *v1 = pairs[i].v[1]; - struct t_test_proc *ttp0 = &v0->p.t_t; - struct t_test_proc *ttp1 = &v1->p.t_t; + struct group_statistics *gs0 = &v0->p.t_t.ugs; + struct group_statistics *gs1 = &v1->p.t_t.ugs; - double n = ttp0->n; + double n = gs0->n; double t; double df = n - 1; @@ -1123,10 +1137,10 @@ trbox_paired_populate(struct trbox *trb, tab_float(trb->t, 6, i+3, TAB_RIGHT, pairs[i].mean_diff + t * se_mean , 8, 4); - t = ( ttp0->mean - ttp1->mean) + t = ( gs0->mean - gs1->mean) / sqrt ( - ( sqr(ttp0->s_std_dev) + sqr(ttp1->s_std_dev) - - 2 * pairs[i].correlation * ttp0->s_std_dev * ttp1->s_std_dev ) + ( sqr(gs0->s_std_dev) + sqr(gs1->s_std_dev) - + 2 * pairs[i].correlation * gs0->s_std_dev * gs1->s_std_dev ) / (n-1) ) ; @@ -1146,9 +1160,7 @@ trbox_paired_populate(struct trbox *trb, tab_float(trb->t, 9, i+3, TAB_RIGHT, 2.0*(t>0?q:p) , 8, 3); - } - } /* Initialize the one sample trbox */ @@ -1203,18 +1215,18 @@ trbox_one_sample_populate(struct trbox *trb, struct cmd_t_test *cmd) double df; int status; double bound; - struct t_test_proc *ttp; - ttp= &cmd->v_variables[i]->p.t_t; + struct group_statistics *gs; + gs= &cmd->v_variables[i]->p.t_t.ugs; tab_text (trb->t, 0, i+3, TAB_LEFT, cmd->v_variables[i]->name); - t = (ttp->mean - cmd->n_testval ) * sqrt(ttp->n) / ttp->std_dev ; + t = (gs->mean - cmd->n_testval ) * sqrt(gs->n) / gs->std_dev ; tab_float (trb->t, 1, i+3, TAB_RIGHT, t, 8,3); /* degrees of freedom */ - df = ttp->n - 1; + df = gs->n - 1; tab_float (trb->t, 2, i+3, TAB_RIGHT, df, 8,0); @@ -1230,7 +1242,7 @@ trbox_one_sample_populate(struct trbox *trb, struct cmd_t_test *cmd) the correct tail*/ tab_float (trb->t, 3, i+3, TAB_RIGHT, 2.0*(t>0?q:p), 8,3); - tab_float (trb->t, 4, i+3, TAB_RIGHT, ttp->mean_diff, 8,3); + tab_float (trb->t, 4, i+3, TAB_RIGHT, gs->mean_diff, 8,3); q = (1 - cmd->criteria)/2.0; /* 2-tailed test */ @@ -1243,10 +1255,10 @@ trbox_one_sample_populate(struct trbox *trb, struct cmd_t_test *cmd) } tab_float (trb->t, 5, i+3, TAB_RIGHT, - ttp->mean_diff - t * ttp->se_mean, 8,4); + gs->mean_diff - t * gs->se_mean, 8,4); tab_float (trb->t, 6, i+3, TAB_RIGHT, - ttp->mean_diff + t * ttp->se_mean, 8,4); + gs->mean_diff + t * gs->se_mean, 8,4); } } @@ -1306,7 +1318,7 @@ pscbox(void) int status; double bound; - double df = pairs[i].v[0]->p.t_t.n -2; + double df = pairs[i].v[0]->p.t_t.ugs.n -2; double correlation_t = pairs[i].correlation * sqrt(df) / @@ -1323,7 +1335,7 @@ pscbox(void) /* row data */ tab_float(table, 3, i+1, TAB_RIGHT, pairs[i].correlation, 8, 3); - tab_float(table, 2, i+1, TAB_RIGHT, pairs[i].v[0]->p.t_t.n , 4, 0); + tab_float(table, 2, i+1, TAB_RIGHT, pairs[i].v[0]->p.t_t.ugs.n , 4, 0); cdft(&which, &p, &q, &correlation_t, &df, &status, &bound); @@ -1355,17 +1367,17 @@ common_calc (struct ccase *c, void *aux UNUSED) for(i=0; i< cmd.n_variables ; ++i) { - struct t_test_proc *ttp; + struct group_statistics *gs; struct variable *v = cmd.v_variables[i]; union value *val = &c->data[v->fv]; - ttp= &cmd.v_variables[i]->p.t_t; + gs= &cmd.v_variables[i]->p.t_t.ugs; if (val->f != SYSMIS) { - ttp->n+=weight; - ttp->sum+=weight * val->f; - ttp->ssq+=weight * val->f * val->f; + gs->n+=weight; + gs->sum+=weight * val->f; + gs->ssq+=weight * val->f * val->f; } } return 0; @@ -1379,13 +1391,13 @@ common_precalc (void *aux UNUSED) for(i=0; i< cmd.n_variables ; ++i) { - struct t_test_proc *ttp; - ttp= &cmd.v_variables[i]->p.t_t; + struct group_statistics *gs; + gs= &cmd.v_variables[i]->p.t_t.ugs; - ttp->sum=0; - ttp->n=0; - ttp->ssq=0; - ttp->sum_diff=0; + gs->sum=0; + gs->n=0; + gs->ssq=0; + gs->sum_diff=0; } } @@ -1397,21 +1409,21 @@ common_postcalc (void *aux UNUSED) for(i=0; i< cmd.n_variables ; ++i) { - struct t_test_proc *ttp; - ttp= &cmd.v_variables[i]->p.t_t; + struct group_statistics *gs; + gs= &cmd.v_variables[i]->p.t_t.ugs; - ttp->mean=ttp->sum / ttp->n; - ttp->s_std_dev= sqrt( - ( (ttp->ssq / ttp->n ) - ttp->mean * ttp->mean ) + gs->mean=gs->sum / gs->n; + gs->s_std_dev= sqrt( + ( (gs->ssq / gs->n ) - gs->mean * gs->mean ) ) ; - ttp->std_dev= sqrt( - ttp->n/(ttp->n-1) * - ( (ttp->ssq / ttp->n ) - ttp->mean * ttp->mean ) + gs->std_dev= sqrt( + gs->n/(gs->n-1) * + ( (gs->ssq / gs->n ) - gs->mean * gs->mean ) ) ; - ttp->se_mean = ttp->std_dev / sqrt(ttp->n); - ttp->mean_diff= ttp->sum_diff / ttp->n; + gs->se_mean = gs->std_dev / sqrt(gs->n); + gs->mean_diff= gs->sum_diff / gs->n; } } @@ -1425,14 +1437,14 @@ one_sample_calc (struct ccase *c, void *aux UNUSED) for(i=0; i< cmd.n_variables ; ++i) { - struct t_test_proc *ttp; + struct group_statistics *gs; struct variable *v = cmd.v_variables[i]; union value *val = &c->data[v->fv]; - ttp= &cmd.v_variables[i]->p.t_t; + gs= &cmd.v_variables[i]->p.t_t.ugs; if (val->f != SYSMIS) - ttp->sum_diff += weight * (val->f - cmd.n_testval); + gs->sum_diff += weight * (val->f - cmd.n_testval); } return 0; @@ -1446,10 +1458,10 @@ one_sample_precalc (void *aux UNUSED) for(i=0; i< cmd.n_variables ; ++i) { - struct t_test_proc *ttp; - ttp= &cmd.v_variables[i]->p.t_t; + struct group_statistics *gs; + gs= &cmd.v_variables[i]->p.t_t.ugs; - ttp->sum_diff=0; + gs->sum_diff=0; } } @@ -1461,11 +1473,11 @@ one_sample_postcalc (void *aux UNUSED) for(i=0; i< cmd.n_variables ; ++i) { - struct t_test_proc *ttp; - ttp= &cmd.v_variables[i]->p.t_t; + struct group_statistics *gs; + gs= &cmd.v_variables[i]->p.t_t.ugs; - ttp->mean_diff = ttp->sum_diff / ttp->n ; + gs->mean_diff = gs->sum_diff / gs->n ; } } @@ -1489,6 +1501,7 @@ hash_var_name (const void *a_, void *v_ UNUSED) } + static void paired_precalc (void *aux UNUSED) { @@ -1503,6 +1516,7 @@ paired_precalc (void *aux UNUSED) } + static int paired_calc (struct ccase *c, void *aux UNUSED) { @@ -1516,16 +1530,15 @@ paired_calc (struct ccase *c, void *aux UNUSED) union value *val0 = &c->data[v0->fv]; union value *val1 = &c->data[v1->fv]; - pairs[i].correlation += ( val0->f - pairs[i].v[0]->p.t_t.mean ) + pairs[i].correlation += ( val0->f - pairs[i].v[0]->p.t_t.ugs.mean ) * - ( val1->f - pairs[i].v[1]->p.t_t.mean ); + ( val1->f - pairs[i].v[1]->p.t_t.ugs.mean ); pairs[i].sum_of_diffs += val0->f - val1->f ; pairs[i].ssq_diffs += sqr(val0->f - val1->f); } - return 0; } @@ -1536,11 +1549,11 @@ paired_postcalc (void *aux UNUSED) for(i=0; i < n_pairs ; ++i ) { - const double n = pairs[i].v[0]->p.t_t.n ; + const double n = pairs[i].v[0]->p.t_t.ugs.n ; - pairs[i].correlation /= pairs[i].v[0]->p.t_t.std_dev * - pairs[i].v[1]->p.t_t.std_dev ; - pairs[i].correlation /= pairs[i].v[0]->p.t_t.n -1; + pairs[i].correlation /= pairs[i].v[0]->p.t_t.ugs.std_dev * + pairs[i].v[1]->p.t_t.ugs.std_dev ; + pairs[i].correlation /= pairs[i].v[0]->p.t_t.ugs.n -1; pairs[i].mean_diff = pairs[i].sum_of_diffs / n ; @@ -1551,28 +1564,15 @@ paired_postcalc (void *aux UNUSED) - sqr(pairs[i].mean_diff ) ) ); - } } - -/* Compare two (union value)s */ -int -value_compare(const union value *a, const union value *b, int width) -{ - if (width == 0) - return (a->f < b->f) ? -1 : ( a->f > b->f ) ; - else - return memcmp (a->s, b->s, width); -} - - static int get_group(const union value *val, struct variable *var) { - if ( 0 == value_compare(val,&groups_values[0],var->width) ) + if ( 0 == compare_values(val,&groups_values[0],var->width) ) return 0; - else if (0 == value_compare(val,&groups_values[1],var->width) ) + else if (0 == compare_values(val,&groups_values[1],var->width) ) return 1; /* Never reached */ @@ -1587,15 +1587,20 @@ group_precalc (void *aux UNUSED) int i; int j; - groups_stats = xmalloc(sizeof(group_stats_t) * cmd.n_variables); - for(i=0; i< cmd.n_variables ; ++i) { + struct t_test_proc *ttpr = &cmd.v_variables[i]->p.t_t; + + /* There's always 2 groups for a T - TEST */ + ttpr->n_groups = 2; + ttpr->gs = xmalloc(sizeof(struct group_statistics) * 2) ; + for (j=0 ; j < 2 ; ++j) { - groups_stats[i][j].sum=0; - groups_stats[i][j].n=0; - groups_stats[i][j].ssq=0; + ttpr->gs[j].sum=0; + ttpr->gs[j].n=0; + ttpr->gs[j].ssq=0; + ttpr->gs[j].id = groups_values[j]; } } @@ -1614,17 +1619,20 @@ group_calc (struct ccase *c, void *aux UNUSED) for(i=0; i< cmd.n_variables ; ++i) { int g = get_group(gv,groups); - struct t_test_proc *ttp=&groups_stats[i][g]; + + struct group_statistics *gs = &cmd.v_variables[i]->p.t_t.gs[g]; + union value *val=&c->data[cmd.v_variables[i]->fv]; - ttp->n+=weight; - ttp->sum+=weight * val->f; - ttp->ssq+=weight * sqr(val->f); + gs->n+=weight; + gs->sum+=weight * val->f; + gs->ssq+=weight * sqr(val->f); } return 0; } + static void group_postcalc (void *aux UNUSED) { @@ -1635,22 +1643,22 @@ group_postcalc (void *aux UNUSED) { for (j=0 ; j < 2 ; ++j) { - struct t_test_proc *ttp; - ttp=&groups_stats[i][j]; + struct group_statistics *gs; + gs=&cmd.v_variables[i]->p.t_t.gs[j]; - ttp->mean = ttp->sum / ttp->n; + gs->mean = gs->sum / gs->n; - ttp->s_std_dev= sqrt( - ( (ttp->ssq / ttp->n ) - ttp->mean * ttp->mean ) + gs->s_std_dev= sqrt( + ( (gs->ssq / gs->n ) - gs->mean * gs->mean ) ) ; - ttp->std_dev= sqrt( - ttp->n/(ttp->n-1) * - ( (ttp->ssq / ttp->n ) - ttp->mean * ttp->mean ) + gs->std_dev= sqrt( + gs->n/(gs->n-1) * + ( (gs->ssq / gs->n ) - gs->mean * gs->mean ) ) ; - ttp->se_mean = ttp->std_dev / sqrt(ttp->n); + gs->se_mean = gs->std_dev / sqrt(gs->n); } - } } + diff --git a/src/val.h b/src/val.h new file mode 100644 index 00000000..3b42a83b --- /dev/null +++ b/src/val.h @@ -0,0 +1,72 @@ +/* PSPP - computes sample statistics. + Copyright (C) 1997-9, 2000 Free Software Foundation, Inc. + Written by Ben Pfaff . + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + +#if !val_h +#define val_h 1 + + +/* Values. */ + +/* Max length of a short string value, generally 8 chars. */ +#define MAX_SHORT_STRING ((SIZEOF_DOUBLE)>=8 ? ((SIZEOF_DOUBLE)+1)/2*2 : 8) +#define MIN_LONG_STRING (MAX_SHORT_STRING+1) + +/* Max string length. */ +#define MAX_STRING 255 + +/* FYI: It is a bad situation if sizeof(flt64) < MAX_SHORT_STRING: + then short string missing values can be truncated in system files + because there's only room for as many characters as can fit in a + flt64. */ +#if MAX_SHORT_STRING > 8 +#error MAX_SHORT_STRING must be less than 8. +#endif + +/* Special values. */ +#define SYSMIS (-DBL_MAX) +#define LOWEST second_lowest_value +#define HIGHEST DBL_MAX + +/* Describes one value, which is either a floating-point number or a + short string. */ +union value + { + /* A numeric value. */ + double f; + + /* A short-string value. */ + unsigned char s[MAX_SHORT_STRING]; + + /* Used by evaluate_expression() to return a string result. + As currently implemented, it's a pointer to a dynamic + buffer in the appropriate expression. + + Also used by the AGGREGATE procedure in handling string + values. */ + unsigned char *c; + }; + +/* Maximum number of `union value's in a single number or string + value. */ +#define MAX_ELEMS_PER_VALUE (MAX_STRING / sizeof (union value) + 1) + +int compare_values (const union value *a, const union value *b, int width); + + +#endif /* !val_h */ diff --git a/src/var.h b/src/var.h index fc9827d9..277bfde8 100644 --- a/src/var.h +++ b/src/var.h @@ -23,54 +23,8 @@ #include #include "format.h" #include "t-test.h" +#include "val.h" -/* Values. */ - -/* Max length of a short string value, generally 8 chars. */ -#define MAX_SHORT_STRING ((SIZEOF_DOUBLE)>=8 ? ((SIZEOF_DOUBLE)+1)/2*2 : 8) -#define MIN_LONG_STRING (MAX_SHORT_STRING+1) - -/* Max string length. */ -#define MAX_STRING 255 - -/* FYI: It is a bad situation if sizeof(flt64) < MAX_SHORT_STRING: - then short string missing values can be truncated in system files - because there's only room for as many characters as can fit in a - flt64. */ -#if MAX_SHORT_STRING > 8 -#error MAX_SHORT_STRING must be less than 8. -#endif - -/* Special values. */ -#define SYSMIS (-DBL_MAX) -#define LOWEST second_lowest_value -#define HIGHEST DBL_MAX - -/* Describes one value, which is either a floating-point number or a - short string. */ -union value - { - /* A numeric value. */ - double f; - - /* A short-string value. */ - unsigned char s[MAX_SHORT_STRING]; - - /* Used by evaluate_expression() to return a string result. - As currently implemented, it's a pointer to a dynamic - buffer in the appropriate expression. - - Also used by the AGGREGATE procedure in handling string - values. */ - unsigned char *c; - }; - -/* Maximum number of `union value's in a single number or string - value. */ -#define MAX_ELEMS_PER_VALUE (MAX_STRING / sizeof (union value) + 1) - -int compare_values (union value *a, union value *b, int width); - /* Frequency tables. */ /* Frequency table entry. */ diff --git a/src/vars-atr.c b/src/vars-atr.c index f90dc1c9..7efc5390 100644 --- a/src/vars-atr.c +++ b/src/vars-atr.c @@ -38,7 +38,7 @@ /* Compares A and B, which both have the given WIDTH, and returns a strcmp()-type result. */ int -compare_values (union value *a, union value *b, int width) +compare_values (const union value *a, const union value *b, int width) { if (width == 0) return a->f < b->f ? -1 : a->f > b->f; diff --git a/tests/command/t-test-groups.sh b/tests/command/t-test-groups.sh index 9c5d9108..a8dfdd6c 100755 --- a/tests/command/t-test-groups.sh +++ b/tests/command/t-test-groups.sh @@ -93,18 +93,18 @@ diff -B -b $TEMPDIR/pspp.list - <