work on PRINT encoding
[pspp] / doc / files.texi
index b4bdfb8c0eacaa9a677e6ef2c3b2bef209d1c984..04bbff40fc00d01dc92b778e5b70cb6df7a56b17 100644 (file)
@@ -1,17 +1,17 @@
-@node System and Portable Files
-@chapter System Files and Portable Files
+@node System and Portable File IO
+@chapter System and Portable File I/O
 
 The commands in this chapter read, write, and examine system files and
 portable files.
 
 @menu
-* APPLY DICTIONARY::            Apply system file dictionary to active file.
+* APPLY DICTIONARY::            Apply system file dictionary to active dataset.
 * EXPORT::                      Write to a portable file.
 * GET::                         Read from a system file.
 * GET DATA::                    Read from foreign files.
 * IMPORT::                      Read from a portable file.
-* MATCH FILES::                 Merge system files.
 * SAVE::                        Write to a system file.
+* SAVE TRANSLATE::              Write data in foreign file formats.
 * SYSFILE INFO::                Display system file dictionary.
 * XEXPORT::                     Write to a portable file, as a transformation.
 * XSAVE::                       Write to a system file, as a transformation.
@@ -22,46 +22,66 @@ portable files.
 @vindex APPLY DICTIONARY
 
 @display
-APPLY DICTIONARY FROM=@{'file-name',file_handle@}.
+APPLY DICTIONARY FROM=@{'@var{file_name}',@var{file_handle}@}.
 @end display
 
 @cmd{APPLY DICTIONARY} applies the variable labels, value labels,
 and missing values taken from a file to corresponding
-variables in the active file.  In some cases it also updates the
+variables in the active dataset.  In some cases it also updates the
 weighting variable.
 
-Specify a system file, portable file, or scratch file with a file name
-string or as a file handle (@pxref{File Handles}).  The dictionary in the
-file will be read, but it will not replace the active file dictionary.
-The file's data will not be read.
+Specify a system file or portable file's name, a data set name
+(@pxref{Datasets}), or a file handle name (@pxref{File Handles}).  The
+dictionary in the file will be read, but it will not replace the
+active dataset's dictionary.  The file's data will not be read.
 
-Only variables with names that exist in both the active file and the
+Only variables with names that exist in both the active dataset and the
 system file are considered.  Variables with the same name but different
 types (numeric, string) will cause an error message.  Otherwise, the
 system file variables' attributes will replace those in their matching
-active file variables, as described below.
+active dataset variables:
 
-If a system file variable has a variable label, then it will replace the
-active file variable's variable label.  If the system file variable does
-not have a variable label, then the active file variable's variable
-label, if any, will be retained.
+@itemize @bullet
+@item
+If a system file variable has a variable label, then it will replace
+the variable label of the active dataset variable.  If the system
+file variable does not have a variable label, then the active dataset
+variable's variable label, if any, will be retained.
+
+@item
+If the system file variable has custom attributes (@pxref{VARIABLE
+ATTRIBUTE}), then those attributes replace the active dataset variable's
+custom attributes.  If the system file variable does not have custom
+attributes, then the active dataset variable's custom attributes, if any,
+will be retained.
 
-If the active file variable is numeric or short string, then value
-labels and missing values, if any, will be copied to the active file
+@item
+If the active dataset variable is numeric or short string, then value
+labels and missing values, if any, will be copied to the active dataset
 variable.  If the system file variable does not have value labels or
-missing values, then those in the active file variable, if any, will not
+missing values, then those in the active dataset variable, if any, will not
 be disturbed.
+@end itemize
 
-Finally, weighting of the active file is updated (@pxref{WEIGHT}).  If
-the active file has a weighting variable, and the system file does not,
-or if the weighting variable in the system file does not exist in the
-active file, then the active file weighting variable, if any, is
-retained.  Otherwise, the weighting variable in the system file becomes
-the active file weighting variable.
+In addition to properties of variables, some properties of the active
+file dictionary as a whole are updated:
+
+@itemize @bullet
+@item
+If the system file has custom attributes (@pxref{DATAFILE ATTRIBUTE}),
+then those attributes replace the active dataset variable's custom
+attributes.
+
+@item
+If the active dataset has a weighting variable (@pxref{WEIGHT}), and the
+system file does not, or if the weighting variable in the system file
+does not exist in the active dataset, then the active dataset weighting
+variable, if any, is retained.  Otherwise, the weighting variable in
+the system file becomes the active dataset weighting variable.
+@end itemize
 
 @cmd{APPLY DICTIONARY} takes effect immediately.  It does not read the
-active
-file.  The system file is not modified.
+active dataset.  The system file is not modified.
 
 @node EXPORT
 @section EXPORT
@@ -69,21 +89,21 @@ file.  The system file is not modified.
 
 @display
 EXPORT
-        /OUTFILE='file-name'
+        /OUTFILE='@var{file_name}'
         /UNSELECTED=@{RETAIN,DELETE@}
-        /DIGITS=n
-        /DROP=var_list
-        /KEEP=var_list
-        /RENAME=(src_names=target_names)@dots{}
+        /DIGITS=@var{n}
+        /DROP=@var{var_list}
+        /KEEP=@var{var_list}
+        /RENAME=(@var{src_names}=@var{target_names})@dots{}
         /TYPE=@{COMM,TAPE@}
         /MAP
 @end display
 
-The @cmd{EXPORT} procedure writes the active file dictionary and data to a
-specified portable file or scratch file.
+The @cmd{EXPORT} procedure writes the active dataset's dictionary and
+data to a specified portable file.
 
 By default, cases excluded with FILTER are written to the
-file.  These can be excluded by specifying DELETE on the UNSELECTED
+file.  These can be excluded by specifying DELETE on the @subcmd{UNSELECTED}
 subcommand.  Specifying RETAIN makes the default explicit.
 
 Portable files express real numbers in base 30.  Integers are always
@@ -91,23 +111,23 @@ expressed to the maximum precision needed to make them exact.
 Non-integers are, by default, expressed to the machine's maximum
 natural precision (approximately 15 decimal digits on many machines).
 If many numbers require this many digits, the portable file may
-significantly increase in size.  As an alternative, the DIGITS
+significantly increase in size.  As an alternative, the @subcmd{DIGITS}
 subcommand may be used to specify the number of decimal digits of
-precision to write.  DIGITS applies only to non-integers.
+precision to write.  @subcmd{DIGITS} applies only to non-integers.
 
-The OUTFILE subcommand, which is the only required subcommand, specifies
-the portable file or scratch file to be written as a file name string or
+The @subcmd{OUTFILE} subcommand, which is the only required subcommand, specifies
+the portable file to be written as a file name string or
 a file handle (@pxref{File Handles}).
 
-DROP, KEEP, and RENAME follow the same format as the SAVE procedure
-(@pxref{SAVE}).
+@subcmd{DROP}, @subcmd{KEEP}, and @subcmd{RENAME} follow the same format as the 
+@subcmd{SAVE} procedure (@pxref{SAVE}).
 
-The TYPE subcommand specifies the character set for use in the
+The @subcmd{TYPE} subcommand specifies the character set for use in the
 portable file.  Its value is currently not used.
 
-The MAP subcommand is currently ignored.
+The @subcmd{MAP} subcommand is currently ignored.
 
-@cmd{EXPORT} is a procedure.  It causes the active file to be read.
+@cmd{EXPORT} is a procedure.  It causes the active dataset to be read.
 
 @node GET
 @section GET
@@ -115,238 +135,541 @@ The MAP subcommand is currently ignored.
 
 @display
 GET
-        /FILE=@{'file-name',file_handle@}
-        /DROP=var_list
-        /KEEP=var_list
-        /RENAME=(src_names=target_names)@dots{}
+        /FILE=@{'@var{file_name}',@var{file_handle}@}
+        /DROP=@var{var_list}
+        /KEEP=@var{var_list}
+        /RENAME=(@var{src_names}=@var{target_names})@dots{}
+        /ENCODING='@var{encoding}'
 @end display
 
-@cmd{GET} clears the current dictionary and active file and
+@cmd{GET} clears the current dictionary and active dataset and
 replaces them with the dictionary and data from a specified file.
 
-The FILE subcommand is the only required subcommand.  Specify the system
-file, portable file, or scratch file to be read as a string file name or
+The @subcmd{FILE} subcommand is the only required subcommand.  
+Specify the system
+file or portable file to be read as a string file name or
 a file handle (@pxref{File Handles}).
 
 By default, all the variables in a file are read.  The DROP
 subcommand can be used to specify a list of variables that are not to be
-read.  By contrast, the KEEP subcommand can be used to specify variable
-that are to be read, with all other variables not read.
+read.  By contrast, the @subcmd{KEEP} subcommand can be used to specify
+variable that are to be read, with all other variables not read.
 
 Normally variables in a file retain the names that they were
-saved under.  Use the RENAME subcommand to change these names.  Specify,
+saved under.  Use the @subcmd{RENAME} subcommand to change these names.
+Specify,
 within parentheses, a list of variable names followed by an equals sign
 (@samp{=}) and the names that they should be renamed to.  Multiple
 parenthesized groups of variable names can be included on a single
-RENAME subcommand.  Variables' names may be swapped using a RENAME
-subcommand of the form @samp{/RENAME=(A B=B A)}.
+@subcmd{RENAME} subcommand.
+Variables' names may be swapped using a @subcmd{RENAME}
+subcommand of the form @subcmd{/RENAME=(@var{A} @var{B}=@var{B} @var{A})}.
 
-Alternate syntax for the RENAME subcommand allows the parentheses to be
+Alternate syntax for the @subcmd{RENAME} subcommand allows the parentheses to be
 eliminated.  When this is done, only a single variable may be renamed at
-once.  For instance, @samp{/RENAME=A=B}.  This alternate syntax is
+once.  For instance, @subcmd{/RENAME=@var{A}=@var{B}}.  This alternate syntax is
 deprecated.
 
-DROP, KEEP, and RENAME are executed in left-to-right order.  
+@subcmd{DROP}, @subcmd{KEEP}, and @subcmd{RENAME} are executed in left-to-right order.  
 Each may be present any number of times.  @cmd{GET} never modifies a
-file on disk.  Only the active file read from the file
+file on disk.  Only the active dataset read from the file
 is affected by these subcommands.
 
+@pspp{} tries to automatically detect the encoding of string data in the
+file.  Sometimes, however, this does not work well encoding,
+especially for files written by old versions of SPSS or @pspp{}.  Specify
+the @subcmd{ENCODING} subcommand with an @acronym{IANA} character set name as its string
+argument to override the default.  The @subcmd{ENCODING} subcommand is a @pspp{}
+extension.
+
 @cmd{GET} does not cause the data to be read, only the dictionary.  The data
 is read later, when a procedure is executed.
 
-Use of @cmd{GET} to read a portable file or scratch file is a PSPP
-extension.
+Use of @cmd{GET} to read a portable file is a @pspp{} extension.
 
 @node GET DATA
 @section GET DATA
 @vindex GET DATA
 
 @display
-GET DATA /TYPE=gnm
-        /FILE=@{'file-name'@}
-        
-        /SHEET=@{NAME 'sheet-name', INDEX n@}
-        /CELLRANGE=@{RANGE 'range', FULL@}
-        /READNAMES=@{ON, OFF@}
-        /ASSUMEDVARWIDTH=n.
+GET DATA
+        /TYPE=@{GNM,ODS,PSQL,TXT@}
+        @dots{}additional subcommands depending on TYPE@dots{}
 @end display
 
-The @cmd{GET DATA} command is used to read files and other data sources 
-created by other applications. 
-When this command is executed, the current dictionary and active file are
-replaced  with variables and data read from the specified source.
-The TYPE subcommand is mandatory and determines the type of the file or source to read.
-Currently @samp{gnm} is the only supported type.
+The @cmd{GET DATA} command is used to read files and other data
+sources created by other applications.  When this command is executed,
+the current dictionary and active dataset are replaced with variables
+and data read from the specified source.
+
+The @subcmd{TYPE} subcommand is mandatory and must be the first subcommand
+specified.  It determines the type of the file or source to read.
+@pspp{} currently supports the following file types:
+
+@table @asis
+@item GNM
+Spreadsheet files created by Gnumeric (@url{http://gnumeric.org}).
+
+@item ODS
+Spreadsheet files in OpenDocument format.
+
+@item PSQL
+Relations from PostgreSQL databases (@url{http://postgresql.org}).
+
+@item TXT
+Textual data files in columnar and delimited formats.
+@end table
+
+Each supported file type has additional subcommands, explained in
+separate sections below.
+
+@menu
+* GET DATA /TYPE=GNM/ODS::     Spreadsheets
+* GET DATA /TYPE=PSQL::        Databases
+* GET DATA /TYPE=TXT::         Delimited Text Files
+@end menu
+
+@node GET DATA /TYPE=GNM/ODS
+@subsection Spreadsheet Files
+
+@display
+GET DATA /TYPE=@{GNM, ODS@}
+        /FILE=@{'@var{file_name}'@}
+        /SHEET=@{NAME '@var{sheet_name}', INDEX @var{n}@}
+        /CELLRANGE=@{RANGE '@var{range}', FULL@}
+        /READNAMES=@{ON, OFF@}
+        /ASSUMEDVARWIDTH=@var{n}.
+@end display
 
 @cindex Gnumeric
+@cindex OpenDocument
 @cindex spreadsheet files
-The @samp{gnm} type is used to read spreadsheet files created by 
-Gnumeric (@url{http://gnumeric.org}).
-With this type, the FILE subcommand must be used, to specify the
-spreadsheet file to read.  
+
+Gnumeric spreadsheets (@url{http://gnumeric.org}), and spreadsheets
+in OpenDocument format
+(@url{http://libreplanet.org/wiki/Group:OpenDocument/Software})
+can be read using the @cmd{GET DATA} command.
+Use the @subcmd{TYPE} subcommand to indicate the file's format.  
+/TYPE=GNM indicates Gnumeric files,
+/TYPE=ODS indicates OpenDocument.
+The @subcmd{FILE} subcommand is mandatory.
+Use it to specify the name file to be read. 
 All other subcommands are optional.
+
 The format of each variable is determined by the format of the spreadsheet 
 cell containing the first datum for the variable.
 If this cell is of string (text) format, then the width of the variable is
 determined from the length of the string it contains, unless the 
-ASSUMEDVARWIDTH subcommand is given.
+@subcmd{ASSUMEDVARWIDTH} subcommand is given.
 
-The SHEET subcommand specifies the sheet within the spreadsheet file to read.
-There are two forms of the SHEET subcommand.
+The @subcmd{SHEET} subcommand specifies the sheet within the spreadsheet file to read.
+There are two forms of the @subcmd{SHEET} subcommand.
 In the first form,
-@samp{/SHEET=name @var{sheet-name}}, the string @var{sheet-name} is the
+@subcmd{/SHEET=name @var{sheet_name}}, the string @var{sheet_name} is the
 name of the sheet to read.
-In the second form, @samp{/SHEET=index @var{idx}}, @var{idx} is a
+In the second form, @subcmd{/SHEET=index @var{idx}}, @var{idx} is a
 integer which is the index of the sheet to read.
 The first sheet has the index 1.
-If the SHEET subcommand is omitted, then the command will read the
+If the @subcmd{SHEET} subcommand is omitted, then the command will read the
 first sheet in the file.
 
-The CELLRANGE subcommand specifies the range of cells within the sheet to read.
-If the subcommand is given as @samp{/CELLRANGE=FULL}, then the entire
+The @subcmd{CELLRANGE} subcommand specifies the range of cells within the sheet to read.
+If the subcommand is given as @subcmd{/CELLRANGE=FULL}, then the entire
 sheet  is read.
 To read only part of a sheet, use the form 
-@samp{/CELLRANGE=range '@var{top-left-cell}:@var{bottom-right-cell}'}.
-For example, the subcommand @samp{/CELLRANGE=range 'C3:P19'} reads 
+@subcmd{/CELLRANGE=range '@var{top_left_cell}:@var{bottom_right_cell}'}.
+For example, the subcommand @subcmd{/CELLRANGE=range 'C3:P19'} reads 
 columns C--P, and rows 3--19 inclusive.
-If no CELLRANGE subcommand is given, then the entire sheet is read.
+If no @subcmd{CELLRANGE} subcommand is given, then the entire sheet is read.
 
-If @samp{/READNAMES=ON} is specified, then the contents of cells of
+If @subcmd{/READNAMES=ON} is specified, then the contents of cells of
 the first row are used as the names of the variables in which to store
-the data from subsequent rows. 
-If the READNAMES command is omitted, or if @samp{/READNAMES=OFF} is
+the data from subsequent rows.  This is the default.
+If @subcmd{/READNAMES=OFF} is
 used, then the variables  receive automatically assigned names.
 
-The ASSUMEDVARWIDTH subcommand specifies the maximum width of string
+The @subcmd{ASSUMEDVARWIDTH} subcommand specifies the maximum width of string
 variables read  from the file.
 If omitted, the default value is determined from the length of the 
 string in the first spreadsheet cell for each variable.
 
 
+@node GET DATA /TYPE=PSQL
+@subsection Postgres Database Queries
+
+@display
+GET DATA /TYPE=PSQL
+         /CONNECT=@{@var{connection info}@}
+         /SQL=@{@var{query}@}
+         [/ASSUMEDVARWIDTH=@var{w}]
+         [/UNENCRYPTED]
+         [/BSIZE=@var{n}].
+@end display
+
+@cindex postgres
+@cindex databases
+
+The PSQL type is used to import data from a postgres database server.
+The server may be located locally or remotely.
+Variables are automatically created based on the table column names 
+or the names specified in the SQL query.
+Postgres data types of high precision, will loose precision when 
+imported into @pspp{}.
+Not all the postgres data types are able to be represented in @pspp{}.
+If a datum cannot be represented a warning will be issued and that 
+datum will be set to SYSMIS.
+
+The @subcmd{CONNECT} subcommand is mandatory.
+It is a string specifying the parameters of the database server from
+which the data should be fetched.
+The format of the string is given in the postgres manual
+@url{http://www.postgresql.org/docs/8.0/static/libpq.html#LIBPQ-CONNECT}.
+
+The @subcmd{SQL} subcommand is mandatory.
+It must be a valid SQL string to retrieve data from the database.
+
+The @subcmd{ASSUMEDVARWIDTH} subcommand specifies the maximum width of string
+variables read  from the database.
+If omitted, the default value is determined from the length of the 
+string in the first value read for each variable.
+
+The @subcmd{UNENCRYPTED} subcommand allows data to be retrieved over an insecure
+connection.
+If the connection is not encrypted, and the @subcmd{UNENCRYPTED} subcommand is 
+not given, then an error will occur.
+Whether or not the connection is
+encrypted depends upon the underlying psql library and the 
+capabilities of the database server.
+
+The @subcmd{BSIZE} subcommand serves only to optimise the speed of data transfer.
+It specifies an upper limit on
+number of cases to fetch from the database at once.
+The default value is 4096.
+If your SQL statement fetches a large number of cases but only a small number of
+variables, then the data transfer may be faster if you increase this value.
+Conversely, if the number of variables is large, or if the machine on which 
+@pspp{} is running has only a
+small amount of memory, then a smaller value will be better.
+
+
+The following syntax is an example:
+@example
+GET DATA /TYPE=PSQL
+     /CONNECT='host=example.com port=5432 dbname=product user=fred passwd=xxxx'
+     /SQL='select * from manufacturer'.
+@end example
+
+
+@node GET DATA /TYPE=TXT
+@subsection Textual Data Files
+
+@display
+GET DATA /TYPE=TXT
+        /FILE=@{'@var{file_name}',@var{file_handle}@}
+        [/ARRANGEMENT=@{DELIMITED,FIXED@}]
+        [/FIRSTCASE=@{@var{first_case}@}]
+        [/IMPORTCASE=@{ALL,FIRST @var{max_cases},PERCENT @var{percent}@}]
+        @dots{}additional subcommands depending on ARRANGEMENT@dots{}
+@end display
+
+@cindex text files
+@cindex data files
+When TYPE=TXT is specified, GET DATA reads data in a delimited or
+fixed columnar format, much like DATA LIST (@pxref{DATA LIST}).
+
+The @subcmd{FILE} subcommand is mandatory.  Specify the file to be read as 
+a string file name or (for textual data only) a
+file handle (@pxref{File Handles}).
+
+The @subcmd{ARRANGEMENT} subcommand determines the file's basic format.
+DELIMITED, the default setting, specifies that fields in the input
+data are separated by spaces, tabs, or other user-specified
+delimiters.  FIXED specifies that fields in the input data appear at
+particular fixed column positions within records of a case.
+
+By default, cases are read from the input file starting from the first
+line.  To skip lines at the beginning of an input file, set @subcmd{FIRSTCASE}
+to the number of the first line to read: 2 to skip the first line, 3
+to skip the first two lines, and so on.
+
+@subcmd{IMPORTCASE} can be used to limit the number of cases read from the
+input file.  With the default setting, ALL, all cases in the file are
+read.  Specify FIRST @var{max_cases} to read at most @var{max_cases} cases
+from the file.  Use @subcmd{PERCENT @var{percent}} to read only @var{percent}
+percent, approximately, of the cases contained in the file.  (The
+percentage is approximate, because there is no way to accurately count
+the number of cases in the file without reading the entire file.  The
+number of cases in some kinds of unusual files cannot be estimated;
+@pspp{} will read all cases in such files.)
+
+@subcmd{FIRSTCASE} and @subcmd{IMPORTCASE} may be used with delimited and fixed-format
+data.  The remaining subcommands, which apply only to one of the two  file
+arrangements, are described below.
+
+@menu
+* GET DATA /TYPE=TXT /ARRANGEMENT=DELIMITED::
+* GET DATA /TYPE=TXT /ARRANGEMENT=FIXED::
+@end menu
+
+@node GET DATA /TYPE=TXT /ARRANGEMENT=DELIMITED
+@subsubsection Reading Delimited Data
+
+@display
+GET DATA /TYPE=TXT
+        /FILE=@{'@var{file_name}',@var{file_handle}@}
+        [/ARRANGEMENT=@{DELIMITED,FIXED@}]
+        [/FIRSTCASE=@{@var{first_case}@}]
+        [/IMPORTCASE=@{ALL,FIRST @var{max_cases},PERCENT @var{percent}@}]
+
+        /DELIMITERS="@var{delimiters}"
+        [/QUALIFIER="@var{quotes}" [/ESCAPE]]
+        [/DELCASE=@{LINE,VARIABLES @var{n_variables}@}]
+        /VARIABLES=@var{del_var1} [@var{del_var2}]@dots{}
+where each @var{del_var} takes the form:
+        variable format
+@end display
+
+The GET DATA command with TYPE=TXT and ARRANGEMENT=DELIMITED reads
+input data from text files in delimited format, where fields are
+separated by a set of user-specified delimiters.  Its capabilities are
+similar to those of DATA LIST FREE (@pxref{DATA LIST FREE}), with a
+few enhancements.
+
+The required @subcmd{FILE} subcommand and optional @subcmd{FIRSTCASE} and @subcmd{IMPORTCASE}
+subcommands are described above (@pxref{GET DATA /TYPE=TXT}).
+
+@subcmd{DELIMITERS}, which is required, specifies the set of characters that
+may separate fields.  Each character in the string specified on
+@subcmd{DELIMITERS} separates one field from the next.  The end of a line also
+separates fields, regardless of @subcmd{DELIMITERS}.  Two consecutive
+delimiters in the input yield an empty field, as does a delimiter at
+the end of a line.  A space character as a delimiter is an exception:
+consecutive spaces do not yield an empty field and neither does any
+number of spaces at the end of a line.
+
+To use a tab as a delimiter, specify @samp{\t} at the beginning of the
+@subcmd{DELIMITERS} string.  To use a backslash as a delimiter, specify
+@samp{\\} as the first delimiter or, if a tab should also be a
+delimiter, immediately following @samp{\t}.  To read a data file in
+which each field appears on a separate line, specify the empty string
+for @subcmd{DELIMITERS}.
+
+The optional @subcmd{QUALIFIER} subcommand names one or more characters that
+can be used to quote values within fields in the input.  A field that
+begins with one of the specified quote characters ends at the next
+matching quote.  Intervening delimiters become part of the field,
+instead of terminating it.  The ability to specify more than one quote
+character is a @pspp{} extension.
+
+By default, a character specified on @subcmd{QUALIFIER} cannot itself be
+embedded within a field that it quotes, because the quote character
+always terminates the quoted field.  With ESCAPE, however, a doubled
+quote character within a quoted field inserts a single instance of the
+quote into the field.  For example, if @samp{'} is specified on
+@subcmd{QUALIFIER}, then without ESCAPE @code{'a''b'} specifies a pair of
+fields that contain @samp{a} and @samp{b}, but with ESCAPE it
+specifies a single field that contains @samp{a'b}.  ESCAPE is a @pspp{}
+extension.
+
+The @subcmd{DELCASE} subcommand controls how data may be broken across lines in
+the data file.  With LINE, the default setting, each line must contain
+all the data for exactly one case.  For additional flexibility, to
+allow a single case to be split among lines or multiple cases to be
+contained on a single line, specify VARIABLES @i{n_variables}, where
+@i{n_variables} is the number of variables per case.
+
+The @subcmd{VARIABLES} subcommand is required and must be the last subcommand.
+Specify the name of each variable and its input format (@pxref{Input
+and Output Formats}) in the order they should be read from the input
+file.
+
+@subsubheading Examples
+
+@noindent
+On a Unix-like system, the @samp{/etc/passwd} file has a format
+similar to this:
+
+@example
+root:$1$nyeSP5gD$pDq/:0:0:,,,:/root:/bin/bash
+blp:$1$BrP/pFg4$g7OG:1000:1000:Ben Pfaff,,,:/home/blp:/bin/bash
+john:$1$JBuq/Fioq$g4A:1001:1001:John Darrington,,,:/home/john:/bin/bash
+jhs:$1$D3li4hPL$88X1:1002:1002:Jason Stover,,,:/home/jhs:/bin/csh
+@end example
+
+@noindent
+The following syntax reads a file in the format used by
+@samp{/etc/passwd}:
+
+@c If you change this example, change the regression test in
+@c tests/language/data-io/get-data.at to match.
+@example
+GET DATA /TYPE=TXT /FILE='/etc/passwd' /DELIMITERS=':'
+        /VARIABLES=username A20
+                   password A40
+                   uid F10
+                   gid F10
+                   gecos A40
+                   home A40
+                   shell A40.
+@end example
+
+@noindent
+Consider the following data on used cars:
+
+@example
+model   year    mileage price   type    age
+Civic   2002    29883   15900   Si      2
+Civic   2003    13415   15900   EX      1
+Civic   1992    107000  3800    n/a     12
+Accord  2002    26613   17900   EX      1
+@end example
+
+@noindent
+The following syntax can be used to read the used car data:
+
+@c If you change this example, change the regression test in
+@c tests/language/data-io/get-data.at to match.
+@example
+GET DATA /TYPE=TXT /FILE='cars.data' /DELIMITERS=' ' /FIRSTCASE=2
+        /VARIABLES=model A8
+                   year F4
+                   mileage F6
+                   price F5
+                   type A4
+                   age F2.
+@end example
+
+@noindent
+Consider the following information on animals in a pet store:
+
+@example
+'Pet''s Name', "Age", "Color", "Date Received", "Price", "Height", "Type"
+, (Years), , , (Dollars), ,
+"Rover", 4.5, Brown, "12 Feb 2004", 80, '1''4"', "Dog"
+"Charlie", , Gold, "5 Apr 2007", 12.3, "3""", "Fish"
+"Molly", 2, Black, "12 Dec 2006", 25, '5"', "Cat"
+"Gilly", , White, "10 Apr 2007", 10, "3""", "Guinea Pig"
+@end example
+
+@noindent
+The following syntax can be used to read the pet store data:
+
+@c If you change this example, change the regression test in
+@c tests/language/data-io/get-data.at to match.
+@example
+GET DATA /TYPE=TXT /FILE='pets.data' /DELIMITERS=', ' /QUALIFIER='''"' /ESCAPE
+        /FIRSTCASE=3
+        /VARIABLES=name A10
+                   age F3.1
+                   color A5
+                   received EDATE10
+                   price F5.2
+                   height a5
+                   type a10.
+@end example
+
+@node GET DATA /TYPE=TXT /ARRANGEMENT=FIXED
+@subsubsection Reading Fixed Columnar Data
+
+@c (modify-syntax-entry ?_ "w")
+@c (modify-syntax-entry ?' "'")
+@c (modify-syntax-entry ?@ "'")
+
+@display
+GET DATA /TYPE=TXT
+        /FILE=@{'file_name',@var{file_handle}@}
+        [/ARRANGEMENT=@{DELIMITED,FIXED@}]
+        [/FIRSTCASE=@{@var{first_case}@}]
+        [/IMPORTCASE=@{ALL,FIRST @var{max_cases},PERCENT @var{percent}@}]
+
+        [/FIXCASE=@var{n}]
+        /VARIABLES @var{fixed_var} [@var{fixed_var}]@dots{}
+            [/rec# @var{fixed_var} [@var{fixed_var}]@dots{}]@dots{}
+where each @var{fixed_var} takes the form:
+        @var{variable} @var{start}-@var{end} @var{format}
+@end display
+
+The @cmd{GET DATA} command with TYPE=TXT and ARRANGEMENT=FIXED reads input
+data from text files in fixed format, where each field is located in
+particular fixed column positions within records of a case.  Its
+capabilities are similar to those of DATA LIST FIXED (@pxref{DATA LIST
+FIXED}), with a few enhancements.
+
+The required @subcmd{FILE} subcommand and optional @subcmd{FIRSTCASE} and @subcmd{IMPORTCASE}
+subcommands are described above (@pxref{GET DATA /TYPE=TXT}).
+
+The optional @subcmd{FIXCASE} subcommand may be used to specify the positive
+integer number of input lines that make up each case.  The default
+value is 1.
+
+The @subcmd{VARIABLES} subcommand, which is required, specifies the positions
+at which each variable can be found.  For each variable, specify its
+name, followed by its start and end column separated by @samp{-}
+(e.g.@: @samp{0-9}), followed by an input format type (e.g.@:
+@samp{F}) or a full format specification (e.g.@: @samp{DOLLAR12.2}).
+For this command, columns are numbered starting from 0 at
+the left column.  Introduce the variables in the second and later
+lines of a case by a slash followed by the number of the line within
+the case, e.g.@: @samp{/2} for the second line.
+
+@subsubheading Examples
+
+@noindent
+Consider the following data on used cars:
+
+@example
+model   year    mileage price   type    age
+Civic   2002    29883   15900   Si      2
+Civic   2003    13415   15900   EX      1
+Civic   1992    107000  3800    n/a     12
+Accord  2002    26613   17900   EX      1
+@end example
+
+@noindent
+The following syntax can be used to read the used car data:
+
+@c If you change this example, change the regression test in
+@c tests/language/data-io/get-data.at to match.
+@example
+GET DATA /TYPE=TXT /FILE='cars.data' /ARRANGEMENT=FIXED /FIRSTCASE=2
+        /VARIABLES=model 0-7 A
+                   year 8-15 F
+                   mileage 16-23 F
+                   price 24-31 F
+                   type 32-40 A
+                   age 40-47 F.
+@end example
+
 @node IMPORT
 @section IMPORT
 @vindex IMPORT
 
 @display
 IMPORT
-        /FILE='file-name'
+        /FILE='@var{file_name}'
         /TYPE=@{COMM,TAPE@}
-        /DROP=var_list
-        /KEEP=var_list
-        /RENAME=(src_names=target_names)@dots{}
+        /DROP=@var{var_list}
+        /KEEP=@var{var_list}
+        /RENAME=(@var{src_names}=@var{target_names})@dots{}
 @end display
 
-The @cmd{IMPORT} transformation clears the active file dictionary and
+The @cmd{IMPORT} transformation clears the active dataset dictionary and
 data and
-replaces them with a dictionary and data from a system, portable file,
-or scratch file.
+replaces them with a dictionary and data from a system file or
+portable file.
 
-The FILE subcommand, which is the only required subcommand, specifies
+The @subcmd{FILE} subcommand, which is the only required subcommand, specifies
 the portable file to be read as a file name string or a file handle
 (@pxref{File Handles}).
 
-The TYPE subcommand is currently not used.
+The @subcmd{TYPE} subcommand is currently not used.
 
-DROP, KEEP, and RENAME follow the syntax used by @cmd{GET} (@pxref{GET}).
+@subcmd{DROP}, @subcmd{KEEP}, and @subcmd{RENAME} follow the syntax used by @cmd{GET} (@pxref{GET}).
 
-@cmd{IMPORT} does not cause the data to be read, only the dictionary.  The
+@cmd{IMPORT} does not cause the data to be read; only the dictionary.  The
 data is read later, when a procedure is executed.
 
-Use of @cmd{IMPORT} to read a system file or scratch file is a PSPP
-extension.
-
-@node MATCH FILES
-@section MATCH FILES
-@vindex MATCH FILES
-
-@display
-MATCH FILES
-        /@{FILE,TABLE@}=@{*,'file-name'@}
-        /RENAME=(src_names=target_names)@dots{}
-        /IN=var_name
-
-        /BY=var_list
-        /DROP=var_list
-        /KEEP=var_list
-        /FIRST=var_name
-        /LAST=var_name
-        /MAP
-@end display
-
-@cmd{MATCH FILES} merges one or more system, portable, or scratch files,
-optionally
-including the active file.  Cases with the same values for BY
-variables are combined into a single case.  Cases with different
-values are output in order.  Thus, multiple sorted files are
-combined into a single sorted file based on the value of the BY
-variables.  The results of the merge become the new active file.
-
-Specify FILE with a system, portable, or scratch file as a file name
-string or file handle
-(@pxref{File Handles}), or with an asterisk (@samp{*}) to
-indicate the current active file.  The files specified on FILE are
-merged together based on the BY variables, or combined case-by-case if
-BY is not specified.
-
-Specify TABLE with a file to use it as a @dfn{table
-lookup file}.  Cases in table lookup files are not used up after
-they've been used once.  This means that data in table lookup files can
-correspond to any number of cases in FILE files.  Table lookup files
-correspond to lookup tables in traditional relational database systems.
-If a table lookup file contains more than one case with a given set of
-BY variables, only the first case is used.
-
-Any number of FILE and TABLE subcommands may be specified.
-Ordinarily, at least two FILE subcommands, or one FILE and at least
-one TABLE, should be specified.  Each instance of FILE or TABLE can be
-followed by any sequence of RENAME subcommands.  These have the same
-form and meaning as the corresponding subcommands of @cmd{GET}
-(@pxref{GET}), but apply only to variables in the given file.
-
-Each FILE or TABLE may optionally be followed by an IN subcommand,
-which creates a numeric variable with the specified name and format
-F1.0.  The IN variable takes value 1 in a case if the given file
-contributed a row to the merged file, 0 otherwise.  The DROP, KEEP,
-and RENAME subcommands do not affect IN variables.
-
-When more than one FILE or TABLE contains a variable with a given
-name, those variables must all have the same type (numeric or string)
-and, for string variables, the same width.  This rules applies to
-variable names after renaming with RENAME; thus, RENAME can be used to
-resolve conflicts.
-
-FILE and TABLE must be specified at the beginning of the command, with
-any RENAME or IN specifications immediately after the corresponding
-FILE or TABLE.  These subcommands are followed by BY, DROP, KEEP,
-FIRST, LAST, and MAP.
-
-The BY subcommand specifies a list of variables that are used to match
-cases from each of the files.  When TABLE or IN is used, BY is
-required; otherwise, it is optional.  When BY is specified, all the
-files named on FILE and TABLE subcommands must be sorted in ascending
-order of the BY variables.  Variables belonging to files that are not
-present for the current case are set to the system-missing value for
-numeric variables or spaces for string variables.
-
-The DROP and KEEP subcommands allow variables to be dropped from or
-reordered within the new active file.  These subcommands have the same
-form and meaning as the corresponding subcommands of @cmd{GET}
-(@pxref{GET}).  They apply to the new active file as a whole, not to
-individual input files.  The variable names specified on DROP and KEEP
-are those after any renaming with RENAME.
-
-The optional FIRST and LAST subcommands name variables that @cmd{MATCH
-FILES} adds to the active file.  The new variables are numeric with
-print and write format F1.0.  The value of the FIRST variable is 1 in
-the first case with a given set of values for the BY variables, and 0
-in other cases.  Similarly, the LAST variable is 1 in the last case
-with a given of BY values, and 0 in other cases.
-
-@cmd{MATCH FILES} may not be specified following @cmd{TEMPORARY}
-(@pxref{TEMPORARY}) if the active file is used as an input source.
-
-Use of portable or scratch files on @cmd{MATCH FILES} is a PSPP
-extension.
+Use of @cmd{IMPORT} to read a system file is a @pspp{} extension.
 
 @node SAVE
 @section SAVE
@@ -354,76 +677,212 @@ extension.
 
 @display
 SAVE
-        /OUTFILE=@{'file-name',file_handle@}
+        /OUTFILE=@{'@var{file_name}',@var{file_handle}@}
         /UNSELECTED=@{RETAIN,DELETE@}
         /@{COMPRESSED,UNCOMPRESSED@}
         /PERMISSIONS=@{WRITEABLE,READONLY@}
-        /DROP=var_list
-        /KEEP=var_list
-        /VERSION=version
-        /RENAME=(src_names=target_names)@dots{}
+        /DROP=@var{var_list}
+        /KEEP=@var{var_list}
+        /VERSION=@var{version}
+        /RENAME=(@var{src_names}=@var{target_names})@dots{}
         /NAMES
         /MAP
 @end display
 
 The @cmd{SAVE} procedure causes the dictionary and data in the active
-file to
-be written to a system file or scratch file.
+dataset to
+be written to a system file.
 
-OUTFILE is the only required subcommand.  Specify the system file or
-scratch file to be written as a string file name or a file handle
+OUTFILE is the only required subcommand.  Specify the system file
+to be written as a string file name or a file handle
 (@pxref{File Handles}).
 
 By default, cases excluded with FILTER are written to the system file.
-These can be excluded by specifying DELETE on the UNSELECTED
-subcommand.  Specifying RETAIN makes the default explicit.
+These can be excluded by specifying @subcmd{DELETE} on the @subcmd{UNSELECTED}
+subcommand.  Specifying @subcmd{RETAIN} makes the default explicit.
 
-The COMPRESS and UNCOMPRESS subcommand determine whether the saved
-system file is compressed.  By default, system files are compressed.
+The @subcmd{COMPRESS} and @subcmd{UNCOMPRESS} subcommand determine whether
+the saved system file is compressed.  By default, system files are compressed.
 This default can be changed with the SET command (@pxref{SET}).
 
-The PERMISSIONS subcommand specifies permissions for the new system
+The @subcmd{PERMISSIONS} subcommand specifies permissions for the new system
 file.  WRITEABLE, the default, creates the file with read and write
 permission.  READONLY creates the file for read-only access.
 
-By default, all the variables in the active file dictionary are written
-to the system file.  The DROP subcommand can be used to specify a list
+By default, all the variables in the active dataset dictionary are written
+to the system file.  The @subcmd{DROP} subcommand can be used to specify a list
 of variables not to be written.  In contrast, KEEP specifies variables
 to be written, with all variables not specified not written.
 
 Normally variables are saved to a system file under the same names they
-have in the active file.  Use the RENAME subcommand to change these names.
+have in the active dataset.  Use the @subcmd{RENAME} subcommand to change these names.
 Specify, within parentheses, a list of variable names followed by an
 equals sign (@samp{=}) and the names that they should be renamed to.
 Multiple parenthesized groups of variable names can be included on a
-single RENAME subcommand.  Variables' names may be swapped using a
-RENAME subcommand of the form @samp{/RENAME=(A B=B A)}.
+single @subcmd{RENAME} subcommand.  Variables' names may be swapped using a
+@subcmd{RENAME} subcommand of the 
+form @subcmd{/RENAME=(@var{A} @var{B}=@var{B} @var{A})}.
 
-Alternate syntax for the RENAME subcommand allows the parentheses to be
+Alternate syntax for the @subcmd{RENAME} subcommand allows the parentheses to be
 eliminated.  When this is done, only a single variable may be renamed at
-once.  For instance, @samp{/RENAME=A=B}.  This alternate syntax is
+once.  For instance, @subcmd{/RENAME=@var{A}=@var{B}}.  This alternate syntax is
 deprecated.
 
-DROP, KEEP, and RENAME are performed in left-to-right order.  They
+@subcmd{DROP}, @subcmd{KEEP}, and @subcmd{RENAME} are performed in
+left-to-right order.  They
 each may be present any number of times.  @cmd{SAVE} never modifies
-the active file.  DROP, KEEP, and RENAME only affect the system file
-written to disk.
+the active dataset.  @subcmd{DROP}, @subcmd{KEEP}, and @subcmd{RENAME} only
+affect the system file written to disk.
 
-The VERSION subcommand specifies the version of the file format. Valid
+The @subcmd{VERSION} subcommand specifies the version of the file format. Valid
 versions are 2 and 3.  The default version is 3.  In version 2 system
 files, variable names longer than 8 bytes will be truncated.  The two
 versions are otherwise identical.
 
-The NAMES and MAP subcommands are currently ignored.
+The @subcmd{NAMES} and @subcmd{MAP} subcommands are currently ignored.
 
 @cmd{SAVE} causes the data to be read.  It is a procedure.
 
+@node SAVE TRANSLATE
+@section SAVE TRANSLATE
+@vindex SAVE TRANSLATE
+
+@display
+SAVE TRANSLATE
+        /OUTFILE=@{'@var{file_name}',@var{file_handle}@}
+        /TYPE=@{CSV,TAB@}
+        [/REPLACE]
+        [/MISSING=@{IGNORE,RECODE@}]
+
+        [/DROP=@var{var_list}]
+        [/KEEP=@var{var_list}]
+        [/RENAME=(@var{src_names}=@var{target_names})@dots{}]
+        [/UNSELECTED=@{RETAIN,DELETE@}]
+        [/MAP]
+
+        @dots{}additional subcommands depending on TYPE@dots{}
+@end display
+
+The @cmd{SAVE TRANSLATE} command is used to save data into various
+formats understood by other applications.
+
+The @subcmd{OUTFILE} and @subcmd{TYPE} subcommands are mandatory.
+@subcmd{OUTFILE} specifies the file to be written, as a string file name or a file handle
+(@pxref{File Handles}).  @subcmd{TYPE} determines the type of the file or
+source to read.  It must be one of the following:
+
+@table @asis
+@item CSV
+Comma-separated value format,
+
+@item TAB
+Tab-delimited format.
+@end table
+
+By default, @cmd{SAVE TRANSLATE} will not overwrite an existing file.  Use
+@subcmd{REPLACE} to force an existing file to be overwritten.
+
+With MISSING=IGNORE, the default, @subcmd{SAVE TRANSLATE} treats user-missing
+values as if they were not missing.  Specify MISSING=RECODE to output
+numeric user-missing values like system-missing values and string
+user-missing values as all spaces.
+
+By default, all the variables in the active dataset dictionary are saved
+to the system file, but @subcmd{DROP} or @subcmd{KEEP} can select a subset of variable
+to save.  The @subcmd{RENAME} subcommand can also be used to change the names
+under which variables are saved.  @subcmd{UNSELECTED} determines whether cases
+filtered out by the @cmd{FILTER} command are written to the output file.
+These subcommands have the same syntax and meaning as on the
+@cmd{SAVE} command (@pxref{SAVE}).
+
+Each supported file type has additional subcommands, explained in
+separate sections below.
+
+@cmd{SAVE TRANSLATE} causes the data to be read.  It is a procedure.
+
+@menu
+* SAVE TRANSLATE /TYPE=CSV and TYPE=TAB::
+@end menu
+
+@node SAVE TRANSLATE /TYPE=CSV and TYPE=TAB
+@subsection Writing Comma- and Tab-Separated Data Files
+
+@display
+SAVE TRANSLATE
+        /OUTFILE=@{'@var{file_name}',@var{file_handle}@}
+        /TYPE=CSV
+        [/REPLACE]
+        [/MISSING=@{IGNORE,RECODE@}]
+
+        [/DROP=@var{var_list}]
+        [/KEEP=@var{var_list}]
+        [/RENAME=(@var{src_names}=@var{target_names})@dots{}]
+        [/UNSELECTED=@{RETAIN,DELETE@}]
+
+        [/FIELDNAMES]
+        [/CELLS=@{VALUES,LABELS@}]
+        [/TEXTOPTIONS DELIMITER='@var{delimiter}']
+        [/TEXTOPTIONS QUALIFIER='@var{qualifier}']
+        [/TEXTOPTIONS DECIMAL=@{DOT,COMMA@}]
+        [/TEXTOPTIONS FORMAT=@{PLAIN,VARIABLE@}]
+@end display
+
+The SAVE TRANSLATE command with TYPE=CSV or TYPE=TAB writes data in a
+comma- or tab-separated value format similar to that described by
+RFC@tie{}4180.  Each variable becomes one output column, and each case
+becomes one line of output.  If FIELDNAMES is specified, an additional
+line at the top of the output file lists variable names.
+
+The CELLS and TEXTOPTIONS FORMAT settings determine how values are
+written to the output file:
+
+@table @asis
+@item CELLS=VALUES FORMAT=PLAIN (the default settings)
+Writes variables to the output in ``plain'' formats that ignore the
+details of variable formats.  Numeric values are written as plain
+decimal numbers with enough digits to indicate their exact values in
+machine representation.  Numeric values include @samp{e} followed by
+an exponent if the exponent value would be less than -4 or greater
+than 16.  Dates are written in MM/DD/YYYY format and times in HH:MM:SS
+format.  WKDAY and MONTH values are written as decimal numbers.
+
+Numeric values use, by default, the decimal point character set with
+SET DECIMAL (@pxref{SET DECIMAL}).  Use DECIMAL=DOT or DECIMAL=COMMA
+to force a particular decimal point character.
+
+@item CELLS=VALUES FORMAT=VARIABLE
+Writes variables using their print formats.  Leading and trailing
+spaces are removed from numeric values, and trailing spaces are
+removed from string values.
+
+@item CELLS=LABEL FORMAT=PLAIN
+@itemx CELLS=LABEL FORMAT=VARIABLE
+Writes value labels where they exist, and otherwise writes the values
+themselves as described above.
+@end table
+
+Regardless of CELLS and TEXTOPTIONS FORMAT, numeric system-missing
+values are output as a single space.
+
+For TYPE=TAB, tab characters delimit values.  For TYPE=CSV, the
+TEXTOPTIONS DELIMITER and DECIMAL settings determine the character
+that separate values within a line.  If DELIMITER is specified, then
+the specified string separate values.  If DELIMITER is not specified,
+then the default is a comma with DECIMAL=DOT or a semicolon with
+DECIMAL=COMMA.  If DECIMAL is not given either, it is implied by the
+decimal point character set with SET DECIMAL (@pxref{SET DECIMAL}).
+
+The TEXTOPTIONS QUALIFIER setting specifies a character that is output
+before and after a value that contains the delimiter character or the
+qualifier character.  The default is a double quote (@samp{@@}).  A
+qualifier character that appears within a value is doubled.
+
 @node SYSFILE INFO
 @section SYSFILE INFO
 @vindex SYSFILE INFO
 
 @display 
-SYSFILE INFO FILE='file-name'.
+SYSFILE INFO FILE='@var{file_name}'.
 @end display
 
 @cmd{SYSFILE INFO} reads the dictionary in a system file and
@@ -432,7 +891,7 @@ displays the information in its dictionary.
 Specify a file name or file handle.  @cmd{SYSFILE INFO} reads that file as
 a system file and displays information on its dictionary.
 
-@cmd{SYSFILE INFO} does not affect the current active file.
+@cmd{SYSFILE INFO} does not affect the current active dataset.
 
 @node XEXPORT
 @section XEXPORT
@@ -440,19 +899,19 @@ a system file and displays information on its dictionary.
 
 @display
 XEXPORT
-        /OUTFILE='file-name'
-        /DIGITS=n
-        /DROP=var_list
-        /KEEP=var_list
-        /RENAME=(src_names=target_names)@dots{}
+        /OUTFILE='@var{file_name}'
+        /DIGITS=@var{n}
+        /DROP=@var{var_list}
+        /KEEP=@var{var_list}
+        /RENAME=(@var{src_names}=@var{target_names})@dots{}
         /TYPE=@{COMM,TAPE@}
         /MAP
 @end display
 
-The @cmd{EXPORT} transformation writes the active file dictionary and
+The @cmd{EXPORT} transformation writes the active dataset dictionary and
 data to a specified portable file.
 
-This transformation is a PSPP extension.
+This transformation is a @pspp{} extension.
 
 It is similar to the @cmd{EXPORT} procedure, with two differences:
 
@@ -462,7 +921,7 @@ It is similar to the @cmd{EXPORT} procedure, with two differences:
 the data is read by a procedure or procedure-like command.
 
 @item
-@cmd{XEXPORT} does not support the UNSELECTED subcommand.
+@cmd{XEXPORT} does not support the @subcmd{UNSELECTED} subcommand.
 @end itemize
 
 @xref{EXPORT}, for more information.
@@ -473,19 +932,19 @@ the data is read by a procedure or procedure-like command.
 
 @display
 XSAVE
-        /OUTFILE='file-name'
+        /OUTFILE='@var{file_name}'
         /@{COMPRESSED,UNCOMPRESSED@}
         /PERMISSIONS=@{WRITEABLE,READONLY@}
-        /DROP=var_list
-        /KEEP=var_list
-        /VERSION=version
-        /RENAME=(src_names=target_names)@dots{}
+        /DROP=@var{var_list}
+        /KEEP=@var{var_list}
+        /VERSION=@var{version}
+        /RENAME=(@var{src_names}=@var{target_names})@dots{}
         /NAMES
         /MAP
 @end display
 
-The @cmd{XSAVE} transformation writes the active file dictionary and
-data to a system file or scratch file.  It is similar to the @cmd{SAVE}
+The @cmd{XSAVE} transformation writes the active dataset's dictionary and
+data to a system file.  It is similar to the @cmd{SAVE}
 procedure, with two differences:
 
 @itemize
@@ -494,8 +953,7 @@ procedure, with two differences:
 the data is read by a procedure or procedure-like command.
 
 @item
-@cmd{XSAVE} does not support the UNSELECTED subcommand.
+@cmd{XSAVE} does not support the @subcmd{UNSELECTED} subcommand.
 @end itemize
 
 @xref{SAVE}, for more information.
-@setfilename ignored