Next: , Previous: File Header Record, Up: Data File Format



D.2 Variable Record

Immediately following the header must come the variable records. There must be one variable record for every variable and every 8 characters in a long string beyond the first 8; i.e., there must be exactly as many variable records as the value specified for case_size in the file header record.

     struct sysfile_variable
       {
         int32               rec_type;
         int32               type;
         int32               has_var_label;
         int32               n_missing_values;
         int32               print;
         int32               write;
         char                name[8];
     
         /* The following two fields are present
            only if has_var_label is 1. */
         int32               label_len;
         char                label[/* variable length */];
     
         /* The following field is present only
            if n_missing_values is not 0. */
         flt64               missing_values[/* variable length*/];
       };
int32 rec_type;
Record type code. Always set to 2.
int32 type;
Variable type code. Set to 0 for a numeric variable. For a short string variable or the first part of a long string variable, this is set to the width of the string. For the second and subsequent parts of a long string variable, set to -1, and the remaining fields in the structure are ignored.
int32 has_var_label;
If this variable has a variable label, set to 1; otherwise, set to 0.
int32 n_missing_values;
If the variable has no missing values, set to 0. If the variable has one, two, or three discrete missing values, set to 1, 2, or 3, respectively. If the variable has a range for missing variables, set to -2; if the variable has a range for missing variables plus a single discrete value, set to -3.
int32 print;
Print format for this variable. See below.
int32 write;
Write format for this variable. See below.
char name[8];
Variable name. The variable name must begin with a capital letter or the at-sign (@). Subsequent characters may also be octothorpes (#), dollar signs ($), underscores (_), or full stops (.). The variable name is padded on the right with spaces.
int32 label_len;
This field is present only if has_var_label is set to 1. It is set to the length, in characters, of the variable label, which must be a number between 0 and 120.
char label[/* variable length */];
This field is present only if has_var_label is set to 1. It has length label_len, rounded up to the nearest multiple of 32 bits. The first label_len characters are the variable's variable label.
flt64 missing_values[/* variable length */];
This field is present only if n_missing_values is not 0. It has the same number of elements as the absolute value of n_missing_values. For discrete missing values, each element represents one missing value. When a range is present, the first element denotes the minimum value in the range, and the second element denotes the maximum value in the range. When a range plus a value are present, the third element denotes the additional discrete missing value. HIGHEST and LOWEST are indicated as described in the chapter introduction.

The print and write members of sysfile_variable are output formats coded into int32 types. The LSB (least-significant byte) of the int32 represents the number of decimal places, and the next two bytes in order of increasing significance represent field width and format type, respectively. The MSB (most-significant byte) is not used and should be set to zero.

Format types are defined as follows:

0
Not used.
1
A
2
AHEX
3
COMMA
4
DOLLAR
5
F
6
IB
7
PIBHEX
8
P
9
PIB
10
PK
11
RB
12
RBHEX
13
Not used.
14
Not used.
15
Z
16
N
17
E
18
Not used.
19
Not used.
20
DATE
21
TIME
22
DATETIME
23
ADATE
24
JDATE
25
DTIME
26
WKDAY
27
MONTH
28
MOYR
29
QYR
30
WKYR
31
PCT
32
DOT
33
CCA
34
CCB
35
CCC
36
CCD
37
CCE
38
EDATE
39
SDATE