work on CTABLES
[pspp] / doc / language.texi
1 @c PSPP - a program for statistical analysis.
2 @c Copyright (C) 2017, 2020 Free Software Foundation, Inc.
3 @c Permission is granted to copy, distribute and/or modify this document
4 @c under the terms of the GNU Free Documentation License, Version 1.3
5 @c or any later version published by the Free Software Foundation;
6 @c with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
7 @c A copy of the license is included in the section entitled "GNU
8 @c Free Documentation License".
9 @c
10 @node Language
11 @chapter The @pspp{} language
12 @cindex language, @pspp{}
13 @cindex @pspp{}, language
14
15 This chapter discusses elements common to many @pspp{} commands.
16 Later chapters describe individual commands in detail.
17
18 @menu
19 * Tokens::                      Characters combine to form tokens.
20 * Commands::                    Tokens combine to form commands.
21 * Syntax Variants::             Batch vs. Interactive mode
22 * Types of Commands::           Commands come in several flavors.
23 * Order of Commands::           Commands combine to form syntax files.
24 * Missing Observations::        Handling missing observations.
25 * Datasets::                    Data organization.
26 * Files::                       Files used by @pspp{}.
27 * File Handles::                How files are named.
28 * BNF::                         How command syntax is described.
29 @end menu
30
31
32 @node Tokens
33 @section Tokens
34 @cindex language, lexical analysis
35 @cindex language, tokens
36 @cindex tokens
37 @cindex lexical analysis
38
39 @pspp{} divides most syntax file lines into series of short chunks
40 called @dfn{tokens}.
41 Tokens are then grouped to form commands, each of which tells
42 @pspp{} to take some action---read in data, write out data, perform
43 a statistical procedure, etc.  Each type of token is
44 described below.
45
46 @table @strong
47 @cindex identifiers
48 @item Identifiers
49 Identifiers are names that typically specify variables, commands, or
50 subcommands.  The first character in an identifier must be a letter,
51 @samp{#}, or @samp{@@}.  The remaining characters in the identifier
52 must be letters, digits, or one of the following special characters:
53
54 @example
55 @center @.  _  $  #  @@
56 @end example
57
58 @cindex case-sensitivity
59 Identifiers may be any length, but only the first 64 bytes are
60 significant.  Identifiers are not case-sensitive: @code{foobar},
61 @code{Foobar}, @code{FooBar}, @code{FOOBAR}, and @code{FoObaR} are
62 different representations of the same identifier.
63
64 @cindex identifiers, reserved
65 @cindex reserved identifiers
66 Some identifiers are reserved.  Reserved identifiers may not be used
67 in any context besides those explicitly described in this manual.  The
68 reserved identifiers are:
69
70 @example
71 @center ALL  AND  BY  EQ  GE  GT  LE  LT  NE  NOT  OR  TO  WITH
72 @end example
73
74 @item Keywords
75 Keywords are a subclass of identifiers that form a fixed part of
76 command syntax.  For example, command and subcommand names are
77 keywords.  Keywords may be abbreviated to their first 3 characters if
78 this abbreviation is unambiguous.  (Unique abbreviations of 3 or more
79 characters are also accepted: @samp{FRE}, @samp{FREQ}, and
80 @samp{FREQUENCIES} are equivalent when the last is a keyword.)
81
82 Reserved identifiers are always used as keywords.  Other identifiers
83 may be used both as keywords and as user-defined identifiers, such as
84 variable names.
85
86 @item Numbers
87 @cindex numbers
88 @cindex integers
89 @cindex reals
90 Numbers are expressed in decimal.  A decimal point is optional.
91 Numbers may be expressed in scientific notation by adding @samp{e} and
92 a base-10 exponent, so that @samp{1.234e3} has the value 1234.  Here
93 are some more examples of valid numbers:
94
95 @example
96 -5  3.14159265359  1e100  -.707  8945.
97 @end example
98
99 Negative numbers are expressed with a @samp{-} prefix.  However, in
100 situations where a literal @samp{-} token is expected, what appears to
101 be a negative number is treated as @samp{-} followed by a positive
102 number.
103
104 No white space is allowed within a number token, except for horizontal
105 white space between @samp{-} and the rest of the number.
106
107 The last example above, @samp{8945.} is interpreted as two
108 tokens, @samp{8945} and @samp{.}, if it is the last token on a line.
109 @xref{Commands, , Forming commands of tokens}.
110
111 @item Strings
112 @cindex strings
113 @cindex @samp{'}
114 @cindex @samp{"}
115 @cindex case-sensitivity
116 Strings are literal sequences of characters enclosed in pairs of
117 single quotes (@samp{'}) or double quotes (@samp{"}).  To include the
118 character used for quoting in the string, double it, @i{e.g.}@:
119 @samp{'it''s an apostrophe'}.  White space and case of letters are
120 significant inside strings.
121
122 Strings can be concatenated using @samp{+}, so that @samp{"a" + 'b' +
123 'c'} is equivalent to @samp{'abc'}.  So that a long string may be
124 broken across lines, a line break may precede or follow, or both
125 precede and follow, the @samp{+}.  (However, an entirely blank line
126 preceding or following the @samp{+} is interpreted as ending the
127 current command.)
128
129 Strings may also be expressed as hexadecimal character values by
130 prefixing the initial quote character by @samp{x} or @samp{X}.
131 Regardless of the syntax file or active dataset's encoding, the
132 hexadecimal digits in the string are interpreted as Unicode characters
133 in UTF-8 encoding.
134
135 Individual Unicode code points may also be expressed by specifying the
136 hexadecimal code point number in single or double quotes preceded by
137 @samp{u} or @samp{U}.  For example, Unicode code point U+1D11E, the
138 musical G clef character, could be expressed as @code{U'1D11E'}.
139 Invalid Unicode code points (above U+10FFFF or in between U+D800 and
140 U+DFFF) are not allowed.
141
142 When strings are concatenated with @samp{+}, each segment's prefix is
143 considered individually.  For example, @code{'The G clef symbol is:' +
144 u"1d11e" + "."} inserts a G clef symbol in the middle of an otherwise
145 plain text string.
146
147 @item Punctuators and Operators
148 @cindex punctuators
149 @cindex operators
150 These tokens are the punctuators and operators:
151
152 @example
153 @center ,  /  =  (  )  +  -  *  /  **  <  <=  <>  >  >=  ~=  &  |  .
154 @end example
155
156 Most of these appear within the syntax of commands, but the period
157 (@samp{.}) punctuator is used only at the end of a command.  It is a
158 punctuator only as the last character on a line (except white space).
159 When it is the last non-space character on a line, a period is not
160 treated as part of another token, even if it would otherwise be part
161 of, @i{e.g.}@:, an identifier or a floating-point number.
162 @end table
163
164 @node Commands
165 @section Forming commands of tokens
166
167 @cindex @pspp{}, command structure
168 @cindex language, command structure
169 @cindex commands, structure
170
171 Most @pspp{} commands share a common structure.  A command begins with a
172 command name, such as @cmd{FREQUENCIES}, @cmd{DATA LIST}, or @cmd{N OF
173 CASES}.  The command name may be abbreviated to its first word, and
174 each word in the command name may be abbreviated to its first three
175 or more characters, where these abbreviations are unambiguous.
176
177 The command name may be followed by one or more @dfn{subcommands}.
178 Each subcommand begins with a subcommand name, which may be
179 abbreviated to its first three letters.  Some subcommands accept a
180 series of one or more specifications, which follow the subcommand
181 name, optionally separated from it by an equals sign
182 (@samp{=}). Specifications may be separated from each other
183 by commas or spaces.  Each subcommand must be separated from the next (if any)
184 by a forward slash (@samp{/}).
185
186 There are multiple ways to mark the end of a command.  The most common
187 way is to end the last line of the command with a period (@samp{.}) as
188 described in the previous section (@pxref{Tokens}).  A blank line, or
189 one that consists only of white space or comments, also ends a command.
190
191 @node Syntax Variants
192 @section Syntax Variants
193
194 @cindex Batch syntax
195 @cindex Interactive syntax
196
197 There are three variants of command syntax, which vary only in how
198 they detect the end of one command and the start of the next.
199
200 In @dfn{interactive mode}, which is the default for syntax typed at a
201 command prompt, a period as the last non-blank character on a line
202 ends a command.  A blank line also ends a command.
203
204 In @dfn{batch mode}, an end-of-line period or a blank line also ends a
205 command.  Additionally, it treats any line that has a non-blank
206 character in the leftmost column as beginning a new command.  Thus, in
207 batch mode the second and subsequent lines in a command must be
208 indented.
209
210 Regardless of the syntax mode, a plus sign, minus sign, or period in
211 the leftmost column of a line is ignored and causes that line to begin
212 a new command.  This is most useful in batch mode, in which the first
213 line of a new command could not otherwise be indented, but it is
214 accepted regardless of syntax mode.
215
216 The default mode for reading commands from a file is @dfn{auto mode}.
217 It is the same as batch mode, except that a line with a non-blank in
218 the leftmost column only starts a new command if that line begins with
219 the name of a @pspp{} command.  This correctly interprets most valid @pspp{}
220 syntax files regardless of the syntax mode for which they are
221 intended.
222
223 The @option{--interactive} (or @option{-i}) or @option{--batch} (or
224 @option{-b}) options set the syntax mode for files listed on the @pspp{}
225 command line.  @xref{Main Options}, for more details.
226
227 @node Types of Commands
228 @section Types of Commands
229
230 Commands in @pspp{} are divided roughly into six categories:
231
232 @table @strong
233 @item Utility commands
234 @cindex utility commands
235 Set or display various global options that affect @pspp{} operations.
236 May appear anywhere in a syntax file.  @xref{Utilities, , Utility
237 commands}.
238
239 @item File definition commands
240 @cindex file definition commands
241 Give instructions for reading data from text files or from special
242 binary ``system files''.  Most of these commands replace any previous
243 data or variables with new data or
244 variables.  At least one file definition command must appear before the first command in any of
245 the categories below.  @xref{Data Input and Output}.
246
247 @item Input program commands
248 @cindex input program commands
249 Though rarely used, these provide tools for reading data files
250 in arbitrary textual or binary formats.  @xref{INPUT PROGRAM}.
251
252 @item Transformations
253 @cindex transformations
254 Perform operations on data and write data to output files.  Transformations
255 are not carried out until a procedure is executed.
256
257 @item Restricted transformations
258 @cindex restricted transformations
259 Transformations that cannot appear in certain contexts.  @xref{Order
260 of Commands}, for details.
261
262 @item Procedures
263 @cindex procedures
264 Analyze data, writing results of analyses to the listing file.  Cause
265 transformations specified earlier in the file to be performed.  In a
266 more general sense, a @dfn{procedure} is any command that causes the
267 active dataset (the data) to be read.
268 @end table
269
270 @node Order of Commands
271 @section Order of Commands
272 @cindex commands, ordering
273 @cindex order of commands
274
275 @pspp{} does not place many restrictions on ordering of commands.  The
276 main restriction is that variables must be defined before they are otherwise
277 referenced.  This section describes the details of command ordering,
278 but most users will have no need to refer to them.
279
280 @pspp{} possesses five internal states, called @dfn{initial}, @dfn{input-program}
281 @dfn{file-type}, @dfn{transformation}, and @dfn{procedure} states.  (Please note the
282 distinction between the @cmd{INPUT PROGRAM} and @cmd{FILE TYPE}
283 @emph{commands} and the @dfn{input-program} and @dfn{file-type} @emph{states}.)
284
285 @pspp{} starts in the initial state.  Each successful completion
286 of a command may cause a state transition.  Each type of command has its
287 own rules for state transitions:
288
289 @table @strong
290 @item Utility commands
291 @itemize @bullet
292 @item
293 Valid in any state.
294 @item
295 Do not cause state transitions.  Exception: when @cmd{N OF CASES}
296 is executed in the procedure state, it causes a transition to the
297 transformation state.
298 @end itemize
299
300 @item @cmd{DATA LIST}
301 @itemize @bullet
302 @item
303 Valid in any state.
304 @item
305 When executed in the initial or procedure state, causes a transition to
306 the transformation state.
307 @item
308 Clears the active dataset if executed in the procedure or transformation
309 state.
310 @end itemize
311
312 @item @cmd{INPUT PROGRAM}
313 @itemize @bullet
314 @item
315 Invalid in input-program and file-type states.
316 @item
317 Causes a transition to the intput-program state.
318 @item
319 Clears the active dataset.
320 @end itemize
321
322 @item @cmd{FILE TYPE}
323 @itemize @bullet
324 @item
325 Invalid in intput-program and file-type states.
326 @item
327 Causes a transition to the file-type state.
328 @item
329 Clears the active dataset.
330 @end itemize
331
332 @item Other file definition commands
333 @itemize @bullet
334 @item
335 Invalid in input-program and file-type states.
336 @item
337 Cause a transition to the transformation state.
338 @item
339 Clear the active dataset, except for @cmd{ADD FILES}, @cmd{MATCH FILES},
340 and @cmd{UPDATE}.
341 @end itemize
342
343 @item Transformations
344 @itemize @bullet
345 @item
346 Invalid in initial and file-type states.
347 @item
348 Cause a transition to the transformation state.
349 @end itemize
350
351 @item Restricted transformations
352 @itemize @bullet
353 @item
354 Invalid in initial, input-program, and file-type states.
355 @item
356 Cause a transition to the transformation state.
357 @end itemize
358
359 @item Procedures
360 @itemize @bullet
361 @item
362 Invalid in initial, input-program, and file-type states.
363 @item
364 Cause a transition to the procedure state.
365 @end itemize
366 @end table
367
368 @node Missing Observations
369 @section Handling missing observations
370 @cindex missing values
371 @cindex values, missing
372
373 @pspp{} includes special support for unknown numeric data values.
374 Missing observations are assigned a special value, called the
375 @dfn{system-missing value}.  This ``value'' actually indicates the
376 absence of a value; it means that the actual value is unknown.  Procedures
377 automatically exclude from analyses those observations or cases that
378 have missing values.  Details of missing value exclusion depend on the
379 procedure and can often be controlled by the user; refer to
380 descriptions of individual procedures for details.
381
382 The system-missing value exists only for numeric variables.  String
383 variables always have a defined value, even if it is only a string of
384 spaces.
385
386 Variables, whether numeric or string, can have designated
387 @dfn{user-missing values}.  Every user-missing value is an actual value
388 for that variable.  However, most of the time user-missing values are
389 treated in the same way as the system-missing value.
390
391 For more information on missing values, see the following sections:
392 @ref{Datasets}, @ref{MISSING VALUES}, @ref{Expressions}.  See also the
393 documentation on individual procedures for information on how they
394 handle missing values.
395
396 @node Datasets
397 @section Datasets
398 @cindex dataset
399 @cindex variable
400 @cindex dictionary
401
402 @pspp{} works with data organized into @dfn{datasets}.  A dataset
403 consists of a set of @dfn{variables}, which taken together are said to
404 form a @dfn{dictionary}, and one or more @dfn{cases}, each of which
405 has one value for each variable.
406
407 At any given time @pspp{} has exactly one distinguished dataset, called
408 the @dfn{active dataset}.  Most @pspp{} commands work only with the
409 active dataset.  In addition to the active dataset, @pspp{} also supports
410 any number of additional open datasets.  The @cmd{DATASET} commands
411 can choose a new active dataset from among those that are open, as
412 well as create and destroy datasets (@pxref{DATASET}).
413
414 The sections below describe variables in more detail.
415
416 @menu
417 * Attributes::                  Attributes of variables.
418 * System Variables::            Variables automatically defined by @pspp{}.
419 * Sets of Variables::           Lists of variable names.
420 * Input and Output Formats::    Input and output formats.
421 * Scratch Variables::           Variables deleted by procedures.
422 @end menu
423
424 @node Attributes
425 @subsection Attributes of Variables
426 @cindex variables, attributes of
427 @cindex attributes of variables
428 Each variable has a number of attributes, including:
429
430 @table @strong
431 @item Name
432 An identifier, up to 64 bytes long.  Each variable must have a different name.
433 @xref{Tokens}.
434
435 Some system variable names begin with @samp{$}, but user-defined
436 variables' names may not begin with @samp{$}.
437
438 @cindex @samp{.}
439 @cindex period
440 @cindex variable names, ending with period
441 The final character in a variable name should not be @samp{.}, because
442 such an identifier will be misinterpreted when it is the final token
443 on a line: @code{FOO.} is divided into two separate tokens,
444 @samp{FOO} and @samp{.}, indicating end-of-command.  @xref{Tokens}.
445
446 @cindex @samp{_}
447 The final character in a variable name should not be @samp{_}, because
448 some such identifiers are used for special purposes by @pspp{}
449 procedures.
450
451 As with all @pspp{} identifiers, variable names are not case-sensitive.
452 @pspp{} capitalizes variable names on output the same way they were
453 capitalized at their point of definition in the input.
454
455 @cindex variables, type
456 @cindex type of variables
457 @item Type
458 Numeric or string.
459
460 @cindex variables, width
461 @cindex width of variables
462 @item Width
463 (string variables only) String variables with a width of 8 characters or
464 fewer are called @dfn{short string variables}.  Short string variables
465 may be used in a few contexts where @dfn{long string variables} (those
466 with widths greater than 8) are not allowed.
467
468 @item Position
469 Variables in the dictionary are arranged in a specific order.
470 @cmd{DISPLAY} can be used to show this order: see @ref{DISPLAY}.
471
472 @item Initialization
473 Either reinitialized to 0 or spaces for each case, or left at its
474 existing value.  @xref{LEAVE}.
475
476 @cindex missing values
477 @cindex values, missing
478 @item Missing values
479 Optionally, up to three values, or a range of values, or a specific
480 value plus a range, can be specified as @dfn{user-missing values}.
481 There is also a @dfn{system-missing value} that is assigned to an
482 observation when there is no other obvious value for that observation.
483 Observations with missing values are automatically excluded from
484 analyses.  User-missing values are actual data values, while the
485 system-missing value is not a value at all.  @xref{Missing Observations}.
486
487 @cindex variable labels
488 @cindex labels, variable
489 @item Variable label
490 A string that describes the variable.  @xref{VARIABLE LABELS}.
491
492 @cindex value labels
493 @cindex labels, value
494 @item Value label
495 Optionally, these associate each possible value of the variable with a
496 string.  @xref{VALUE LABELS}.
497
498 @cindex print format
499 @item Print format
500 Display width, format, and (for numeric variables) number of decimal
501 places.  This attribute does not affect how data are stored, just how
502 they are displayed.  Example: a width of 8, with 2 decimal places.
503 @xref{Input and Output Formats}.
504
505 @cindex write format
506 @item Write format
507 Similar to print format, but used by the @cmd{WRITE} command
508 (@pxref{WRITE}).
509
510 @cindex measurement level
511 @item Measurement level
512 One of the following:
513
514 @table @asis
515 @item Nominal
516 Each value of a nominal variable represents a distinct category.  The
517 possible categories are finite and often have value labels.  The order
518 of categories is not significant.  Political parties, US states, and
519 yes/no choices are nominal.  Numeric and string variables can be
520 nominal.
521
522 @item Ordinal
523 Ordinal variables also represent distinct categories, but their values
524 are arranged according to some natural order.  Likert scales, e.g.@:
525 from strongly disagree to strongly agree, are ordinal.  Data grouped
526 into ranges, e.g.@: age groups or income groups, are ordinal.  Both
527 numeric and string variables can be ordinal.  String values are
528 ordered alphabetically, so letter grades from A to F will work as
529 expected, but @code{poor}, @code{satisfactory}, @code{excellent} will
530 not.
531
532 @item Scale
533 Scale variables are ones for which differences and ratios are
534 meaningful.  These are often values which have a natural unit
535 attached, such as age in years, income in dollars, or distance in
536 miles.  Only numeric variables are scalar.
537 @end table
538
539 @cindex custom attributes
540 @item Custom attributes
541 User-defined associations between names and values.  @xref{VARIABLE
542 ATTRIBUTE}.
543
544 @cindex variable role
545 @item Role
546 The intended role of a variable for use in dialog boxes in graphical
547 user interfaces.  @xref{VARIABLE ROLE}.
548 @end table
549
550 @node System Variables
551 @subsection Variables Automatically Defined by @pspp{}
552 @cindex system variables
553 @cindex variables, system
554
555 There are seven system variables.  These are not like ordinary
556 variables because system variables are not always stored.  They can be used only
557 in expressions.  These system variables, whose values and output formats
558 cannot be modified, are described below.
559
560 @table @code
561 @cindex @code{$CASENUM}
562 @item $CASENUM
563 Case number of the case at the moment.  This changes as cases are
564 shuffled around.
565
566 @cindex @code{$DATE}
567 @item $DATE
568 Date the @pspp{} process was started, in format A9, following the
569 pattern @code{DD-MMM-YY}.
570
571 @cindex @code{$DATE11}
572 @item $DATE11
573 Date the @pspp{} process was started, in format A11, following the
574 pattern @code{DD-MMM-YYYY}.
575
576 @cindex @code{$JDATE}
577 @item $JDATE
578 Number of days between 15 Oct 1582 and the time the @pspp{} process
579 was started.
580
581 @cindex @code{$LENGTH}
582 @item $LENGTH
583 Page length, in lines, in format F11.
584
585 @cindex @code{$SYSMIS}
586 @item $SYSMIS
587 System missing value, in format F1.
588
589 @cindex @code{$TIME}
590 @item $TIME
591 Number of seconds between midnight 14 Oct 1582 and the time the active dataset
592 was read, in format F20.
593
594 @cindex @code{$WIDTH}
595 @item $WIDTH
596 Page width, in characters, in format F3.
597 @end table
598
599 @node Sets of Variables
600 @subsection Lists of variable names
601 @cindex @code{TO} convention
602 @cindex convention, @code{TO}
603
604 To refer to a set of variables, list their names one after another.
605 Optionally, their names may be separated by commas.  To include a
606 range of variables from the dictionary in the list, write the name of
607 the first and last variable in the range, separated by @code{TO}.  For
608 instance, if the dictionary contains six variables with the names
609 @code{ID}, @code{X1}, @code{X2}, @code{GOAL}, @code{MET}, and
610 @code{NEXTGOAL}, in that order, then @code{X2 TO MET} would include
611 variables @code{X2}, @code{GOAL}, and @code{MET}.
612
613 Commands that define variables, such as @cmd{DATA LIST}, give
614 @code{TO} an alternate meaning.  With these commands, @code{TO} define
615 sequences of variables whose names end in consecutive integers.  The
616 syntax is two identifiers that begin with the same root and end with
617 numbers, separated by @code{TO}.  The syntax @code{X1 TO X5} defines 5
618 variables, named @code{X1}, @code{X2}, @code{X3}, @code{X4}, and
619 @code{X5}.  The syntax @code{ITEM0008 TO ITEM0013} defines 6
620 variables, named @code{ITEM0008}, @code{ITEM0009}, @code{ITEM0010},
621 @code{ITEM0011}, @code{ITEM0012}, and @code{ITEM00013}.  The syntaxes
622 @code{QUES001 TO QUES9} and @code{QUES6 TO QUES3} are invalid.
623
624 After a set of variables has been defined with @cmd{DATA LIST} or
625 another command with this method, the same set can be referenced on
626 later commands using the same syntax.
627
628 @node Input and Output Formats
629 @subsection Input and Output Formats
630
631 @cindex formats
632 An @dfn{input format} describes how to interpret the contents of an
633 input field as a number or a string.  It might specify that the field
634 contains an ordinary decimal number, a time or date, a number in binary
635 or hexadecimal notation, or one of several other notations.  Input
636 formats are used by commands such as @cmd{DATA LIST} that read data or
637 syntax files into the @pspp{} active dataset.
638
639 Every input format corresponds to a default @dfn{output format} that
640 specifies the formatting used when the value is output later.  It is
641 always possible to explicitly specify an output format that resembles
642 the input format.  Usually, this is the default, but in cases where the
643 input format is unfriendly to human readability, such as binary or
644 hexadecimal formats, the default output format is an easier-to-read
645 decimal format.
646
647 Every variable has two output formats, called its @dfn{print format} and
648 @dfn{write format}.  Print formats are used in most output contexts;
649 write formats are used only by @cmd{WRITE} (@pxref{WRITE}).  Newly
650 created variables have identical print and write formats, and
651 @cmd{FORMATS}, the most commonly used command for changing formats
652 (@pxref{FORMATS}), sets both of them to the same value as well.  Thus,
653 most of the time, the distinction between print and write formats is
654 unimportant.
655
656 Input and output formats are specified to @pspp{} with
657 a @dfn{format specification} of the
658 form @subcmd{@var{TYPE}@var{w}} or @code{TYPE@var{w}.@var{d}}, where
659 @var{TYPE} is one of the format types described later, @var{w} is a
660 field width measured in columns, and @var{d} is an optional number of
661 decimal places.  If @var{d} is omitted, a value of 0 is assumed.  Some
662 formats do not allow a nonzero @var{d} to be specified.
663
664 The following sections describe the input and output formats supported
665 by @pspp{}.
666
667 @menu
668 * Basic Numeric Formats::
669 * Custom Currency Formats::
670 * Legacy Numeric Formats::
671 * Binary and Hexadecimal Numeric Formats::
672 * Time and Date Formats::
673 * Date Component Formats::
674 * String Formats::
675 @end menu
676
677 @node Basic Numeric Formats
678 @subsubsection Basic Numeric Formats
679
680 @cindex numeric formats
681 The basic numeric formats are used for input and output of real numbers
682 in standard or scientific notation.  The following table shows an
683 example of how each format displays positive and negative numbers with
684 the default decimal point setting:
685
686 @float
687 @multitable {DOLLAR10.2} {@code{@tie{}$3,141.59}} {@code{-$3,141.59}}
688 @headitem Format @tab @code{@tie{}3141.59}   @tab @code{-3141.59}
689 @item F8.2       @tab @code{@tie{}3141.59}   @tab @code{-3141.59}
690 @item COMMA9.2   @tab @code{@tie{}3,141.59}  @tab @code{-3,141.59}
691 @item DOT9.2     @tab @code{@tie{}3.141,59}  @tab @code{-3.141,59}
692 @item DOLLAR10.2 @tab @code{@tie{}$3,141.59} @tab @code{-$3,141.59}
693 @item PCT9.2     @tab @code{@tie{}3141.59%}  @tab @code{-3141.59%}
694 @item E8.1       @tab @code{@tie{}3.1E+003}  @tab @code{-3.1E+003}
695 @end multitable
696 @end float
697
698 On output, numbers in F format are expressed in standard decimal
699 notation with the requested number of decimal places.  The other formats
700 output some variation on this style:
701
702 @itemize @bullet
703 @item
704 Numbers in COMMA format are additionally grouped every three digits by
705 inserting a grouping character.  The grouping character is ordinarily a
706 comma, but it can be changed to a period (@pxref{SET DECIMAL}).
707
708 @item
709 DOT format is like COMMA format, but it interchanges the role of the
710 decimal point and grouping characters.  That is, the current grouping
711 character is used as a decimal point and vice versa.
712
713 @item
714 DOLLAR format is like COMMA format, but it prefixes the number with
715 @samp{$}.
716
717 @item
718 PCT format is like F format, but adds @samp{%} after the number.
719
720 @item
721 The E format always produces output in scientific notation.
722 @end itemize
723
724 On input, the basic numeric formats accept positive and numbers in
725 standard decimal notation or scientific notation.  Leading and trailing
726 spaces are allowed.  An empty or all-spaces field, or one that contains
727 only a single period, is treated as the system missing value.
728
729 In scientific notation, the exponent may be introduced by a sign
730 (@samp{+} or @samp{-}), or by one of the letters @samp{e} or @samp{d}
731 (in uppercase or lowercase), or by a letter followed by a sign.  A
732 single space may follow the letter or the sign or both.
733
734 On fixed-format @cmd{DATA LIST} (@pxref{DATA LIST FIXED}) and in a few
735 other contexts, decimals are implied when the field does not contain a
736 decimal point.  In F6.5 format, for example, the field @code{314159} is
737 taken as the value 3.14159 with implied decimals.  Decimals are never
738 implied if an explicit decimal point is present or if scientific
739 notation is used.
740
741 E and F formats accept the basic syntax already described.  The other
742 formats allow some additional variations:
743
744 @itemize @bullet
745 @item
746 COMMA, DOLLAR, and DOT formats ignore grouping characters within the
747 integer part of the input field.  The identity of the grouping
748 character depends on the format.
749
750 @item
751 DOLLAR format allows a dollar sign to precede the number.  In a negative
752 number, the dollar sign may precede or follow the minus sign.
753
754 @item
755 PCT format allows a percent sign to follow the number.
756 @end itemize
757
758 All of the basic number formats have a maximum field width of 40 and
759 accept no more than 16 decimal places, on both input and output.  Some
760 additional restrictions apply:
761
762 @itemize @bullet
763 @item
764 As input formats, the basic numeric formats allow no more decimal places
765 than the field width.  As output formats, the field width must be
766 greater than the number of decimal places; that is, large enough to
767 allow for a decimal point and the number of requested decimal places.
768 DOLLAR and PCT formats must allow an additional column for @samp{$} or
769 @samp{%}.
770
771 @item
772 The default output format for a given input format increases the field
773 width enough to make room for optional input characters.  If an input
774 format calls for decimal places, the width is increased by 1 to make
775 room for an implied decimal point.  COMMA, DOT, and DOLLAR formats also
776 increase the output width to make room for grouping characters.  DOLLAR
777 and PCT further increase the output field width by 1 to make room for
778 @samp{$} or @samp{%}.  The increased output width is capped at 40, the
779 maximum field width.
780
781 @item
782 The E format is exceptional.  For output, E format has a minimum width
783 of 7 plus the number of decimal places.  The default output format for
784 an E input format is an E format with at least 3 decimal places and
785 thus a minimum width of 10.
786 @end itemize
787
788 More details of basic numeric output formatting are given below:
789
790 @itemize @bullet
791 @item
792 Output rounds to nearest, with ties rounded away from zero.  Thus, 2.5
793 is output as @code{3} in F1.0 format, and -1.125 as @code{-1.13} in F5.1
794 format.
795
796 @item
797 The system-missing value is output as a period in a field of spaces,
798 placed in the decimal point's position, or in the rightmost column if no
799 decimal places are requested.  A period is used even if the decimal
800 point character is a comma.
801
802 @item
803 A number that does not fill its field is right-justified within the
804 field.
805
806 @item
807 A number is too large for its field causes decimal places to be dropped
808 to make room.  If dropping decimals does not make enough room,
809 scientific notation is used if the field is wide enough.  If a number
810 does not fit in the field, even in scientific notation, the overflow is
811 indicated by filling the field with asterisks (@samp{*}).
812
813 @item
814 COMMA, DOT, and DOLLAR formats insert grouping characters only if space
815 is available for all of them.  Grouping characters are never inserted
816 when all decimal places must be dropped.  Thus, 1234.56 in COMMA5.2
817 format is output as @samp{@tie{}1235} without a comma, even though there
818 is room for one, because all decimal places were dropped.
819
820 @item
821 DOLLAR or PCT format drop the @samp{$} or @samp{%} only if the number
822 would not fit at all without it.  Scientific notation with @samp{$} or
823 @samp{%} is preferred to ordinary decimal notation without it.
824
825 @item
826 Except in scientific notation, a decimal point is included only when
827 it is followed by a digit.  If the integer part of the number being
828 output is 0, and a decimal point is included, then @pspp{} ordinarily
829 drops the zero before the decimal point.  However, in @code{F},
830 @code{COMMA}, or @code{DOT} formats, @pspp{} keeps the zero if
831 @code{SET LEADZERO} is set to @code{ON} (@pxref{SET LEADZERO}).
832
833 In scientific notation, the number always includes a decimal point,
834 even if it is not followed by a digit.
835
836 @item
837 A negative number includes a minus sign only in the presence of a
838 nonzero digit: -0.01 is output as @samp{-.01} in F4.2 format but as
839 @samp{@tie{}@tie{}.0} in F4.1 format.  Thus, a ``negative zero'' never
840 includes a minus sign.
841
842 @item
843 In negative numbers output in DOLLAR format, the dollar sign follows the
844 negative sign.  Thus, -9.99 in DOLLAR6.2 format is output as
845 @code{-$9.99}.
846
847 @item
848 In scientific notation, the exponent is output as @samp{E} followed by
849 @samp{+} or @samp{-} and exactly three digits.  Numbers with magnitude
850 less than 10**-999 or larger than 10**999 are not supported by most
851 computers, but if they are supported then their output is considered
852 to overflow the field and they are output as asterisks.
853
854 @item
855 On most computers, no more than 15 decimal digits are significant in
856 output, even if more are printed.  In any case, output precision cannot
857 be any higher than input precision; few data sets are accurate to 15
858 digits of precision.  Unavoidable loss of precision in intermediate
859 calculations may also reduce precision of output.
860
861 @item
862 Special values such as infinities and ``not a number'' values are
863 usually converted to the system-missing value before printing.  In a few
864 circumstances, these values are output directly.  In fields of width 3
865 or greater, special values are output as however many characters
866 fit from @code{+Infinity} or @code{-Infinity} for infinities, from
867 @code{NaN} for ``not a number,'' or from @code{Unknown} for other values
868 (if any are supported by the system).  In fields under 3 columns wide,
869 special values are output as asterisks.
870 @end itemize
871
872 @node Custom Currency Formats
873 @subsubsection Custom Currency Formats
874
875 @cindex currency formats
876 The custom currency formats are closely related to the basic numeric
877 formats, but they allow users to customize the output format.  The
878 SET command configures custom currency formats, using the syntax
879 @display
880 SET CC@var{x}=@t{"}@var{string}@t{"}.
881 @end display
882 @noindent
883 where @var{x} is A, B, C, D, or E, and @var{string} is no more than 16
884 characters long.
885
886 @var{string} must contain exactly three commas or exactly three periods
887 (but not both), except that a single quote character may be used to
888 ``escape'' a following comma, period, or single quote.  If three commas
889 are used, commas are used for grouping in output, and a period
890 is used as the decimal point.  Uses of periods reverses these roles.
891
892 The commas or periods divide @var{string} into four fields, called the
893 @dfn{negative prefix}, @dfn{prefix}, @dfn{suffix}, and @dfn{negative
894 suffix}, respectively.  The prefix and suffix are added to output
895 whenever space is available.  The negative prefix and negative suffix
896 are always added to a negative number when the output includes a nonzero
897 digit.
898
899 The following syntax shows how custom currency formats could be used to
900 reproduce basic numeric formats:
901
902 @example
903 @group
904 SET CCA="-,,,".  /* Same as COMMA.
905 SET CCB="-...".  /* Same as DOT.
906 SET CCC="-,$,,". /* Same as DOLLAR.
907 SET CCD="-,,%,". /* Like PCT, but groups with commas.
908 @end group
909 @end example
910
911 Here are some more examples of custom currency formats.  The final
912 example shows how to use a single quote to escape a delimiter:
913
914 @example
915 @group
916 SET CCA=",EUR,,-".   /* Euro.
917 SET CCB="(,USD ,,)". /* US dollar.
918 SET CCC="-.R$..".    /* Brazilian real.
919 SET CCD="-,, NIS,".  /* Israel shekel.
920 SET CCE="-.Rp'. ..". /* Indonesia Rupiah.
921 @end group
922 @end example
923
924 @noindent These formats would yield the following output:
925
926 @float
927 @multitable {CCD13.2} {@code{@tie{}@tie{}USD 3,145.59}} {@code{(USD 3,145.59)}}
928 @headitem Format @tab @code{@tie{}3145.59}         @tab @code{-3145.59}
929 @item CCA12.2 @tab @code{@tie{}EUR3,145.59}        @tab @code{EUR3,145.59-}
930 @item CCB14.2 @tab @code{@tie{}@tie{}USD 3,145.59} @tab @code{(USD 3,145.59)}
931 @item CCC11.2 @tab @code{@tie{}R$3.145,59}         @tab @code{-R$3.145,59}
932 @item CCD13.2 @tab @code{@tie{}3,145.59 NIS}       @tab @code{-3,145.59 NIS}
933 @item CCE10.0 @tab @code{@tie{}Rp. 3.146}          @tab @code{-Rp. 3.146}
934 @end multitable
935 @end float
936
937 The default for all the custom currency formats is @samp{-,,,},
938 equivalent to COMMA format.
939
940 @node Legacy Numeric Formats
941 @subsubsection Legacy Numeric Formats
942
943 The N and Z numeric formats provide compatibility with legacy file
944 formats.  They have much in common:
945
946 @itemize @bullet
947 @item
948 Output is rounded to the nearest representable value, with ties rounded
949 away from zero.
950
951 @item
952 Numbers too large to display are output as a field filled with asterisks
953 (@samp{*}).
954
955 @item
956 The decimal point is always implicitly the specified number of digits
957 from the right edge of the field, except that Z format input allows an
958 explicit decimal point.
959
960 @item
961 Scientific notation may not be used.
962
963 @item
964 The system-missing value is output as a period in a field of spaces.
965 The period is placed just to the right of the implied decimal point in
966 Z format, or at the right end in N format or in Z format if no decimal
967 places are requested.  A period is used even if the decimal point
968 character is a comma.
969
970 @item
971 Field width may range from 1 to 40.  Decimal places may range from 0 up
972 to the field width, to a maximum of 16.
973
974 @item
975 When a legacy numeric format used for input is converted to an output
976 format, it is changed into the equivalent F format.  The field width is
977 increased by 1 if any decimal places are specified, to make room for a
978 decimal point.  For Z format, the field width is increased by 1 more
979 column, to make room for a negative sign.  The output field width is
980 capped at 40 columns.
981 @end itemize
982
983 @subsubheading N Format
984
985 The N format supports input and output of fields that contain only
986 digits.  On input, leading or trailing spaces, a decimal point, or any
987 other non-digit character causes the field to be read as the
988 system-missing value.  As a special exception, an N format used on
989 @cmd{DATA LIST FREE} or @cmd{DATA LIST LIST} is treated as the
990 equivalent F format.
991
992 On output, N pads the field on the left with zeros.  Negative numbers
993 are output like the system-missing value.
994
995 @subsubheading Z Format
996
997 The Z format is a ``zoned decimal'' format used on IBM mainframes.  Z
998 format encodes the sign as part of the final digit, which must be one of
999 the following:
1000 @example
1001 0123456789
1002 @{ABCDEFGHI
1003 @}JKLMNOPQR
1004 @end example
1005 @noindent
1006 where the characters in each row represent digits 0 through 9 in order.
1007 Characters in the first two rows indicate a positive sign; those in the
1008 third indicate a negative sign.
1009
1010 On output, Z fields are padded on the left with spaces.  On input,
1011 leading and trailing spaces are ignored.  Any character in an input
1012 field other than spaces, the digit characters above, and @samp{.} causes
1013 the field to be read as system-missing.
1014
1015 The decimal point character for input and output is always @samp{.},
1016 even if the decimal point character is a comma (@pxref{SET DECIMAL}).
1017
1018 Nonzero, negative values output in Z format are marked as negative even
1019 when no nonzero digits are output.  For example, -0.2 is output in Z1.0
1020 format as @samp{J}.  The ``negative zero'' value supported by most
1021 machines is output as positive.
1022
1023 @node Binary and Hexadecimal Numeric Formats
1024 @subsubsection Binary and Hexadecimal Numeric Formats
1025
1026 @cindex binary formats
1027 @cindex hexadecimal formats
1028 The binary and hexadecimal formats are primarily designed for
1029 compatibility with existing machine formats, not for human readability.
1030 All of them therefore have a F format as default output format.  Some of
1031 these formats are only portable between machines with compatible byte
1032 ordering (endianness) or floating-point format.
1033
1034 Binary formats use byte values that in text files are interpreted as
1035 special control functions, such as carriage return and line feed.  Thus,
1036 data in binary formats should not be included in syntax files or read
1037 from data files with variable-length records, such as ordinary text
1038 files.  They may be read from or written to data files with fixed-length
1039 records.  @xref{FILE HANDLE}, for information on working with
1040 fixed-length records.
1041
1042 @subsubheading P and PK Formats
1043
1044 These are binary-coded decimal formats, in which every byte (except the
1045 last, in P format) represents two decimal digits.  The most-significant
1046 4 bits of the first byte is the most-significant decimal digit, the
1047 least-significant 4 bits of the first byte is the next decimal digit,
1048 and so on.
1049
1050 In P format, the most-significant 4 bits of the last byte are the
1051 least-significant decimal digit.  The least-significant 4 bits represent
1052 the sign: decimal 15 indicates a negative value, decimal 13 indicates a
1053 positive value.
1054
1055 Numbers are rounded downward on output.  The system-missing value and
1056 numbers outside representable range are output as zero.
1057
1058 The maximum field width is 16.  Decimal places may range from 0 up to
1059 the number of decimal digits represented by the field.
1060
1061 The default output format is an F format with twice the input field
1062 width, plus one column for a decimal point (if decimal places were
1063 requested).
1064
1065 @subsubheading IB and PIB Formats
1066
1067 These are integer binary formats.  IB reads and writes 2's complement
1068 binary integers, and PIB reads and writes unsigned binary integers.  The
1069 byte ordering is by default the host machine's, but SET RIB may be used
1070 to select a specific byte ordering for reading (@pxref{SET RIB}) and
1071 SET WIB, similarly, for writing (@pxref{SET WIB}).
1072
1073 The maximum field width is 8.  Decimal places may range from 0 up to the
1074 number of decimal digits in the largest value representable in the field
1075 width.
1076
1077 The default output format is an F format whose width is the number of
1078 decimal digits in the largest value representable in the field width,
1079 plus 1 if the format has decimal places.
1080
1081 @subsubheading RB Format
1082
1083 This is a binary format for real numbers.  By default it reads and
1084 writes the host machine's floating-point format, but SET RRB may be
1085 used to select an alternate floating-point format for reading
1086 (@pxref{SET RRB}) and SET WRB, similarly, for writing (@pxref{SET
1087 WRB}).
1088
1089 The recommended field width depends on the floating-point format.
1090 NATIVE (the default format), IDL, IDB, VD, VG, and ZL formats should use
1091 a field width of 8.  ISL, ISB, VF, and ZS formats should use a field
1092 width of 4.  Other field widths do not produce useful results.  The
1093 maximum field width is 8.  No decimal places may be specified.
1094
1095 The default output format is F8.2.
1096
1097 @subsubheading PIBHEX and RBHEX Formats
1098
1099 These are hexadecimal formats, for reading and writing binary formats
1100 where each byte has been recoded as a pair of hexadecimal digits.
1101
1102 A hexadecimal field consists solely of hexadecimal digits
1103 @samp{0}@dots{}@samp{9} and @samp{A}@dots{}@samp{F}.  Uppercase and
1104 lowercase are accepted on input; output is in uppercase.
1105
1106 Other than the hexadecimal representation, these formats are equivalent
1107 to PIB and RB formats, respectively.  However, bytes in PIBHEX format
1108 are always ordered with the most-significant byte first (big-endian
1109 order), regardless of the host machine's native byte order or @pspp{}
1110 settings.
1111
1112 Field widths must be even and between 2 and 16.  RBHEX format allows no
1113 decimal places; PIBHEX allows as many decimal places as a PIB format
1114 with half the given width.
1115
1116 @node Time and Date Formats
1117 @subsubsection Time and Date Formats
1118
1119 @cindex time formats
1120 @cindex date formats
1121 In @pspp{}, a @dfn{time} is an interval.  The time formats translate
1122 between human-friendly descriptions of time intervals and @pspp{}'s
1123 internal representation of time intervals, which is simply the number of
1124 seconds in the interval.  @pspp{} has three time formats:
1125
1126 @float
1127 @multitable {Time Format} {@code{dd-mmm-yyyy HH:MM:SS.ss}} {@code{01-OCT-1978 01:31:17.01}}
1128 @headitem Time Format @tab Template                  @tab Example
1129 @item MTIME    @tab @code{MM:SS.ss}             @tab @code{91:17.01}
1130 @item TIME     @tab @code{hh:MM:SS.ss}          @tab @code{01:31:17.01}
1131 @item DTIME    @tab @code{DD HH:MM:SS.ss}       @tab @code{00 04:31:17.01}
1132 @end multitable
1133 @end float
1134
1135 A @dfn{date} is a moment in the past or the future.  Internally, @pspp{}
1136 represents a date as the number of seconds since the @dfn{epoch},
1137 midnight, Oct. 14, 1582.  The date formats translate between
1138 human-readable dates and @pspp{}'s numeric representation of dates and
1139 times.  @pspp{} has several date formats:
1140
1141 @float
1142 @multitable {Date Format} {@code{dd-mmm-yyyy HH:MM:SS.ss}} {@code{01-OCT-1978 04:31:17.01}}
1143 @headitem Date Format @tab Template                  @tab Example
1144 @item DATE     @tab @code{dd-mmm-yyyy}          @tab @code{01-OCT-1978}
1145 @item ADATE    @tab @code{mm/dd/yyyy}           @tab @code{10/01/1978}
1146 @item EDATE    @tab @code{dd.mm.yyyy}           @tab @code{01.10.1978}
1147 @item JDATE    @tab @code{yyyyjjj}              @tab @code{1978274}
1148 @item SDATE    @tab @code{yyyy/mm/dd}           @tab @code{1978/10/01}
1149 @item QYR      @tab @code{q Q yyyy}             @tab @code{3 Q 1978}
1150 @item MOYR     @tab @code{mmm yyyy}             @tab @code{OCT 1978}
1151 @item WKYR     @tab @code{ww WK yyyy}           @tab @code{40 WK 1978}
1152 @item DATETIME @tab @code{dd-mmm-yyyy HH:MM:SS.ss} @tab @code{01-OCT-1978 04:31:17.01}
1153 @item YMDHMS   @tab @code{yyyy-mm-dd HH:MM:SS.ss} @tab @code{1978-01-OCT 04:31:17.01}
1154 @end multitable
1155 @end float
1156
1157 The templates in the preceding tables describe how the time and date
1158 formats are input and output:
1159
1160 @table @code
1161 @item dd
1162 Day of month, from 1 to 31.  Always output as two digits.
1163
1164 @item mm
1165 @itemx mmm
1166 Month.  In output, @code{mm} is output as two digits, @code{mmm} as the
1167 first three letters of an English month name (January, February,
1168 @dots{}).  In input, both of these formats, plus Roman numerals, are
1169 accepted.
1170
1171 @item yyyy
1172 Year.  In output, DATETIME and YMDHMS always produce 4-digit years;
1173 other formats can produce a 2- or 4-digit year.  The century assumed
1174 for 2-digit years depends on the EPOCH setting (@pxref{SET EPOCH}).
1175 In output, a year outside the epoch causes the whole field to be
1176 filled with asterisks (@samp{*}).
1177
1178 @item jjj
1179 Day of year (Julian day), from 1 to 366.  This is exactly three digits
1180 giving the count of days from the start of the year.  January 1 is
1181 considered day 1.
1182
1183 @item q
1184 Quarter of year, from 1 to 4.  Quarters start on January 1, April 1,
1185 July 1, and October 1.
1186
1187 @item ww
1188 Week of year, from 1 to 53.  Output as exactly two digits.  January 1 is
1189 the first day of week 1.
1190
1191 @item DD
1192 Count of days, which may be positive or negative.  Output as at least
1193 two digits.
1194
1195 @item hh
1196 Count of hours, which may be positive or negative.  Output as at least
1197 two digits.
1198
1199 @item HH
1200 Hour of day, from 0 to 23.  Output as exactly two digits.
1201
1202 @item MM
1203 In MTIME, count of minutes, which may be positive or negative.  Output
1204 as at least two digits.
1205
1206 In other formats, minute of hour, from 0 to 59.  Output as exactly two
1207 digits.
1208
1209 @item SS.ss
1210 Seconds within minute, from 0 to 59.  The integer part is output as
1211 exactly two digits.  On output, seconds and fractional seconds may or
1212 may not be included, depending on field width and decimal places.  On
1213 input, seconds and fractional seconds are optional.  The DECIMAL setting
1214 controls the character accepted and displayed as the decimal point
1215 (@pxref{SET DECIMAL}).
1216 @end table
1217
1218 For output, the date and time formats use the delimiters indicated in
1219 the table.  For input, date components may be separated by spaces or by
1220 one of the characters @samp{-}, @samp{/}, @samp{.}, or @samp{,}, and
1221 time components may be separated by spaces or @samp{:}.  On
1222 input, the @samp{Q} separating quarter from year and the @samp{WK}
1223 separating week from year may be uppercase or lowercase, and the spaces
1224 around them are optional.
1225
1226 On input, all time and date formats accept any amount of leading and
1227 trailing white space.
1228
1229 The maximum width for time and date formats is 40 columns.  Minimum
1230 input and output width for each of the time and date formats is shown
1231 below:
1232
1233 @float
1234 @multitable {DATETIME} {Min. Input Width} {Min. Output Width} {4-digit year}
1235 @headitem Format @tab Min. Input Width @tab Min. Output Width @tab Option
1236 @item DATE @tab 8 @tab 9 @tab 4-digit year
1237 @item ADATE @tab 8 @tab 8 @tab 4-digit year
1238 @item EDATE @tab 8 @tab 8 @tab 4-digit year
1239 @item JDATE @tab 5 @tab 5 @tab 4-digit year
1240 @item SDATE @tab 8 @tab 8 @tab 4-digit year
1241 @item QYR @tab 4 @tab 6 @tab 4-digit year
1242 @item MOYR @tab 6 @tab 6 @tab 4-digit year
1243 @item WKYR @tab 6 @tab 8 @tab 4-digit year
1244 @item DATETIME @tab 17 @tab 17 @tab seconds
1245 @item YMDHMS @tab 12 @tab 16 @tab seconds
1246 @item MTIME @tab 4 @tab 5
1247 @item TIME @tab 5 @tab 5 @tab seconds
1248 @item DTIME @tab 8 @tab 8 @tab seconds
1249 @end multitable
1250 @end float
1251 @noindent
1252 In the table, ``Option'' describes what increased output width enables:
1253
1254 @table @asis
1255 @item 4-digit year
1256 A field 2 columns wider than the minimum includes a 4-digit year.
1257 (DATETIME and YMDHMS formats always include a 4-digit year.)
1258
1259 @item seconds
1260 A field 3 columns wider than the minimum includes seconds as well as
1261 minutes.  A field 5 columns wider than minimum, or more, can also
1262 include a decimal point and fractional seconds (but no more than allowed
1263 by the format's decimal places).
1264 @end table
1265
1266 For the time and date formats, the default output format is the same as
1267 the input format, except that @pspp{} increases the field width, if
1268 necessary, to the minimum allowed for output.
1269
1270 Time or dates narrower than the field width are right-justified within
1271 the field.
1272
1273 When a time or date exceeds the field width, characters are trimmed from
1274 the end until it fits.  This can occur in an unusual situation, @i{e.g.}@:
1275 with a year greater than 9999 (which adds an extra digit), or for a
1276 negative value on MTIME, TIME, or DTIME (which adds a leading minus sign).
1277
1278 @c What about out-of-range values?
1279
1280 The system-missing value is output as a period at the right end of the
1281 field.
1282
1283 @node Date Component Formats
1284 @subsubsection Date Component Formats
1285
1286 The WKDAY and MONTH formats provide input and output for the names of
1287 weekdays and months, respectively.
1288
1289 On output, these formats convert a number between 1 and 7, for WKDAY, or
1290 between 1 and 12, for MONTH, into the English name of a day or month,
1291 respectively.  If the name is longer than the field, it is trimmed to
1292 fit.  If the name is shorter than the field, it is padded on the right
1293 with spaces.  Values outside the valid range, and the system-missing
1294 value, are output as all spaces.
1295
1296 On input, English weekday or month names (in uppercase or lowercase) are
1297 converted back to their corresponding numbers.  Weekday and month names
1298 may be abbreviated to their first 2 or 3 letters, respectively.
1299
1300 The field width may range from 2 to 40, for WKDAY, or from 3 to 40, for
1301 MONTH.  No decimal places are allowed.
1302
1303 The default output format is the same as the input format.
1304
1305 @node String Formats
1306 @subsubsection String Formats
1307
1308 @cindex string formats
1309 The A and AHEX formats are the only ones that may be assigned to string
1310 variables.  Neither format allows any decimal places.
1311
1312 In A format, the entire field is treated as a string value.  The field
1313 width may range from 1 to 32,767, the maximum string width.  The default
1314 output format is the same as the input format.
1315
1316 In AHEX format, the field is composed of characters in a string encoded
1317 as hex digit pairs.  On output, hex digits are output in uppercase; on
1318 input, uppercase and lowercase are both accepted.  The default output
1319 format is A format with half the input width.
1320
1321 @node Scratch Variables
1322 @subsection Scratch Variables
1323
1324 @cindex scratch variables
1325 Most of the time, variables don't retain their values between cases.
1326 Instead, either they're being read from a data file or the active dataset,
1327 in which case they assume the value read, or, if created with
1328 @cmd{COMPUTE} or
1329 another transformation, they're initialized to the system-missing value
1330 or to blanks, depending on type.
1331
1332 However, sometimes it's useful to have a variable that keeps its value
1333 between cases.  You can do this with @cmd{LEAVE} (@pxref{LEAVE}), or you can
1334 use a @dfn{scratch variable}.  Scratch variables are variables whose
1335 names begin with an octothorpe (@samp{#}).
1336
1337 Scratch variables have the same properties as variables left with
1338 @cmd{LEAVE}: they retain their values between cases, and for the first
1339 case they are initialized to 0 or blanks.  They have the additional
1340 property that they are deleted before the execution of any procedure.
1341 For this reason, scratch variables can't be used for analysis.  To use
1342 a scratch variable in an analysis, use @cmd{COMPUTE} (@pxref{COMPUTE})
1343 to copy its value into an ordinary variable, then use that ordinary
1344 variable in the analysis.
1345
1346 @node Files
1347 @section Files Used by @pspp{}
1348
1349 @pspp{} makes use of many files each time it runs.  Some of these it
1350 reads, some it writes, some it creates.  Here is a table listing the
1351 most important of these files:
1352
1353 @table @strong
1354 @cindex file, command
1355 @cindex file, syntax file
1356 @cindex command file
1357 @cindex syntax file
1358 @item command file
1359 @itemx syntax file
1360 These names (synonyms) refer to the file that contains instructions
1361 that tell @pspp{} what to do.  The syntax file's name is specified on
1362 the @pspp{} command line.  Syntax files can also be read with
1363 @cmd{INCLUDE} (@pxref{INCLUDE}).
1364
1365 @cindex file, data
1366 @cindex data file
1367 @item data file
1368 Data files contain raw data in text or binary format.  Data can also
1369 be embedded in a syntax file with @cmd{BEGIN DATA} and @cmd{END DATA}.
1370
1371 @cindex file, output
1372 @cindex output file
1373 @item listing file
1374 One or more output files are created by @pspp{} each time it is
1375 run.  The output files receive the tables and charts produced by
1376 statistical procedures.  The output files may be in any number of formats,
1377 depending on how @pspp{} is configured.
1378
1379 @cindex system file
1380 @cindex file, system
1381 @item system file
1382 System files are binary files that store a dictionary and a set of
1383 cases.  @cmd{GET} and @cmd{SAVE} read and write system files.
1384
1385 @cindex portable file
1386 @cindex file, portable
1387 @item portable file
1388 Portable files are files in a text-based format that store a dictionary
1389 and a set of cases.  @cmd{IMPORT} and @cmd{EXPORT} read and write
1390 portable files.
1391 @end table
1392
1393 @node File Handles
1394 @section File Handles
1395 @cindex file handles
1396
1397 A @dfn{file handle} is a reference to a data file, system file, or
1398 portable file.  Most often, a file handle is specified as the
1399 name of a file as a string, that is, enclosed within @samp{'} or
1400 @samp{"}.
1401
1402 A file name string that begins or ends with @samp{|} is treated as the
1403 name of a command to pipe data to or from.  You can use this feature
1404 to read data over the network using a program such as @samp{curl}
1405 (@i{e.g.}@: @code{GET '|curl -s -S http://example.com/mydata.sav'}), to
1406 read compressed data from a file using a program such as @samp{zcat}
1407 (@i{e.g.}@: @code{GET '|zcat mydata.sav.gz'}), and for many other
1408 purposes.
1409
1410 @pspp{} also supports declaring named file handles with the @cmd{FILE
1411 HANDLE} command.  This command associates an identifier of your choice
1412 (the file handle's name) with a file.  Later, the file handle name can
1413 be substituted for the name of the file.  When @pspp{} syntax accesses a
1414 file multiple times, declaring a named file handle simplifies updating
1415 the syntax later to use a different file.  Use of @cmd{FILE HANDLE} is
1416 also required to read data files in binary formats.  @xref{FILE HANDLE},
1417 for more information.
1418
1419 In some circumstances, @pspp{} must distinguish whether a file handle
1420 refers to a system file or a portable file.  When this is necessary to
1421 read a file, @i{e.g.}@: as an input file for @cmd{GET} or @cmd{MATCH FILES},
1422 @pspp{} uses the file's contents to decide.  In the context of writing a
1423 file, @i{e.g.}@: as an output file for @cmd{SAVE} or @cmd{AGGREGATE}, @pspp{}
1424 decides based on the file's name: if it ends in @samp{.por} (with any
1425 capitalization), then @pspp{} writes a portable file; otherwise, @pspp{}
1426 writes a system file.
1427
1428 INLINE is reserved as a file handle name.  It refers to the ``data
1429 file'' embedded into the syntax file between @cmd{BEGIN DATA} and
1430 @cmd{END DATA}.  @xref{BEGIN DATA}, for more information.
1431
1432 The file to which a file handle refers may be reassigned on a later
1433 @cmd{FILE HANDLE} command if it is first closed using @cmd{CLOSE FILE
1434 HANDLE}.  @xref{CLOSE FILE HANDLE}, for
1435 more information.
1436
1437 @node BNF
1438 @section Backus-Naur Form
1439 @cindex BNF
1440 @cindex Backus-Naur Form
1441 @cindex command syntax, description of
1442 @cindex description of command syntax
1443
1444 The syntax of some parts of the @pspp{} language is presented in this
1445 manual using the formalism known as @dfn{Backus-Naur Form}, or BNF. The
1446 following table describes BNF:
1447
1448 @itemize @bullet
1449 @cindex keywords
1450 @cindex terminals
1451 @item
1452 Words in all-uppercase are @pspp{} keyword tokens.  In BNF, these are
1453 often called @dfn{terminals}.  There are some special terminals, which
1454 are written in lowercase for clarity:
1455
1456 @table @asis
1457 @cindex @code{number}
1458 @item @code{number}
1459 A real number.
1460
1461 @cindex @code{integer}
1462 @item @code{integer}
1463 An integer number.
1464
1465 @cindex @code{string}
1466 @item @code{string}
1467 A string.
1468
1469 @cindex @code{var-name}
1470 @item @code{var-name}
1471 A single variable name.
1472
1473 @cindex operators
1474 @cindex punctuators
1475 @item @code{=}, @code{/}, @code{+}, @code{-}, etc.
1476 Operators and punctuators.
1477
1478 @cindex @code{.}
1479 @item @code{.}
1480 The end of the command.  This is not necessarily an actual dot in the
1481 syntax file (@pxref{Commands}).
1482 @end table
1483
1484 @item
1485 @cindex productions
1486 @cindex nonterminals
1487 Other words in all lowercase refer to BNF definitions, called
1488 @dfn{productions}.  These productions are also known as
1489 @dfn{nonterminals}.  Some nonterminals are very common, so they are
1490 defined here in English for clarity:
1491
1492 @table @code
1493 @cindex @code{var-list}
1494 @item var-list
1495 A list of one or more variable names or the keyword @code{ALL}.
1496
1497 @cindex @code{expression}
1498 @item expression
1499 An expression.  @xref{Expressions}, for details.
1500 @end table
1501
1502 @item
1503 @cindex ``is defined as''
1504 @cindex productions
1505 @samp{::=} means ``is defined as''.  The left side of @samp{::=} gives
1506 the name of the nonterminal being defined.  The right side of @samp{::=}
1507 gives the definition of that nonterminal.  If the right side is empty,
1508 then one possible expansion of that nonterminal is nothing.  A BNF
1509 definition is called a @dfn{production}.
1510
1511 @item
1512 @cindex terminals and nonterminals, differences
1513 So, the key difference between a terminal and a nonterminal is that a
1514 terminal cannot be broken into smaller parts---in fact, every terminal
1515 is a single token (@pxref{Tokens}).  On the other hand, nonterminals are
1516 composed of a (possibly empty) sequence of terminals and nonterminals.
1517 Thus, terminals indicate the deepest level of syntax description.  (In
1518 parsing theory, terminals are the leaves of the parse tree; nonterminals
1519 form the branches.)
1520
1521 @item
1522 @cindex start symbol
1523 @cindex symbol, start
1524 The first nonterminal defined in a set of productions is called the
1525 @dfn{start symbol}.  The start symbol defines the entire syntax for
1526 that command.
1527 @end itemize