stats_package_syntax_file_generator 1.1.2 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,21 +4,21 @@
4
4
  # https://github.com/mnpopcenter/stats_package_syntax_file_generator
5
5
 
6
6
  module SyntaxFile
7
- class MakerSPSS < Maker
8
-
9
- def initialize (sfc, syntax_type)
10
- super
11
- m = @sfc.max_var_name_length
12
- @var_loc_format = " %-#{m}s %s"
13
- @var_lab_format = " %-#{m}s %s %s"
14
- @cmd_end = '.'
15
- @var_label_max_leng = 120
16
- @val_label_max_leng = 120
17
- @segment_max_leng = 100
18
- end
19
-
20
- def syntax
21
- r = [
7
+ class MakerSPSS < Maker
8
+
9
+ def initialize(sfc, syntax_type)
10
+ super
11
+ m = @sfc.max_var_name_length
12
+ @var_loc_format = " %-#{m}s %s"
13
+ @var_lab_format = " %-#{m}s %s %s"
14
+ @cmd_end = '.'
15
+ @var_label_max_leng = 120
16
+ @val_label_max_leng = 120
17
+ @segment_max_leng = 100
18
+ end
19
+
20
+ def syntax
21
+ r = [
22
22
  comments_start,
23
23
  syn_cd,
24
24
  blank,
@@ -28,167 +28,167 @@ def syntax
28
28
  syn_execute,
29
29
  blank,
30
30
  comments_end,
31
- ]
32
- r.flatten
33
- end
34
-
35
- def comments_start
36
- convert_to_comments(super)
37
- end
38
-
39
- def comments_end
40
- convert_to_comments(super)
41
- end
42
-
43
- def convert_to_comments (lines)
44
- return [] if lines.empty?
45
- lines.push @cmd_end
46
- [
31
+ ]
32
+ r.flatten
33
+ end
34
+
35
+ def comments_start
36
+ convert_to_comments(super)
37
+ end
38
+
39
+ def comments_end
40
+ convert_to_comments(super)
41
+ end
42
+
43
+ def convert_to_comments(lines)
44
+ return [] if lines.empty?
45
+ lines.push @cmd_end
46
+ [
47
47
  lines.map { |ln| '* ' + ln },
48
48
  blank,
49
- ].flatten
50
- end
49
+ ].flatten
50
+ end
51
51
 
52
- def syn_cd
53
- 'cd ' + q(@sfc.data_dir_name) + @cmd_end
54
- end
52
+ def syn_cd
53
+ 'cd ' + q(@sfc.data_dir_name) + @cmd_end
54
+ end
55
55
 
56
- def syn_df
57
- @sfc.data_structure == 'hier' ? syn_dfh : syn_dfr
58
- end
56
+ def syn_df
57
+ @sfc.data_structure == 'hier' ? syn_dfh : syn_dfr
58
+ end
59
59
 
60
- def syn_dfr
61
- r = [
60
+ def syn_dfr
61
+ r = [
62
62
  syn_dfr_start,
63
63
  syn_var_locations(@sfc.variables),
64
64
  syntax_end,
65
- ]
66
- r.flatten
67
- end
65
+ ]
66
+ r.flatten
67
+ end
68
68
 
69
- def syn_dfr_start
70
- 'data list file = ' + q(@sfc.data_file_name) + ' /'
71
- end
69
+ def syn_dfr_start
70
+ 'data list file = ' + q(@sfc.data_file_name) + ' /'
71
+ end
72
72
 
73
- def syn_dfh
74
- r = [
73
+ def syn_dfh
74
+ r = [
75
75
  syn_dfh_file_type,
76
76
  syn_dfh_data_blocks,
77
77
  'end file type' + @cmd_end,
78
78
  blank,
79
- ]
80
- r.flatten
81
- end
79
+ ]
80
+ r.flatten
81
+ end
82
82
 
83
- def syn_dfh_file_type
84
- r = [
83
+ def syn_dfh_file_type
84
+ r = [
85
85
  'file type ' + nested_or_mixed(),
86
86
  ' /file = ' + q(@sfc.data_file_name),
87
87
  ' /record = ' + var_loc_with_fmt(@sfc.record_type_var).to_s,
88
88
  syntax_end,
89
- ]
90
- r.flatten
91
- end
89
+ ]
90
+ r.flatten
91
+ end
92
92
 
93
- def syn_dfh_data_blocks
94
- r = @sfc.record_types.map { |rt|
93
+ def syn_dfh_data_blocks
94
+ r = @sfc.record_types.map { |rt|
95
95
  [
96
- syn_dfh_data_block_start(rt),
97
- syn_var_locations(@sfc.get_vars_by_record_type(rt)),
98
- syntax_end,
96
+ syn_dfh_data_block_start(rt),
97
+ syn_var_locations(@sfc.get_vars_by_record_type(rt)),
98
+ syntax_end,
99
99
  ]
100
- }
101
- r.flatten
102
- end
100
+ }
101
+ r.flatten
102
+ end
103
103
 
104
- def syn_dfh_data_block_start (rt)
105
- rt_var = @sfc.record_type_var
106
- [
104
+ def syn_dfh_data_block_start(rt)
105
+ rt_var = @sfc.record_type_var
106
+ [
107
107
  'record type ' + val_q(rt_var, val_as_s(rt_var, rt)) + @cmd_end,
108
108
  'data list /',
109
- ]
110
- end
109
+ ]
110
+ end
111
111
 
112
- def syn_var_locations (var_list)
113
- var_list.map { |v| sprintf @var_loc_format, v.name, var_loc_with_fmt(v) }
114
- end
112
+ def syn_var_locations(var_list)
113
+ var_list.map { |v| sprintf @var_loc_format, v.name, var_loc_with_fmt(v) }
114
+ end
115
115
 
116
- def syn_var_labs (var_list = [])
117
- var_list = @sfc.get_vars_with_var_labels if var_list.empty?
118
- return [] if var_list.empty?
119
- r = [
116
+ def syn_var_labs(var_list = [])
117
+ var_list = @sfc.get_vars_with_var_labels if var_list.empty?
118
+ return [] if var_list.empty?
119
+ r = [
120
120
  'variable labels',
121
121
  var_list.map { |var| syn_var_lab_for_var(var) },
122
122
  syntax_end,
123
- ]
124
- r.flatten
125
- end
126
-
127
- def syn_var_lab_for_var (var)
128
- lab = label_trunc(var.label, @var_label_max_leng)
129
- lab_segments = label_segments(lab, @segment_max_leng).map { |s| q(s) }
130
- weave_label_segments(@var_lab_format, [var.name], lab_segments, ' ', '+')
131
- end
132
-
133
- def syn_val_labs
134
- var_list = @sfc.get_vars_with_values
135
- return [] if var_list.empty?
136
- r = [
123
+ ]
124
+ r.flatten
125
+ end
126
+
127
+ def syn_var_lab_for_var(var)
128
+ lab = label_trunc(var.label, @var_label_max_leng)
129
+ lab_segments = label_segments(lab, @segment_max_leng).map { |s| q(s) }
130
+ weave_label_segments(@var_lab_format, [var.name], lab_segments, ' ', '+')
131
+ end
132
+
133
+ def syn_val_labs
134
+ var_list = @sfc.get_vars_with_values
135
+ return [] if var_list.empty?
136
+ r = [
137
137
  'value labels',
138
138
  syn_val_labs_for_var_list(var_list),
139
139
  syntax_end,
140
- ]
141
- r.flatten
142
- end
143
-
144
- def syn_val_labs_for_var_list (var_list)
145
- var_list.map { |var| syn_val_labs_for_var(var) }
146
- end
147
-
148
- def syn_val_labs_for_var (var)
149
- val_list = labelable_values(var)
150
- return [] if val_list.empty?
151
- m = max_value_length(var, val_list)
152
- m = m + 2 if var.is_string_var
153
- m = @segment_max_leng + 2 if m > @segment_max_leng + 2
154
- value_format = " %-#{m}s %s %s"
155
- r = [
140
+ ]
141
+ r.flatten
142
+ end
143
+
144
+ def syn_val_labs_for_var_list(var_list)
145
+ var_list.map { |var| syn_val_labs_for_var(var) }
146
+ end
147
+
148
+ def syn_val_labs_for_var(var)
149
+ val_list = labelable_values(var)
150
+ return [] if val_list.empty?
151
+ m = max_value_length(var, val_list)
152
+ m = m + 2 if var.is_string_var
153
+ m = @segment_max_leng + 2 if m > @segment_max_leng + 2
154
+ value_format = " %-#{m}s %s %s"
155
+ r = [
156
156
  syn_val_labs_for_var_start(var),
157
157
  val_list.map { |val| syn_val_lab_for_val(var, val, value_format) },
158
- ]
159
- r.flatten
160
- end
161
-
162
- def syn_val_labs_for_var_start (var)
163
- ' /' + var.name
164
- end
165
-
166
- def syn_val_lab_for_val (var, val, fmt)
167
- lab = label_trunc(val.label, @val_label_max_leng)
168
- lab = val.value if lab.nil? || (lab.strip.length == 0)
169
- vs = val_as_s(var, val.value)
170
- val_segments = label_segments(vs, @segment_max_leng).map { |s| val_q(var, s) }
171
- lab_segments = label_segments(lab, @segment_max_leng).map { |s| q(s) }
172
- weave_label_segments(fmt, val_segments, lab_segments, ' ', '+')
173
- end
174
-
175
- def syn_execute
176
- 'execute' + @cmd_end
177
- end
178
-
179
- def nested_or_mixed
180
- @sfc.rectangularize ? 'nested' : 'mixed'
181
- end
182
-
183
- def var_loc_with_fmt (var)
184
- var.column_locations_as_s + var_fmt(var)
185
- end
186
-
187
- def var_fmt (var)
188
- return ' (a)' if var.is_string_var
189
- return '' unless var.implied_decimals > 0
190
- return ' (' + var.implied_decimals.to_s + ')'
191
- end
192
-
193
- end
158
+ ]
159
+ r.flatten
160
+ end
161
+
162
+ def syn_val_labs_for_var_start(var)
163
+ ' /' + var.name
164
+ end
165
+
166
+ def syn_val_lab_for_val(var, val, fmt)
167
+ lab = label_trunc(val.label, @val_label_max_leng)
168
+ lab = val.value if lab.nil? || (lab.strip.length == 0)
169
+ vs = val_as_s(var, val.value)
170
+ val_segments = label_segments(vs, @segment_max_leng).map { |s| val_q(var, s) }
171
+ lab_segments = label_segments(lab, @segment_max_leng).map { |s| q(s) }
172
+ weave_label_segments(fmt, val_segments, lab_segments, ' ', '+')
173
+ end
174
+
175
+ def syn_execute
176
+ 'execute' + @cmd_end
177
+ end
178
+
179
+ def nested_or_mixed
180
+ @sfc.rectangularize ? 'nested' : 'mixed'
181
+ end
182
+
183
+ def var_loc_with_fmt(var)
184
+ var.column_locations_as_s + var_fmt(var)
185
+ end
186
+
187
+ def var_fmt(var)
188
+ return ' (a)' if var.is_string_var
189
+ return '' unless var.implied_decimals > 0
190
+ return ' (' + var.implied_decimals.to_s + ')'
191
+ end
192
+
193
+ end
194
194
  end
@@ -4,30 +4,29 @@
4
4
  # https://github.com/mnpopcenter/stats_package_syntax_file_generator
5
5
 
6
6
  module SyntaxFile
7
- class MakerSTATA < Maker
8
-
9
- def initialize (sfc, syntax_type)
10
- super
11
-
12
-
13
- mx_var = @sfc.max_var_name_length
14
- mx_col = 2 * @sfc.max_col_loc_width + 1
15
- @var_loc_format = " %-7s %-#{mx_var}s %-#{mx_col}s %s"
16
- @var_lab_format = "label var %-#{mx_var}s %s"
17
- @infix_format = "%#{mx_col + mx_var + 4}s"
18
- @replace_format = "replace %-#{mx_var}s = %-#{mx_var}s / %d"
19
- @fixed_point_display_format = "format %-#{mx_var}s %%%d.%df"
20
- @general_display_format = "format %-#{mx_var}s %%%d.%dg"
21
-
22
- @cmd_end = ''
23
- @cmd_continue = ' ///'
24
- @var_label_max_leng = 80
25
- @val_label_max_leng = 244
26
- @sort_var_stem = '_line_num'
27
- end
7
+ class MakerSTATA < Maker
8
+
9
+ def initialize(sfc, syntax_type)
10
+ super
11
+
12
+ mx_var = @sfc.max_var_name_length
13
+ mx_col = 2 * @sfc.max_col_loc_width + 1
14
+ @var_loc_format = " %-7s %-#{mx_var}s %-#{mx_col}s %s"
15
+ @var_lab_format = "label var %-#{mx_var}s %s"
16
+ @infix_format = "%#{mx_col + mx_var + 4}s"
17
+ @replace_format = "replace %-#{mx_var}s = %-#{mx_var}s / %d"
18
+ @fixed_point_display_format = "format %-#{mx_var}s %%%d.%df"
19
+ @general_display_format = "format %-#{mx_var}s %%%d.%dg"
20
+
21
+ @cmd_end = ''
22
+ @cmd_continue = ' ///'
23
+ @var_label_max_leng = 80
24
+ @val_label_max_leng = 244
25
+ @sort_var_stem = '_line_num'
26
+ end
28
27
 
29
- def syntax
30
- r = [
28
+ def syntax
29
+ r = [
31
30
  comments_start,
32
31
  'set more off',
33
32
  blank,
@@ -42,267 +41,278 @@ def syntax
42
41
  syn_val_labs,
43
42
  blank,
44
43
  comments_end,
45
- ]
46
- r.flatten
47
- end
44
+ ]
45
+ r.flatten
46
+ end
48
47
 
49
- def comments_start
50
- convert_to_comments(super)
51
- end
48
+ def comments_start
49
+ convert_to_comments(super)
50
+ end
52
51
 
53
- def comments_end
54
- convert_to_comments(super)
55
- end
52
+ def comments_end
53
+ convert_to_comments(super)
54
+ end
56
55
 
57
- def convert_to_comments (lines)
58
- return [] if lines.empty?
59
- [
56
+ def convert_to_comments(lines)
57
+ return [] if lines.empty?
58
+ [
60
59
  lines.map { |ln| '* ' + ln },
61
60
  blank,
62
- ].flatten
63
- end
61
+ ].flatten
62
+ end
64
63
 
65
- def syn_df
66
- @sfc.data_structure == 'hier' ? syn_dfh : syn_dfr
67
- end
64
+ def syn_df
65
+ @sfc.data_structure == 'hier' ? syn_dfh : syn_dfr
66
+ end
68
67
 
69
- def syn_dfr
70
- syn_infix(@sfc.variables)
71
- end
68
+ def syn_dfr
69
+ syn_infix(@sfc.variables)
70
+ end
72
71
 
73
- def syn_dfh
74
- r = [
72
+ def syn_dfh
73
+ r = [
75
74
  syn_dfh_infix_blocks,
76
75
  syn_dfh_combine,
77
- ]
78
- r.flatten
79
- end
76
+ ]
77
+ r.flatten
78
+ end
80
79
 
81
- def syn_infix (var_list)
82
- r = [
80
+ def syn_infix(var_list)
81
+ r = [
83
82
  syn_infix_start,
84
83
  syn_infix_var_locs(var_list),
85
84
  syn_infix_end,
86
- ]
87
- r.flatten
88
- end
85
+ ]
86
+ r.flatten
87
+ end
89
88
 
90
- def syn_infix_start
91
- [
89
+ def syn_infix_start
90
+ [
92
91
  'clear',
93
92
  'quietly infix' + sprintf(@infix_format, @cmd_continue),
94
- ]
95
- end
93
+ ]
94
+ end
96
95
 
97
- def syn_infix_var_locs (var_list)
98
- var_list.map { |v|
96
+ def syn_infix_var_locs(var_list)
97
+ var_list.map { |v|
99
98
  sprintf @var_loc_format,
100
- var_fmt(v),
101
- v.name.downcase,
102
- v.column_locations_as_s,
103
- @cmd_continue
104
- }
105
- end
99
+ var_fmt(v),
100
+ v.name.downcase,
101
+ v.column_locations_as_s,
102
+ @cmd_continue
103
+ }
104
+ end
106
105
 
107
- def syn_infix_end
108
- ' using ' + q(@sfc.data_file_name)
109
- end
106
+ def syn_infix_end
107
+ ' using ' + q(@sfc.data_file_name)
108
+ end
110
109
 
111
- def syn_dfh_infix_blocks
112
- r = []
113
- @sfc.record_types.each { |rt|
110
+ def syn_dfh_infix_blocks
111
+ r = []
112
+ @sfc.record_types.each { |rt|
114
113
  var_list = @sfc.get_vars_by_record_type(rt)
115
114
  r.push(
116
- syn_infix(var_list),
117
- syn_dfh_infix_block_end(rt)
115
+ syn_infix(var_list),
116
+ syn_dfh_infix_block_end(rt)
118
117
  ) if var_list.size > 0
119
- }
120
- r.flatten
121
- end
118
+ }
119
+ r.flatten
120
+ end
122
121
 
123
- def syn_dfh_infix_block_end (rt)
124
- r = [
122
+ def syn_dfh_infix_block_end(rt)
123
+ r = [
125
124
  syn_dfh_infix_gen,
126
125
  'drop if ' + rt_ne_statement(rt),
127
126
  'sort ' + sort_vars.join(' '),
128
127
  'save ' + temp_file_name(rt),
129
128
  blank,
130
- ]
131
- r.flatten
132
- end
129
+ ]
130
+ r.flatten
131
+ end
133
132
 
134
- def syn_dfh_infix_gen
135
- return ["gen #{@sort_var_stem} = _n"] unless @sfc.rectangularize
136
- sv = sort_vars()
137
- r = [
133
+ def syn_dfh_infix_gen
134
+ return ["gen #{@sort_var_stem} = _n"] unless @sfc.rectangularize
135
+ sv = sort_vars()
136
+ r = [
138
137
  sv.map { |v| "gen #{v} = _n" },
139
138
  sv.zip(@sfc.record_types).map { |z|
140
- 'replace ' +
141
- z[0] +
142
- ' = ' +
143
- z[0] +
139
+ 'replace ' +
140
+ z[0] +
141
+ ' = ' +
142
+ z[0] +
144
143
  '[_n - 1] if _n > 1 & ' +
145
144
  rt_ne_statement(z[1])
146
145
  }
147
- ]
148
- r.flatten!
149
- end
146
+ ]
147
+ r.flatten!
148
+ end
150
149
 
151
- def syn_dfh_combine
152
- r = [
150
+ def syn_dfh_combine
151
+ r = [
153
152
  'clear',
154
153
  syn_dfh_combine_append,
155
154
  syn_dfh_combine_save,
156
155
  syn_dfh_combine_erase,
157
- ]
158
- r.flatten
159
- end
156
+ ]
157
+ r.flatten
158
+ end
160
159
 
161
- def syn_dfh_combine_append
162
- r = []
163
- tf = temp_file_names()
164
- if @sfc.rectangularize
160
+ def syn_dfh_combine_append
161
+ r = []
162
+ tf = temp_file_names()
163
+ if @sfc.rectangularize
165
164
  sv = sort_vars.reverse
166
165
  tf = tf.reverse
167
166
  sv.shift
168
167
  r.push 'use ' + tf.shift
169
168
  sv.zip(tf).each { |z|
170
- r.push 'merge m:1 ' + z[0] + ' using ' + z[1] + ', keep(master match)'
171
- r.push 'drop _merge'
169
+ r.push 'merge m:1 ' + z[0] + ' using ' + z[1] + ', keep(master match)'
170
+ r.push 'drop _merge'
172
171
  }
173
- else
172
+ else
174
173
  r.push 'use ' + tf.shift
175
174
  tf.each { |t| r.push 'append using ' + t }
175
+ end
176
+ r
176
177
  end
177
- r
178
- end
179
178
 
180
- def syn_dfh_combine_save
181
- [
179
+ def syn_dfh_combine_save
180
+ [
182
181
  'sort ' + sort_vars.join(' '),
183
182
  'drop ' + sort_vars.join(' '),
184
- ]
185
- end
183
+ ]
184
+ end
186
185
 
187
- def syn_dfh_combine_erase
188
- temp_file_names.map { |t| 'erase ' + t }
189
- end
186
+ def syn_dfh_combine_erase
187
+ temp_file_names.map { |t| 'erase ' + t }
188
+ end
190
189
 
191
- def syn_convert_implied_decim
192
- var_list = @sfc.variables.find_all { |var| var.implied_decimals > 0 }
193
- return [] if var_list.empty?
194
- var_list.map { |var|
190
+ def syn_convert_implied_decim
191
+ var_list = @sfc.variables.find_all { |var| var.implied_decimals > 0 }
192
+ return [] if var_list.empty?
193
+ var_list.map { |var|
195
194
  v = var.name.downcase
196
195
  sprintf @replace_format, v, v, 10 ** var.implied_decimals
197
- }
198
- end
196
+ }
197
+ end
199
198
 
200
- def syn_display_format
201
- var_list = @sfc.variables.find_all { |var|
199
+ def syn_display_format
200
+ var_list = @sfc.variables.find_all { |var|
202
201
  vf = var_fmt(var)
203
202
  vf == 'double' or vf == 'float'
204
- }
205
- return [] if var_list.empty?
206
- var_list.map { |var|
203
+ }
204
+ return [] if var_list.empty?
205
+ var_list.map { |var|
207
206
  v = var.name.downcase
208
-
209
- # If implied decimals set, it means we know exactly how much precision
210
- # to show. Otherwise we go with the underlying value and the 'g' (general) formatting rules in Stata
207
+
208
+ # If implied decimals set, it means we know exactly how much precision
209
+ # to show. Otherwise we go with the underlying value and the 'g' (general) formatting rules in Stata
211
210
  formatting = var.implied_decimals > 0 ?
212
- sprintf(@fixed_point_display_format, v, var.width, var.implied_decimals) :
213
- sprintf(@general_display_format, v, var.width, var.implied_decimals)
214
-
215
- formatting
216
- }
217
- end
211
+ sprintf(@fixed_point_display_format, v, var.width, var.implied_decimals) :
212
+ sprintf(@general_display_format, v, var.width, var.implied_decimals)
213
+
214
+ formatting
215
+ }
216
+ end
218
217
 
219
- def syn_var_labs (var_list = [])
220
- var_list = @sfc.get_vars_with_var_labels if var_list.empty?
221
- return [] if var_list.empty?
222
- var_list.map { |var|
218
+ def syn_var_labs(var_list = [])
219
+ var_list = @sfc.get_vars_with_var_labels if var_list.empty?
220
+ return [] if var_list.empty?
221
+ var_list.map { |var|
223
222
  sprintf @var_lab_format,
224
- var.name.downcase,
225
- q( label_trunc(var.label, @var_label_max_leng) )
226
- }
227
- end
223
+ var.name.downcase,
224
+ q(label_trunc(var.label, @var_label_max_leng))
225
+ }
226
+ end
228
227
 
229
- def syn_val_labs
230
- var_list = @sfc.get_vars_with_values.find_all { |var| not var.is_string_var }
231
- return [] if var_list.empty?
232
- r = var_list.map { |var|
233
- [
234
- syn_val_labs_for_var(var),
228
+ def syn_val_labs
229
+ var_list = @sfc.get_vars_with_values.find_all { |var| not var.is_string_var }
230
+ return [] if var_list.empty?
231
+ r = var_list.map { |var|
232
+ labels = syn_val_labs_for_var(var)
233
+ if labels.any?
234
+ [
235
+ labels,
235
236
  "label values " + var.name.downcase + ' ' + label_handle(var),
236
237
  blank,
237
- ]
238
- }
239
- r.flatten
240
- end
238
+ ]
239
+ else
240
+ []
241
+ end
242
+ }
243
+ r.flatten
244
+ end
241
245
 
242
- def syn_val_labs_for_var (var)
243
- val_list = labelable_values(var)
244
- return [] if val_list.empty?
245
- m = max_value_length(var, val_list)
246
- value_format = "label define %s %-#{m}s %s%s"
247
- add_cmd = ''
248
- r = []
249
- val_list.each { |val|
246
+ def syn_val_labs_for_var(var)
247
+ val_list = labelable_values(var)
248
+ return [] if val_list.empty?
249
+ m = max_value_length(var, val_list)
250
+
251
+ # A Stata value 10 digits or wider cannot be labeled.
252
+ if m >= 10
253
+ return []
254
+ end
255
+
256
+ value_format = "label define %s %-#{m}s %s%s"
257
+ add_cmd = ''
258
+ r = []
259
+ val_list.each { |val|
250
260
  label_truncated = label_trunc(val.label, @val_label_max_leng)
251
261
  # stata doesn't like blank value labels
252
262
  label_truncated = val.value if label_truncated.nil? || (label_truncated.strip.length == 0)
253
263
  r.push sprintf(
254
- value_format,
255
- label_handle(var),
256
- val.value,
257
- q( label_truncated ),
258
- add_cmd
264
+ value_format,
265
+ label_handle(var),
266
+ val.value,
267
+ q(label_truncated),
268
+ add_cmd
259
269
  )
260
270
  add_cmd = ', add'
261
- }
262
- r.flatten
263
- end
271
+ }
272
+ r.flatten
273
+ end
264
274
 
265
- def q (s)
266
- '`"' + s.to_s + '"\''
267
- end
275
+ def q(s)
276
+ '`"' + s.to_s + '"\''
277
+ end
268
278
 
269
- def var_fmt (var)
279
+ def var_fmt(var)
270
280
 
271
- return 'str' if var.is_string_var
272
- return 'double' if var.is_double_var || var.implied_decimals > 0
273
- return 'byte' if var.width <= 2
274
- return 'int' if var.width <= 4
275
- return 'long' if var.width <= 7
276
-
277
- return 'double'
278
- end
281
+ return 'str' if var.is_string_var
282
+ return 'double' if var.is_double_var || var.implied_decimals > 0
283
+ return 'byte' if var.width <= 2
284
+ return 'int' if var.width <= 4
285
+ return 'long' if var.width <= 7
286
+
287
+ return 'double'
288
+ end
279
289
 
280
- def temp_file_names
281
- tf = []
282
- @sfc.record_types.each { |rt|
290
+ def temp_file_names
291
+ tf = []
292
+ @sfc.record_types.each { |rt|
283
293
  var_list = @sfc.get_vars_by_record_type(rt)
284
294
  tf.push temp_file_name(rt) if var_list.size > 0
285
- }
286
- tf
287
- end
295
+ }
296
+ tf
297
+ end
288
298
 
289
- def temp_file_name (rt)
290
- '__temp_ipums_hier_' + rt + '.dta'
291
- end
299
+ def temp_file_name(rt)
300
+ '__temp_ipums_hier_' + rt + '.dta'
301
+ end
292
302
 
293
- def label_handle (var)
294
- var.name.downcase + '_lbl'
295
- end
303
+ def label_handle(var)
304
+ var.name.downcase + '_lbl'
305
+ end
296
306
 
297
- def sort_vars
298
- return [ @sort_var_stem ] unless @sfc.rectangularize
299
- return @sfc.record_types.map { |rt| @sort_var_stem + rt }
300
- end
307
+ def sort_vars
308
+ return [@sort_var_stem] unless @sfc.rectangularize
309
+ return @sfc.record_types.map { |rt| @sort_var_stem + rt }
310
+ end
301
311
 
302
- def rt_ne_statement (rt)
303
- rt_var = @sfc.record_type_var
304
- rt_var.name.downcase + ' != ' + val_q(rt_var, val_as_s(rt_var, rt))
305
- end
312
+ def rt_ne_statement(rt)
313
+ rt_var = @sfc.record_type_var
314
+ rt_var.name.downcase + ' != ' + val_q(rt_var, val_as_s(rt_var, rt))
315
+ end
306
316
 
307
- end
317
+ end
308
318
  end