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