27181b3cde64b1fe62b54c2b62be1296a1feaa14
[pspp] / doc / transformation.texi
1 @node Data Manipulation
2 @chapter Data transformations
3 @cindex transformations
4
5 The PSPP procedures examined in this chapter manipulate data and
6 prepare the active file for later analyses.  They do not produce output,
7 as a rule.
8
9 @menu
10 * AGGREGATE::                   Summarize multiple cases into a single case.
11 * AUTORECODE::                  Automatic recoding of variables.
12 * COMPUTE::                     Assigning a variable a calculated value.
13 * COUNT::                       Counting variables with particular values.
14 * FLIP::                        Exchange variables with cases.
15 * IF::                          Conditionally assigning a calculated value.
16 * RECODE::                      Mapping values from one set to another.
17 * SORT CASES::                  Sort the active file.
18 @end menu
19
20 @node AGGREGATE
21 @section AGGREGATE
22 @vindex AGGREGATE
23
24 @display
25 AGGREGATE 
26         OUTFILE=@{*,'file-name',file_handle@} [MODE=@{REPLACE, ADDVARIABLES@}]
27         /PRESORTED
28         /DOCUMENT
29         /MISSING=COLUMNWISE
30         /BREAK=var_list
31         /dest_var['label']@dots{}=agr_func(src_vars, args@dots{})@dots{}
32 @end display
33
34 @cmd{AGGREGATE} summarizes groups of cases into single cases.
35 Cases are divided into groups that have the same values for one or more
36 variables called @dfn{break variables}.  Several functions are available
37 for summarizing case contents.
38
39 The OUTFILE subcommand is required and must appear first.  Specify a
40 system file, portable file, or scratch file by file name or file
41 handle (@pxref{File Handles}).
42 The aggregated cases are written to this file.  If @samp{*} is
43 specified, then the aggregated cases replace the active file.
44 Use of OUTFILE to write a portable file or scratch file is a PSPP extension.
45
46 If OUTFILE=@samp{*} is given, then the subcommand MODE may also be
47 specified.
48 The mode subcommand has two possible values: ADDVARIABLES or REPLACE.
49 In REPLACE mode, the entire active file is replaced by a new file
50 which contains just the break variables and the destination varibles.
51 In this mode, the new file will contain as many cases as there are
52 unique combinations of the break variables.
53 In ADDVARIABLES mode, the destination variables will be appended to 
54 the existing active file.
55 Cases which have identical combinations of values in their break
56 variables, will receive identical values for the destination variables.
57 The number of cases in the active file will remain unchanged.
58 Note that if ADDVARIABLES is specified, then the data @emph{must} be
59 sorted on the break variables.
60
61 By default, the active file will be sorted based on the break variables
62 before aggregation takes place.  If the active file is already sorted
63 or otherwise grouped in terms of the break variables, specify
64 PRESORTED to save time.
65 PRESORTED is assumed if MODE=ADDVARIABLES is used.
66
67 Specify DOCUMENT to copy the documents from the active file into the
68 aggregate file (@pxref{DOCUMENT}).  Otherwise, the aggregate file will
69 not contain any documents, even if the aggregate file replaces the
70 active file.
71
72 Normally, only a single case (for SD and SD., two cases) need be
73 non-missing in each group for the aggregate variable to be
74 non-missing.  Specifying /MISSING=COLUMNWISE inverts this behavior, so
75 that the aggregate variable becomes missing if any aggregated value is
76 missing.
77
78 If PRESORTED, DOCUMENT, or MISSING are specified, they must appear
79 between OUTFILE and BREAK.
80
81 At least one break variable must be specified on BREAK, a
82 required subcommand.  The values of these variables are used to divide
83 the active file into groups to be summarized.  In addition, at least
84 one @var{dest_var} must be specified.
85
86 One or more sets of aggregation variables must be specified.  Each set
87 comprises a list of aggregation variables, an equals sign (@samp{=}),
88 the name of an aggregation function (see the list below), and a list
89 of source variables in parentheses.  Some aggregation functions expect
90 additional arguments following the source variable names.
91
92 Aggregation variables typically are created with no variable label,
93 value labels, or missing values.  Their default print and write
94 formats depend on the aggregation function used, with details given in
95 the table below.  A variable label for an aggregation variable may be
96 specified just after the variable's name in the aggregation variable
97 list.
98
99 Each set must have exactly as many source variables as aggregation
100 variables.  Each aggregation variable receives the results of applying
101 the specified aggregation function to the corresponding source
102 variable.  The MEAN, MEDIAN, SD, and SUM aggregation functions may only be
103 applied to numeric variables.  All the rest may be applied to numeric
104 and string variables.
105
106 The available aggregation functions are as follows:
107
108 @table @asis
109 @item FGT(var_name, value)
110 Fraction of values greater than the specified constant.  The default
111 format is F5.3.
112
113 @item FIN(var_name, low, high)
114 Fraction of values within the specified inclusive range of constants.
115 The default format is F5.3.
116
117 @item FLT(var_name, value)
118 Fraction of values less than the specified constant.  The default
119 format is F5.3.
120
121 @item FIRST(var_name)
122 First non-missing value in break group.  The aggregation variable
123 receives the complete dictionary information from the source variable.
124 The sort performed by AGGREGATE (and by SORT CASES) is stable, so that
125 the first case with particular values for the break variables before
126 sorting will also be the first case in that break group after sorting.
127
128 @item FOUT(var_name, low, high)
129 Fraction of values strictly outside the specified range of constants.
130 The default format is F5.3.
131
132 @item LAST(var_name)
133 Last non-missing value in break group.  The aggregation variable
134 receives the complete dictionary information from the source variable.
135 The sort performed by AGGREGATE (and by SORT CASES) is stable, so that
136 the last case with particular values for the break variables before
137 sorting will also be the last case in that break group after sorting.
138
139 @item MAX(var_name)
140 Maximum value.  The aggregation variable receives the complete
141 dictionary information from the source variable.
142
143 @item MEAN(var_name)
144 Arithmetic mean.  Limited to numeric values.  The default format is
145 F8.2.
146
147 @item MEDIAN(var_name)
148 The median value.  Limited to numeric values.  The default format is F8.2.
149
150 @item MIN(var_name)
151 Minimum value.  The aggregation variable receives the complete
152 dictionary information from the source variable.
153
154 @item N(var_name)
155 Number of non-missing values.  The default format is F7.0 if weighting
156 is not enabled, F8.2 if it is (@pxref{WEIGHT}).
157
158 @item N
159 Number of cases aggregated to form this group.  The default format is
160 F7.0 if weighting is not enabled, F8.2 if it is (@pxref{WEIGHT}).
161
162 @item NMISS(var_name)
163 Number of missing values.  The default format is F7.0 if weighting is
164 not enabled, F8.2 if it is (@pxref{WEIGHT}).
165
166 @item NU(var_name)
167 Number of non-missing values.  Each case is considered to have a weight
168 of 1, regardless of the current weighting variable (@pxref{WEIGHT}).
169 The default format is F7.0.
170
171 @item NU
172 Number of cases aggregated to form this group.  Each case is considered
173 to have a weight of 1, regardless of the current weighting variable.
174 The default format is F7.0.
175
176 @item NUMISS(var_name)
177 Number of missing values.  Each case is considered to have a weight of
178 1, regardless of the current weighting variable.  The default format is F7.0.
179
180 @item PGT(var_name, value)
181 Percentage between 0 and 100 of values greater than the specified
182 constant.  The default format is F5.1.
183
184 @item PIN(var_name, low, high)
185 Percentage of values within the specified inclusive range of
186 constants.  The default format is F5.1.
187
188 @item PLT(var_name, value)
189 Percentage of values less than the specified constant.  The default
190 format is F5.1.
191
192 @item POUT(var_name, low, high)
193 Percentage of values strictly outside the specified range of
194 constants.  The default format is F5.1.
195
196 @item SD(var_name)
197 Standard deviation of the mean.  Limited to numeric values.  The
198 default format is F8.2.
199
200 @item SUM(var_name)
201 Sum.  Limited to numeric values.  The default format is F8.2.
202 @end table
203
204 Aggregation functions compare string values in terms of internal
205 character codes.  On most modern computers, this is a form of ASCII.
206
207 The aggregation functions listed above exclude all user-missing values
208 from calculations.  To include user-missing values, insert a period
209 (@samp{.}) at the end of the function name.  (e.g.@: @samp{SUM.}).
210 (Be aware that specifying such a function as the last token on a line
211 will cause the period to be interpreted as the end of the command.)
212
213 @cmd{AGGREGATE} both ignores and cancels the current @cmd{SPLIT FILE}
214 settings (@pxref{SPLIT FILE}).
215
216 @node AUTORECODE
217 @section AUTORECODE
218 @vindex AUTORECODE
219
220 @display
221 AUTORECODE VARIABLES=src_vars INTO dest_vars
222         /DESCENDING
223         /PRINT
224 @end display
225
226 The @cmd{AUTORECODE} procedure considers the @var{n} values that a variable
227 takes on and maps them onto values 1@dots{}@var{n} on a new numeric
228 variable.
229
230 Subcommand VARIABLES is the only required subcommand and must come
231 first.  Specify VARIABLES, an equals sign (@samp{=}), a list of source
232 variables, INTO, and a list of target variables.  There must the same
233 number of source and target variables.  The target variables must not
234 already exist.
235
236 By default, increasing values of a source variable (for a string, this
237 is based on character code comparisons) are recoded to increasing values
238 of its target variable.  To cause increasing values of a source variable
239 to be recoded to decreasing values of its target variable (@var{n} down
240 to 1), specify DESCENDING.
241
242 PRINT is currently ignored.
243
244 @cmd{AUTORECODE} is a procedure.  It causes the data to be read.
245
246 @node COMPUTE
247 @section COMPUTE
248 @vindex COMPUTE
249
250 @display
251 COMPUTE variable = expression.
252   or
253 COMPUTE vector(index) = expression.
254 @end display
255
256 @cmd{COMPUTE} assigns the value of an expression to a target
257 variable.  For each case, the expression is evaluated and its value
258 assigned to the target variable.  Numeric and string
259 variables may be assigned.  When a string expression's width differs
260 from the target variable's width, the string result of the expression
261 is truncated or padded with spaces on the right as necessary.  The
262 expression and variable types must match.
263
264 For numeric variables only, the target variable need not already
265 exist.  Numeric variables created by @cmd{COMPUTE} are assigned an
266 @code{F8.2} output format.  String variables must be declared before
267 they can be used as targets for @cmd{COMPUTE}.
268
269 The target variable may be specified as an element of a vector
270 (@pxref{VECTOR}).  In this case, a vector index expression must be
271 specified in parentheses following the vector name.  The index
272 expression must evaluate to a numeric value that, after rounding down
273 to the nearest integer, is a valid index for the named vector.
274
275 Using @cmd{COMPUTE} to assign to a variable specified on @cmd{LEAVE}
276 (@pxref{LEAVE}) resets the variable's left state.  Therefore,
277 @code{LEAVE} should be specified following @cmd{COMPUTE}, not before.
278
279 @cmd{COMPUTE} is a transformation.  It does not cause the active file to be
280 read.
281
282 When @cmd{COMPUTE} is specified following @cmd{TEMPORARY}
283 (@pxref{TEMPORARY}), the @cmd{LAG} function may not be used
284 (@pxref{LAG}).
285
286 @node COUNT
287 @section COUNT
288 @vindex COUNT
289
290 @display
291 COUNT var_name = var@dots{} (value@dots{}).
292
293 Each value takes one of the following forms:
294         number
295         string
296         num1 THRU num2
297         MISSING
298         SYSMIS
299 In addition, num1 and num2 can be LO or LOWEST, or HI or HIGHEST,
300 respectively.
301 @end display
302
303 @cmd{COUNT} creates or replaces a numeric @dfn{target} variable that
304 counts the occurrence of a @dfn{criterion} value or set of values over
305 one or more @dfn{test} variables for each case.
306
307 The target variable values are always nonnegative integers.  They are
308 never missing.  The target variable is assigned an F8.2 output format.
309 @xref{Input and Output Formats}.  Any variables, including
310 string variables, may be test variables.
311
312 User-missing values of test variables are treated just like any other
313 values.  They are @strong{not} treated as system-missing values.
314 User-missing values that are criterion values or inside ranges of
315 criterion values are counted as any other values.  However (for numeric
316 variables), keyword MISSING may be used to refer to all system-
317 and user-missing values.
318
319 @cmd{COUNT} target variables are assigned values in the order
320 specified.  In the command @code{COUNT A=A B(1) /B=A B(2).}, the
321 following actions occur:
322
323 @itemize @minus
324 @item
325 The number of occurrences of 1 between @code{A} and @code{B} is counted.
326
327 @item
328 @code{A} is assigned this value.
329
330 @item
331 The number of occurrences of 1 between @code{B} and the @strong{new}
332 value of @code{A} is counted.
333
334 @item
335 @code{B} is assigned this value.
336 @end itemize
337
338 Despite this ordering, all @cmd{COUNT} criterion variables must exist
339 before the procedure is executed---they may not be created as target
340 variables earlier in the command!  Break such a command into two
341 separate commands.
342
343 The examples below may help to clarify.
344
345 @enumerate A
346 @item
347 Assuming @code{Q0}, @code{Q2}, @dots{}, @code{Q9} are numeric variables,
348 the following commands:
349
350 @enumerate
351 @item
352 Count the number of times the value 1 occurs through these variables
353 for each case and assigns the count to variable @code{QCOUNT}.  
354
355 @item
356 Print out the total number of times the value 1 occurs throughout
357 @emph{all} cases using @cmd{DESCRIPTIVES}.  @xref{DESCRIPTIVES}, for
358 details.
359 @end enumerate
360
361 @example
362 COUNT QCOUNT=Q0 TO Q9(1).
363 DESCRIPTIVES QCOUNT /STATISTICS=SUM.
364 @end example
365
366 @item
367 Given these same variables, the following commands:
368
369 @enumerate
370 @item
371 Count the number of valid values of these variables for each case and
372 assigns the count to variable @code{QVALID}.
373
374 @item
375 Multiplies each value of @code{QVALID} by 10 to obtain a percentage of
376 valid values, using @cmd{COMPUTE}.  @xref{COMPUTE}, for details.
377
378 @item
379 Print out the percentage of valid values across all cases, using
380 @cmd{DESCRIPTIVES}.  @xref{DESCRIPTIVES}, for details.
381 @end enumerate
382
383 @example
384 COUNT QVALID=Q0 TO Q9 (LO THRU HI).
385 COMPUTE QVALID=QVALID*10.
386 DESCRIPTIVES QVALID /STATISTICS=MEAN.
387 @end example
388 @end enumerate
389
390 @node FLIP
391 @section FLIP
392 @vindex FLIP
393
394 @display
395 FLIP /VARIABLES=var_list /NEWNAMES=var_name.
396 @end display
397
398 @cmd{FLIP} transposes rows and columns in the active file.  It
399 causes cases to be swapped with variables, and vice versa.
400
401 All variables in the transposed active file are numeric.  String
402 variables take on the system-missing value in the transposed file.
403
404 No subcommands are required.  If specified, the VARIABLES subcommand
405 selects variables to be transformed into cases, and variables not
406 specified are discarded.  If the VARIABLES subcommand is omitted, all
407 variables are selected for transposition.
408
409 The variables specified by NEWNAMES, which must be a string variable, is
410 used to give names to the variables created by @cmd{FLIP}.  Only the
411 first 8 characters of the variable are used.  If
412 NEWNAMES is not
413 specified then the default is a variable named CASE_LBL, if it exists.
414 If it does not then the variables created by FLIP are named VAR000
415 through VAR999, then VAR1000, VAR1001, and so on.
416
417 When a NEWNAMES variable is available, the names must be canonicalized
418 before becoming variable names.  Invalid characters are replaced by
419 letter @samp{V} in the first position, or by @samp{_} in subsequent
420 positions.  If the name thus generated is not unique, then numeric
421 extensions are added, starting with 1, until a unique name is found or
422 there are no remaining possibilities.  If the latter occurs then the
423 FLIP operation aborts.
424
425 The resultant dictionary contains a CASE_LBL variable, a string
426 variable of width 8, which stores the names of the variables in the
427 dictionary before the transposition.  Variables names longer than 8
428 characters are truncated.  If the active file is subsequently
429 transposed using @cmd{FLIP}, this variable can be used to recreate the
430 original variable names.
431
432 FLIP honors @cmd{N OF CASES} (@pxref{N OF CASES}).  It ignores
433 @cmd{TEMPORARY} (@pxref{TEMPORARY}), so that ``temporary''
434 transformations become permanent.
435
436 @node IF
437 @section IF
438 @vindex IF
439
440 @display
441 IF condition variable=expression.
442   or
443 IF condition vector(index)=expression.
444 @end display
445
446 The @cmd{IF} transformation conditionally assigns the value of a target
447 expression to a target variable, based on the truth of a test
448 expression.
449
450 Specify a boolean-valued expression (@pxref{Expressions}) to be tested
451 following the IF keyword.  This expression is evaluated for each case.
452 If the value is true, then the value of the expression is computed and
453 assigned to the specified variable.  If the value is false or missing,
454 nothing is done.  Numeric and string variables may be
455 assigned.  When a string expression's width differs from the target
456 variable's width, the string result of the expression is truncated or
457 padded with spaces on the right as necessary.  The expression and
458 variable types must match.
459
460 The target variable may be specified as an element of a vector
461 (@pxref{VECTOR}).  In this case, a vector index expression must be
462 specified in parentheses following the vector name.  The index
463 expression must evaluate to a numeric value that, after rounding down
464 to the nearest integer, is a valid index for the named vector.
465
466 Using @cmd{IF} to assign to a variable specified on @cmd{LEAVE}
467 (@pxref{LEAVE}) resets the variable's left state.  Therefore,
468 @code{LEAVE} should be specified following @cmd{IF}, not before.
469
470 When @cmd{IF} is specified following @cmd{TEMPORARY}
471 (@pxref{TEMPORARY}), the @cmd{LAG} function may not be used
472 (@pxref{LAG}).
473
474 @node RECODE
475 @section RECODE
476 @vindex RECODE
477
478 @display
479 RECODE var_list (src_value@dots{}=dest_value)@dots{} [INTO var_list].
480
481 src_value may take the following forms:
482         number
483         string
484         num1 THRU num2
485         MISSING
486         SYSMIS
487         ELSE
488 Open-ended ranges may be specified using LO or LOWEST for num1
489 or HI or HIGHEST for num2.
490
491 dest_value may take the following forms:
492         num
493         string
494         SYSMIS
495         COPY
496 @end display
497
498 @cmd{RECODE} translates data from one range of values to
499 another, via flexible user-specified mappings.  Data may be remapped
500 in-place or copied to new variables.  Numeric and
501 string data can be recoded.
502
503 Specify the list of source variables, followed by one or more mapping
504 specifications each enclosed in parentheses.  If the data is to be
505 copied to new variables, specify INTO, then the list of target
506 variables.  String target variables must already have been declared
507 using @cmd{STRING} or another transformation, but numeric target
508 variables can
509 be created on the fly.  There must be exactly as many target variables
510 as source variables.  Each source variable is remapped into its
511 corresponding target variable.
512
513 When INTO is not used, the input and output variables must be of the
514 same type.  Otherwise, string values can be recoded into numeric values,
515 and vice versa.  When this is done and there is no mapping for a
516 particular value, either a value consisting of all spaces or the
517 system-missing value is assigned, depending on variable type.
518
519 Mappings are considered from left to right.  The first src_value that
520 matches the value of the source variable causes the target variable to
521 receive the value indicated by the dest_value.  Literal number, string,
522 and range src_value's should be self-explanatory.  MISSING as a
523 src_value matches any user- or system-missing value.  SYSMIS matches the
524 system missing value only.  ELSE is a catch-all that matches anything.
525 It should be the last src_value specified.
526
527 Numeric and string dest_value's should be self-explanatory.  COPY
528 causes the input values to be copied to the output.  This is only valid
529 if the source and target variables are of the same type.  SYSMIS
530 indicates the system-missing value.
531
532 If the source variables are strings and the target variables are
533 numeric, then there is one additional mapping available: (CONVERT),
534 which must be the last specified mapping.  CONVERT causes a number
535 specified as a string to be converted to a numeric value.  If the string
536 cannot be parsed as a number, then the system-missing value is assigned.
537
538 Multiple recodings can be specified on a single @cmd{RECODE} invocation.
539 Introduce additional recodings with a slash (@samp{/}) to
540 separate them from the previous recodings.
541
542 @node SORT CASES
543 @section SORT CASES
544 @vindex SORT CASES
545
546 @display
547 SORT CASES BY var_list[(@{D|A@}] [ var_list[(@{D|A@}] ] ...
548 @end display
549
550 @cmd{SORT CASES} sorts the active file by the values of one or more
551 variables.
552
553 Specify BY and a list of variables to sort by.  By default, variables
554 are sorted in ascending order.  To override sort order, specify (D) or
555 (DOWN) after a list of variables to get descending order, or (A) or (UP)
556 for ascending order.  These apply to all the listed variables
557 up until the preceding (A), (D), (UP) or (DOWN).
558
559 The sort algorithms used by @cmd{SORT CASES} are stable.  That is,
560 records that have equal values of the sort variables will have the
561 same relative order before and after sorting.  As a special case,
562 re-sorting an already sorted file will not affect the ordering of
563 cases.
564
565 @cmd{SORT CASES} is a procedure.  It causes the data to be read.
566
567 @cmd{SORT CASES} attempts to sort the entire active file in main memory.
568 If workspace is exhausted, it falls back to a merge sort algorithm that
569 involves creates numerous temporary files.
570
571 @cmd{SORT CASES} may not be specified following TEMPORARY.