stats_package_syntax_file_generator 1.0.4 → 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,28 +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
- @display_format = "format %-#{mx_var}s %%%d.%df"
20
- @cmd_end = ''
21
- @cmd_continue = ' ///'
22
- @var_label_max_leng = 80
23
- @val_label_max_leng = 244
24
- @sort_var_stem = '_line_num'
25
- 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
26
27
 
27
- def syntax
28
- r = [
28
+ def syntax
29
+ r = [
29
30
  comments_start,
30
31
  'set more off',
31
32
  blank,
@@ -40,260 +41,278 @@ def syntax
40
41
  syn_val_labs,
41
42
  blank,
42
43
  comments_end,
43
- ]
44
- r.flatten
45
- end
44
+ ]
45
+ r.flatten
46
+ end
46
47
 
47
- def comments_start
48
- convert_to_comments(super)
49
- end
48
+ def comments_start
49
+ convert_to_comments(super)
50
+ end
50
51
 
51
- def comments_end
52
- convert_to_comments(super)
53
- end
52
+ def comments_end
53
+ convert_to_comments(super)
54
+ end
54
55
 
55
- def convert_to_comments (lines)
56
- return [] if lines.empty?
57
- [
56
+ def convert_to_comments(lines)
57
+ return [] if lines.empty?
58
+ [
58
59
  lines.map { |ln| '* ' + ln },
59
60
  blank,
60
- ].flatten
61
- end
61
+ ].flatten
62
+ end
62
63
 
63
- def syn_df
64
- @sfc.data_structure == 'hier' ? syn_dfh : syn_dfr
65
- end
64
+ def syn_df
65
+ @sfc.data_structure == 'hier' ? syn_dfh : syn_dfr
66
+ end
66
67
 
67
- def syn_dfr
68
- syn_infix(@sfc.variables)
69
- end
68
+ def syn_dfr
69
+ syn_infix(@sfc.variables)
70
+ end
70
71
 
71
- def syn_dfh
72
- r = [
72
+ def syn_dfh
73
+ r = [
73
74
  syn_dfh_infix_blocks,
74
75
  syn_dfh_combine,
75
- ]
76
- r.flatten
77
- end
76
+ ]
77
+ r.flatten
78
+ end
78
79
 
79
- def syn_infix (var_list)
80
- r = [
80
+ def syn_infix(var_list)
81
+ r = [
81
82
  syn_infix_start,
82
83
  syn_infix_var_locs(var_list),
83
84
  syn_infix_end,
84
- ]
85
- r.flatten
86
- end
85
+ ]
86
+ r.flatten
87
+ end
87
88
 
88
- def syn_infix_start
89
- [
89
+ def syn_infix_start
90
+ [
90
91
  'clear',
91
92
  'quietly infix' + sprintf(@infix_format, @cmd_continue),
92
- ]
93
- end
93
+ ]
94
+ end
94
95
 
95
- def syn_infix_var_locs (var_list)
96
- var_list.map { |v|
96
+ def syn_infix_var_locs(var_list)
97
+ var_list.map { |v|
97
98
  sprintf @var_loc_format,
98
- var_fmt(v),
99
- v.name.downcase,
100
- v.column_locations_as_s,
101
- @cmd_continue
102
- }
103
- end
99
+ var_fmt(v),
100
+ v.name.downcase,
101
+ v.column_locations_as_s,
102
+ @cmd_continue
103
+ }
104
+ end
104
105
 
105
- def syn_infix_end
106
- ' using ' + q(@sfc.data_file_name)
107
- end
106
+ def syn_infix_end
107
+ ' using ' + q(@sfc.data_file_name)
108
+ end
108
109
 
109
- def syn_dfh_infix_blocks
110
- r = []
111
- @sfc.record_types.each { |rt|
110
+ def syn_dfh_infix_blocks
111
+ r = []
112
+ @sfc.record_types.each { |rt|
112
113
  var_list = @sfc.get_vars_by_record_type(rt)
113
114
  r.push(
114
- syn_infix(var_list),
115
- syn_dfh_infix_block_end(rt)
115
+ syn_infix(var_list),
116
+ syn_dfh_infix_block_end(rt)
116
117
  ) if var_list.size > 0
117
- }
118
- r.flatten
119
- end
118
+ }
119
+ r.flatten
120
+ end
120
121
 
121
- def syn_dfh_infix_block_end (rt)
122
- r = [
122
+ def syn_dfh_infix_block_end(rt)
123
+ r = [
123
124
  syn_dfh_infix_gen,
124
125
  'drop if ' + rt_ne_statement(rt),
125
126
  'sort ' + sort_vars.join(' '),
126
127
  'save ' + temp_file_name(rt),
127
128
  blank,
128
- ]
129
- r.flatten
130
- end
129
+ ]
130
+ r.flatten
131
+ end
131
132
 
132
- def syn_dfh_infix_gen
133
- return ["gen #{@sort_var_stem} = _n"] unless @sfc.rectangularize
134
- sv = sort_vars()
135
- r = [
133
+ def syn_dfh_infix_gen
134
+ return ["gen #{@sort_var_stem} = _n"] unless @sfc.rectangularize
135
+ sv = sort_vars()
136
+ r = [
136
137
  sv.map { |v| "gen #{v} = _n" },
137
138
  sv.zip(@sfc.record_types).map { |z|
138
- 'replace ' +
139
- z[0] +
140
- ' = ' +
141
- z[0] +
139
+ 'replace ' +
140
+ z[0] +
141
+ ' = ' +
142
+ z[0] +
142
143
  '[_n - 1] if _n > 1 & ' +
143
144
  rt_ne_statement(z[1])
144
145
  }
145
- ]
146
- r.flatten!
147
- end
146
+ ]
147
+ r.flatten!
148
+ end
148
149
 
149
- def syn_dfh_combine
150
- r = [
150
+ def syn_dfh_combine
151
+ r = [
151
152
  'clear',
152
153
  syn_dfh_combine_append,
153
154
  syn_dfh_combine_save,
154
155
  syn_dfh_combine_erase,
155
- ]
156
- r.flatten
157
- end
156
+ ]
157
+ r.flatten
158
+ end
158
159
 
159
- def syn_dfh_combine_append
160
- r = []
161
- tf = temp_file_names()
162
- if @sfc.rectangularize
160
+ def syn_dfh_combine_append
161
+ r = []
162
+ tf = temp_file_names()
163
+ if @sfc.rectangularize
163
164
  sv = sort_vars.reverse
164
165
  tf = tf.reverse
165
166
  sv.shift
166
167
  r.push 'use ' + tf.shift
167
168
  sv.zip(tf).each { |z|
168
- r.push 'merge m:1 ' + z[0] + ' using ' + z[1] + ', keep(master match)'
169
- r.push 'drop _merge'
169
+ r.push 'merge m:1 ' + z[0] + ' using ' + z[1] + ', keep(master match)'
170
+ r.push 'drop _merge'
170
171
  }
171
- else
172
+ else
172
173
  r.push 'use ' + tf.shift
173
174
  tf.each { |t| r.push 'append using ' + t }
175
+ end
176
+ r
174
177
  end
175
- r
176
- end
177
178
 
178
- def syn_dfh_combine_save
179
- [
179
+ def syn_dfh_combine_save
180
+ [
180
181
  'sort ' + sort_vars.join(' '),
181
182
  'drop ' + sort_vars.join(' '),
182
- ]
183
- end
183
+ ]
184
+ end
184
185
 
185
- def syn_dfh_combine_erase
186
- temp_file_names.map { |t| 'erase ' + t }
187
- end
186
+ def syn_dfh_combine_erase
187
+ temp_file_names.map { |t| 'erase ' + t }
188
+ end
188
189
 
189
- def syn_convert_implied_decim
190
- var_list = @sfc.variables.find_all { |var| var.implied_decimals > 0 }
191
- return [] if var_list.empty?
192
- 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|
193
194
  v = var.name.downcase
194
195
  sprintf @replace_format, v, v, 10 ** var.implied_decimals
195
- }
196
- end
196
+ }
197
+ end
197
198
 
198
- def syn_display_format
199
- var_list = @sfc.variables.find_all { |var|
199
+ def syn_display_format
200
+ var_list = @sfc.variables.find_all { |var|
200
201
  vf = var_fmt(var)
201
202
  vf == 'double' or vf == 'float'
202
- }
203
- return [] if var_list.empty?
204
- var_list.map { |var|
203
+ }
204
+ return [] if var_list.empty?
205
+ var_list.map { |var|
205
206
  v = var.name.downcase
206
- sprintf @display_format, v, var.width, var.implied_decimals
207
- }
208
- end
209
207
 
210
- def syn_var_labs (var_list = [])
211
- var_list = @sfc.get_vars_with_var_labels if var_list.empty?
212
- return [] if var_list.empty?
213
- var_list.map { |var|
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
210
+ formatting = var.implied_decimals > 0 ?
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
217
+
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|
214
222
  sprintf @var_lab_format,
215
- var.name.downcase,
216
- q( label_trunc(var.label, @var_label_max_leng) )
217
- }
218
- end
223
+ var.name.downcase,
224
+ q(label_trunc(var.label, @var_label_max_leng))
225
+ }
226
+ end
219
227
 
220
- def syn_val_labs
221
- var_list = @sfc.get_vars_with_values.find_all { |var| not var.is_string_var }
222
- return [] if var_list.empty?
223
- r = var_list.map { |var|
224
- [
225
- 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,
226
236
  "label values " + var.name.downcase + ' ' + label_handle(var),
227
237
  blank,
228
- ]
229
- }
230
- r.flatten
231
- end
238
+ ]
239
+ else
240
+ []
241
+ end
242
+ }
243
+ r.flatten
244
+ end
232
245
 
233
- def syn_val_labs_for_var (var)
234
- val_list = labelable_values(var)
235
- return [] if val_list.empty?
236
- m = max_value_length(var, val_list)
237
- value_format = "label define %s %-#{m}s %s%s"
238
- add_cmd = ''
239
- r = []
240
- 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|
241
260
  label_truncated = label_trunc(val.label, @val_label_max_leng)
242
261
  # stata doesn't like blank value labels
243
262
  label_truncated = val.value if label_truncated.nil? || (label_truncated.strip.length == 0)
244
263
  r.push sprintf(
245
- value_format,
246
- label_handle(var),
247
- val.value,
248
- q( label_truncated ),
249
- add_cmd
264
+ value_format,
265
+ label_handle(var),
266
+ val.value,
267
+ q(label_truncated),
268
+ add_cmd
250
269
  )
251
270
  add_cmd = ', add'
252
- }
253
- r.flatten
254
- end
271
+ }
272
+ r.flatten
273
+ end
255
274
 
256
- def q (s)
257
- '`"' + s.to_s + '"\''
258
- end
275
+ def q(s)
276
+ '`"' + s.to_s + '"\''
277
+ end
259
278
 
260
- def var_fmt (var)
279
+ def var_fmt(var)
261
280
 
262
- return 'str' if var.is_string_var
263
- return 'double' if var.is_double_var || var.implied_decimals > 0
264
- return 'byte' if var.width <= 2
265
- return 'int' if var.width <= 4
266
- return 'long' if var.width <= 7
267
-
268
- return 'double'
269
- 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
270
289
 
271
- def temp_file_names
272
- tf = []
273
- @sfc.record_types.each { |rt|
290
+ def temp_file_names
291
+ tf = []
292
+ @sfc.record_types.each { |rt|
274
293
  var_list = @sfc.get_vars_by_record_type(rt)
275
294
  tf.push temp_file_name(rt) if var_list.size > 0
276
- }
277
- tf
278
- end
295
+ }
296
+ tf
297
+ end
279
298
 
280
- def temp_file_name (rt)
281
- '__temp_ipums_hier_' + rt + '.dta'
282
- end
299
+ def temp_file_name(rt)
300
+ '__temp_ipums_hier_' + rt + '.dta'
301
+ end
283
302
 
284
- def label_handle (var)
285
- var.name.downcase + '_lbl'
286
- end
303
+ def label_handle(var)
304
+ var.name.downcase + '_lbl'
305
+ end
287
306
 
288
- def sort_vars
289
- return [ @sort_var_stem ] unless @sfc.rectangularize
290
- return @sfc.record_types.map { |rt| @sort_var_stem + rt }
291
- 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
292
311
 
293
- def rt_ne_statement (rt)
294
- rt_var = @sfc.record_type_var
295
- rt_var.name.downcase + ' != ' + val_q(rt_var, val_as_s(rt_var, rt))
296
- 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
297
316
 
298
- end
317
+ end
299
318
  end