About This Book |
|
xvii | |
Acknowledgments |
|
xxv | |
About the Author |
|
xxvii | |
|
|
1 | (230) |
|
Chapter 1 Moving, Copying, Importing, and Exporting Data |
|
|
3 | (34) |
|
1.1 Libname Statement Engines |
|
|
4 | (5) |
|
1.1.1 Using Data Access Engines to Read and Write Data |
|
|
5 | (1) |
|
1.1.2 Using the Engine to View the Data |
|
|
6 | (1) |
|
1.1.3 Options Associated with the Engine |
|
|
6 | (1) |
|
1.1.4 Replacing Excel Sheets |
|
|
7 | (1) |
|
1.1.5 Recovering the Names of Excel Sheets |
|
|
8 | (1) |
|
1.2 Proc Import and Export |
|
|
9 | (8) |
|
1.2.1 Using the Wizard to Build Sample Code |
|
|
9 | (1) |
|
1.2.2 Control through the Use of Options |
|
|
9 | (1) |
|
1.2.3 Proc Import Data Source Statements |
|
|
10 | (2) |
|
1.2.4 Importing and Exporting CSV Files |
|
|
12 | (3) |
|
1.2.5 Preventing the Export of Blank Sheets |
|
|
15 | (1) |
|
1.2.6 Working with Named Ranges |
|
|
16 | (1) |
|
1.3 Data Step Input Statement |
|
|
17 | (11) |
|
1.3.1 Format Modifiers for Errors |
|
|
18 | (1) |
|
1.3.2 Format Modifiers for the Input Statement |
|
|
18 | (2) |
|
1.3.3 Controlling Delimited Input |
|
|
20 | (4) |
|
1.3.4 Reading Variable-Length Records |
|
|
24 | (4) |
|
1.4 Writing Delimited Files |
|
|
28 | (4) |
|
1.4.1 Using the Data Step with the DLM= Option |
|
|
28 | (1) |
|
|
29 | (1) |
|
1.4.3 Using the %DS2CSV Macro |
|
|
30 | (1) |
|
1.4.4 Using ODS and the CSV Destination |
|
|
31 | (1) |
|
1.4.5 Inserting the Separator Manually |
|
|
31 | (1) |
|
|
32 | (1) |
|
1.5.1 Adding a Pass-Through to Your SQL Step |
|
|
32 | (1) |
|
1.5.2 Pass-Through Efficiencies |
|
|
33 | (1) |
|
1.6 Reading and Writing to XML |
|
|
33 | (4) |
|
|
34 | (1) |
|
1.6.2 Using the XML Engine |
|
|
34 | (3) |
|
Chapter 2 Working with Your Data |
|
|
37 | (66) |
|
|
38 | (7) |
|
2.1.1 Replace and Repempty |
|
|
40 | (1) |
|
2.1.2 Password Protection |
|
|
41 | (1) |
|
2.1.3 Keep, Drop, and Rename Options |
|
|
42 | (1) |
|
2.1.4 Observation Control Using Firstobs and OBS Data Set Options |
|
|
43 | (2) |
|
2.2 Evaluating Expressions |
|
|
45 | (7) |
|
|
45 | (1) |
|
2.2.2 Using the Colon as a Comparison Modifier |
|
|
46 | (1) |
|
2.2.3 Logical and Comparison Operators in Assignment Statements |
|
|
47 | (2) |
|
2.2.4 Compound Inequalities |
|
|
49 | (1) |
|
2.2.5 The Min and Max Operators |
|
|
50 | (1) |
|
2.2.6 Numeric Expressions and Boolean Transformations |
|
|
51 | (1) |
|
2.3 Data Validation and Exception Reporting |
|
|
52 | (8) |
|
|
52 | (3) |
|
2.3.2 Writing to an Error Data Set |
|
|
55 | (3) |
|
2.3.3 Controlling Exception Reporting with Macros |
|
|
58 | (2) |
|
2.4 Normalizing - Transposing the Data |
|
|
60 | (5) |
|
2.4.1 Using Proc Transpose |
|
|
61 | (2) |
|
2.4.2 Transposing in the Data Step |
|
|
63 | (2) |
|
|
65 | (8) |
|
2.5.1 Known Template of Rows |
|
|
65 | (2) |
|
|
67 | (3) |
|
2.5.3 Using Completypes with Proc Means or Proc Summary |
|
|
70 | (1) |
|
|
70 | (2) |
|
2.5.5 Using Preloaded Formats |
|
|
72 | (1) |
|
2.5.6 Using the Sparse Option with Proc FREQ |
|
|
73 | (1) |
|
2.6 Some General Concepts |
|
|
73 | (9) |
|
2.6.1 Shorthand Variable Naming |
|
|
73 | (4) |
|
2.6.2 Understanding the Order= Option |
|
|
77 | (2) |
|
2.6.3 Quotes within Quotes within Quotes |
|
|
79 | (2) |
|
2.6.4 Setting the Length of Numeric Variables |
|
|
81 | (1) |
|
|
82 | (6) |
|
2.7.1 Operators Just for the Where |
|
|
83 | (3) |
|
2.7.2 Interaction with the By Statement |
|
|
86 | (2) |
|
|
88 | (2) |
|
2.8.1 Appending Data Sets Using the Data Step and SQL Union |
|
|
88 | (2) |
|
2.8.2 Using the Datasets Procedure's Append Statement |
|
|
90 | (1) |
|
2.9 Finding and Eliminating Duplicates |
|
|
90 | (7) |
|
|
91 | (1) |
|
2.9.2 Using First. and Last. By-Group Processing |
|
|
92 | (1) |
|
|
93 | (1) |
|
|
93 | (1) |
|
2.9.5 Using the Data Component Hash Object |
|
|
94 | (3) |
|
2.10 Working with Missing Values |
|
|
97 | (6) |
|
2.10.1 Special Missing Values |
|
|
97 | (1) |
|
2.10.2 Missing System Option |
|
|
98 | (1) |
|
2.10.3 Using the CMISS, NMISS, and Missing Functions |
|
|
99 | (1) |
|
2.10.4 Using the Call Missing Routine |
|
|
100 | (1) |
|
2.10.5 When Classification Variables are Missing |
|
|
100 | (1) |
|
2.10.6 Missing Values and Macro Variables |
|
|
101 | (1) |
|
2.10.7 Imputing Missing Values |
|
|
101 | (2) |
|
Chapter 3 Just In the Data Step |
|
|
103 | (82) |
|
3.1 Working across Observations |
|
|
105 | (9) |
|
3.1.1 By-Group Processing-Using First. and Last. Processing |
|
|
105 | (2) |
|
3.1.2 Transposing to Arrays |
|
|
107 | (1) |
|
3.1.3 Using the LAG Function |
|
|
108 | (2) |
|
3.1.4 Look-Ahead Using a Merge Statement |
|
|
110 | (1) |
|
3.1.5 Look-Ahead Using a Double Set Statement |
|
|
111 | (1) |
|
3.1.6 Look-Back Using a Double Set Statement |
|
|
111 | (2) |
|
3.1.7 Building a FIFO Stack |
|
|
113 | (1) |
|
3.1.8 A Bit on the Sum Statement |
|
|
114 | (1) |
|
3.2 Calculating a Person's Age |
|
|
114 | (3) |
|
|
115 | (1) |
|
|
116 | (1) |
|
3.2.3 The Way Society Measures Age |
|
|
117 | (1) |
|
3.3 Using Data Step Component Objects |
|
|
117 | (15) |
|
3.3.1 Declaring (Instantiating) the Object |
|
|
119 | (1) |
|
3.3.2 Using Methods with an Object |
|
|
119 | (1) |
|
3.3.3 Simple Sort Using the Hash Object |
|
|
120 | (1) |
|
3.3.4 Stepping through a Hash Table |
|
|
121 | (5) |
|
3.3.5 Breaking Up a Data Set into Multiple Data Sets |
|
|
126 | (2) |
|
3.3.6 Hash Tables That Reference Hash Tables |
|
|
128 | (2) |
|
3.3.7 Using a Hash Table to Update a Master Data Set |
|
|
130 | (2) |
|
3.4 Doing More with the INTNX and INTCK Functions |
|
|
132 | (6) |
|
3.4.1 Interval Multipliers |
|
|
132 | (1) |
|
|
133 | (1) |
|
|
134 | (2) |
|
|
136 | (2) |
|
|
138 | (5) |
|
3.5.1 Using the Put and Input Functions |
|
|
138 | (5) |
|
3.5.2 Decimal, Hexadecimal, and Binary Number Conversions |
|
|
143 | (1) |
|
|
143 | (22) |
|
3.6.1 The Any and Not Families of Functions |
|
|
144 | (1) |
|
3.6.2 Comparison Functions |
|
|
145 | (2) |
|
3.6.3 Concatenation Functions |
|
|
147 | (1) |
|
3.6.4 Finding Maximum and Minimum Values |
|
|
147 | (1) |
|
3.6.5 Variable Information Functions |
|
|
148 | (6) |
|
3.6.6 New Alternatives and Functions That Do More |
|
|
154 | (9) |
|
3.6.7 Functions That Put the Squeeze on Values |
|
|
163 | (2) |
|
|
165 | (7) |
|
3.7.1 By Variable Attribute Consistency |
|
|
166 | (3) |
|
3.7.2 Variables in Common That Are Not in the By List |
|
|
169 | (1) |
|
3.7.3 Repeating By Variables |
|
|
170 | (1) |
|
3.7.4 Merging without a Clear Key (Fuzzy Merge) |
|
|
171 | (1) |
|
3.8 More on the Set Statement |
|
|
172 | (4) |
|
3.8.1 Using the NOBS= and Point= Options |
|
|
172 | (2) |
|
3.8.2 Using the INDSNAME= Option |
|
|
174 | (1) |
|
3.8.3 A Comment on the End= Option |
|
|
175 | (1) |
|
3.8.4 Data Steps with Two Set Statements |
|
|
175 | (1) |
|
3.9 Doing More with Do Loops |
|
|
176 | (4) |
|
|
176 | (2) |
|
3.9.2 Compound Loop Specifications |
|
|
178 | (1) |
|
3.9.3 Special Forms of Loop Specifications |
|
|
178 | (2) |
|
|
180 | (5) |
|
|
180 | (1) |
|
|
181 | (1) |
|
3.10.3 Functions Used with Arrays |
|
|
182 | (1) |
|
|
183 | (2) |
|
Chapter 4 Sorting the Data |
|
|
185 | (12) |
|
|
186 | (4) |
|
4.1.1 The Noduprec Option |
|
|
186 | (1) |
|
|
187 | (1) |
|
|
188 | (1) |
|
4.1.4 Using the Sortseq Option |
|
|
188 | (2) |
|
|
190 | (1) |
|
4.1.6 The Equals or Noequals Options |
|
|
190 | (1) |
|
4.2 Using Data Set Options with Proc Sort |
|
|
190 | (1) |
|
4.3 Taking Advantage of Known or Knowable Sort Order |
|
|
191 | (2) |
|
4.4 Metadata Sort Information |
|
|
193 | (1) |
|
|
194 | (3) |
|
Chapter 5 Working with Data Sets |
|
|
197 | (16) |
|
5.1 Automating the Compare Process |
|
|
198 | (2) |
|
5.2 Reordering Variables on the PDV |
|
|
200 | (2) |
|
5.3 Building and Maintaining Indexes |
|
|
202 | (6) |
|
5.3.1 Introduction to Indexing |
|
|
203 | (1) |
|
5.3.2 Creating Simple Indexes |
|
|
204 | (2) |
|
5.3.3 Creating Composite Indexes |
|
|
206 | (1) |
|
5.3.4 Using the Idxwhere and Idxname Options |
|
|
206 | (1) |
|
5.3.5 Index Caveats and Considerations |
|
|
207 | (1) |
|
|
208 | (3) |
|
5.4.1 Using Proc Pwencode |
|
|
208 | (1) |
|
5.4.2 Protecting Database Passwords |
|
|
209 | (2) |
|
|
211 | (1) |
|
|
211 | (2) |
|
5.6.1 Using the Rename Function |
|
|
212 | (1) |
|
5.6.2 Using Proc Datasets |
|
|
212 | (1) |
|
Chapter 6 Table Lookup Techniques |
|
|
213 | (18) |
|
6.1 A Series of IF Statements---The Logical Lookup |
|
|
215 | (1) |
|
6.2 IF-Then/Else Lookup Statements |
|
|
215 | (1) |
|
6.3 Data Step Merges and SQL Joins |
|
|
216 | (2) |
|
6.4 Merge Using Double Set Statements |
|
|
218 | (1) |
|
|
219 | (2) |
|
|
221 | (2) |
|
6.6.1 Using the By Statement |
|
|
222 | (1) |
|
6.6.2 Using the Key= Option |
|
|
222 | (1) |
|
6.7 Key Indexing (Direct Addressing) - Using Arrays to Form a Simple Hash |
|
|
223 | (4) |
|
6.7.1 Building a List of Unique Values |
|
|
223 | (1) |
|
6.7.2 Performing a Key Index Lookup |
|
|
224 | (2) |
|
6.7.3 Using a Non-Numeric Index |
|
|
226 | (1) |
|
6.8 Using the Hash Object |
|
|
227 | (4) |
|
Part 2 Data Summary, Analysis, and Reporting |
|
|
231 | (130) |
|
Chapter 7 Means and Summary Procedures |
|
|
233 | (24) |
|
7.1 Using Multiple Class Statements and Class Statement Options |
|
|
234 | (4) |
|
7.1.1 Missing and Descending Options |
|
|
236 | (1) |
|
7.1.2 Groupinternal Option |
|
|
237 | (1) |
|
|
238 | (1) |
|
7.2 Letting SAS Name the Output Variables |
|
|
238 | (2) |
|
7.3 Statistic Specification on the Output Statement |
|
|
240 | (1) |
|
7.4 Identifying the Extremes |
|
|
241 | (5) |
|
7.4.1 Using the Maxid and Minid Options |
|
|
241 | (2) |
|
7.4.2 Using the Idgroup Option |
|
|
243 | (2) |
|
7.4.3 Using Percentiles to Create Subsets |
|
|
245 | (1) |
|
7.5 Understanding the _Type_ Variable |
|
|
246 | (2) |
|
7.6 Using the Chartype Option |
|
|
248 | (1) |
|
7.7 Controlling Summary Subsets Using the Ways Statement |
|
|
249 | (1) |
|
7.8 Controlling Summary Subsets Using the Types Statement |
|
|
250 | (1) |
|
7.9 Controlling Subsets Using the Classdata= and Exclusive Options |
|
|
251 | (2) |
|
7.10 Using the Completetypes Option |
|
|
253 | (1) |
|
7.11 Identifying Summary Subsets Using the Levels and Ways Options |
|
|
254 | (1) |
|
7.12 Class Statement vs. By Statement |
|
|
255 | (2) |
|
Chapter 8 Other Reporting and Analysis Procedures |
|
|
257 | (40) |
|
8.1 Expanding Proc Tabulate |
|
|
258 | (12) |
|
8.1.1 What You Need to Know to Get Started |
|
|
258 | (4) |
|
8.1.2 Calculating Percentages Using Proc Tabulate |
|
|
262 | (3) |
|
8.1.3 Using the Style= Option with Proc Tabulate |
|
|
265 | (2) |
|
8.1.4 Controlling Table Content with the Classdata Option |
|
|
267 | (2) |
|
8.1.5 Ordering Classification Level Headings |
|
|
269 | (1) |
|
8.2 Expanding Proc Univariate |
|
|
270 | (7) |
|
8.2.1 Generating Presentation-Quality Plots |
|
|
270 | (3) |
|
8.2.2 Using the Class Statement |
|
|
273 | (2) |
|
8.2.3 Probability and Quantile Plots |
|
|
275 | (1) |
|
8.2.4 Using the Output Statement to Calculate Percentages |
|
|
276 | (1) |
|
8.3 Doing More with Proc FREQ |
|
|
277 | (3) |
|
8.3.1 Output Statement in Proc FREQ |
|
|
277 | (2) |
|
8.3.2 Using the Nlevels Option |
|
|
279 | (1) |
|
8.4 Using Proc Report to Better Advantage |
|
|
280 | (11) |
|
8.4.1 Proc Report vs. Proc Tabulate |
|
|
280 | (1) |
|
8.4.2 Naming Report Items (Variables) in the Compute Block |
|
|
280 | (1) |
|
8.4.3 Understanding Compute Block Execution |
|
|
281 | (2) |
|
8.4.4 Using a Dummy Column to Consolidate Compute Blocks |
|
|
283 | (1) |
|
8.4.5 Consolidating Columns |
|
|
284 | (1) |
|
8.4.6 Using the Style= Option with Lines |
|
|
285 | (2) |
|
8.4.7 Setting Style Attributes with the Call Define Routine |
|
|
287 | (1) |
|
|
288 | (1) |
|
8.4.9 Aligning Decimal Points |
|
|
289 | (1) |
|
8.4.10 Conditionally Executing the Line Statement |
|
|
290 | (1) |
|
|
291 | (6) |
|
8.5.1 Using the ID and By Statements Together |
|
|
291 | (1) |
|
8.5.2 Using the Style= Option with Proc Print |
|
|
292 | (3) |
|
8.5.3 Using Proc Print to Generate a Table of Contents |
|
|
295 | (2) |
|
Chapter 9 SAS/Graph Elements You Should Know - Even if You Don't Use SAS/Graph |
|
|
297 | (16) |
|
9.1 Using Title Options with ODS |
|
|
298 | (2) |
|
9.2 Setting and Clearing Graphics Options and Settings |
|
|
300 | (3) |
|
9.3 Using SAS/Graph Statements with Procedures That Are Not SAS/Graph Procedures |
|
|
303 | (6) |
|
9.3.1 Changing Plot Symbols with the Symbol Statement |
|
|
303 | (3) |
|
9.3.2 Controlling Axes and Legends |
|
|
306 | (3) |
|
9.4 Using Annotate to Augment Graphs |
|
|
309 | (4) |
|
Chapter 10 Presentation Graphics - More than Just SAS/Graph |
|
|
313 | (12) |
|
10.1 Generating Box Plots |
|
|
314 | (3) |
|
10.1.1 Using Proc Boxplot |
|
|
314 | (1) |
|
10.1.2 Using Proc Gplot and the Symbol Statement |
|
|
315 | (1) |
|
10.1.3 Using Proc Shewhart |
|
|
316 | (1) |
|
10.2 SAS/Graph Specialty Techniques and Procedures |
|
|
317 | (6) |
|
10.2.1 Building Your Own Graphics Font |
|
|
317 | (2) |
|
10.2.2 Splitting a Text Line Using Justify= |
|
|
319 | (1) |
|
10.2.3 Using Windows Fonts |
|
|
319 | (1) |
|
|
320 | (3) |
|
|
323 | (2) |
|
Chapter 11 Output Delivery System |
|
|
325 | (36) |
|
11.1 Using the Output Destination |
|
|
326 | (6) |
|
11.1.1 Determining Object Names |
|
|
326 | (1) |
|
11.1.2 Creating a Data Set |
|
|
327 | (3) |
|
11.1.3 Using the Match_All Option |
|
|
330 | (1) |
|
11.1.4 Using the Persist= Option |
|
|
330 | (1) |
|
11.1.5 Using Match_All= with the Persist= Option |
|
|
331 | (1) |
|
11.2 Writing Reports to Excel |
|
|
332 | (5) |
|
11.2.1 Excelxp Tagset Documentation and Options |
|
|
333 | (1) |
|
11.2.2 Generating Multisheet Workbooks |
|
|
334 | (1) |
|
11.2.3 Checking Out the Styles |
|
|
335 | (2) |
|
11.3 Inline Formatting Using Escape Character Sequences |
|
|
337 | (8) |
|
|
338 | (2) |
|
11.3.2 Superscripts, Subscripts, and a Dagger |
|
|
340 | (1) |
|
11.3.3 Changing Attributes |
|
|
341 | (1) |
|
11.3.4 Using Sequence Codes to Control Indentations, Spacing, and Line Breaks |
|
|
342 | (2) |
|
11.3.5 Issuing Raw RTF Specific Commands |
|
|
344 | (1) |
|
|
345 | (7) |
|
11.4.1 Using Style Overrides to Create Links |
|
|
345 | (2) |
|
11.4.2 Using the Link= Title Statement Option |
|
|
347 | (1) |
|
11.4.3 Linking Graphics Elements |
|
|
348 | (2) |
|
11.4.4 Creating Internal Links |
|
|
350 | (2) |
|
|
352 | (4) |
|
11.5.1 User-Defined Format |
|
|
352 | (1) |
|
|
353 | (1) |
|
|
354 | (1) |
|
11.5.4 Traffic Lighting with Proc Print |
|
|
355 | (1) |
|
11.6 The ODS Layout Statement |
|
|
356 | (2) |
|
11.7 A Few Other Useful ODS Tidbits |
|
|
358 | (3) |
|
11.7.1 Using the ASIS Style Attribute |
|
|
358 | (1) |
|
11.7.2 ODS Results Statement |
|
|
358 | (3) |
|
Part 3 Techniques, Tools, and Interfaces |
|
|
361 | (128) |
|
Chapter 12 Taking Advantage of Formats |
|
|
363 | (34) |
|
12.1 Using Preloaded Formats to Modify Report Contents |
|
|
364 | (6) |
|
12.1.1 Using Preloaded Formats with Proc Report |
|
|
365 | (2) |
|
12.1.2 Using Preloaded Formats with Proc Tabulate |
|
|
367 | (2) |
|
12.1.3 Using Preloaded Formats with the Means and Summary Procedures |
|
|
369 | (1) |
|
12.2 Doing More with Picture Formats |
|
|
370 | (7) |
|
12.2.1 Date Directives and the Datatype Option |
|
|
371 | (2) |
|
12.2.2 Working with Fractional Values |
|
|
373 | (1) |
|
12.2.3 Using the Mult and Prefix Options |
|
|
374 | (2) |
|
12.2.4 Display Granularity Based on Value Ranges - Limiting Significant Digits |
|
|
376 | (1) |
|
12.3 Multilabel (MLF) Formats |
|
|
377 | (4) |
|
|
377 | (1) |
|
12.3.2 Calculating Rolling Averages |
|
|
378 | (3) |
|
12.4 Controlling Order Using the Notsorted Option |
|
|
381 | (1) |
|
12.5 Extending the Use of Format Translations |
|
|
382 | (6) |
|
12.5.1 Filtering Missing Values |
|
|
382 | (1) |
|
12.5.2 Mapping Overlapping Ranges |
|
|
383 | (1) |
|
12.5.3 Handling Text within Numeric Values |
|
|
383 | (1) |
|
12.5.4 Using Perl Regular Expressions within Format Definitions |
|
|
384 | (1) |
|
12.5.5 Passing Values to a Function as a Format Label |
|
|
384 | (4) |
|
|
388 | (2) |
|
12.6.1 Reading in Mixed Dates |
|
|
389 | (1) |
|
12.6.2 Converting Mixed Datetime Values |
|
|
389 | (1) |
|
12.7 Building Formats from Data Sets |
|
|
390 | (2) |
|
12.8 Using the Pvalue Format |
|
|
392 | (1) |
|
|
393 | (4) |
|
12.9.1 Saving Formats Permanently |
|
|
393 | (1) |
|
12.9.2 Searching for Formats |
|
|
394 | (1) |
|
12.9.3 Concatenating Format Catalogs and Libraries |
|
|
394 | (3) |
|
Chapter 13 Interfacing with the Macro Language |
|
|
397 | (40) |
|
13.1 Avoiding Macro Variable Collisions---Make Your Macro Variables %Local |
|
|
398 | (2) |
|
13.2 Using the Symputx Routine |
|
|
400 | (3) |
|
13.2.1 Compared to Call Symput |
|
|
401 | (1) |
|
13.2.2 Using Symputx to Save Values of Options |
|
|
402 | (1) |
|
13.2.3 Using Symputx to Build a List of Macro Variables |
|
|
402 | (1) |
|
13.3 Generalized Programs---Variations on a Theme |
|
|
403 | (3) |
|
13.3.1 Steps to the Generalization of a Program |
|
|
403 | (2) |
|
13.3.2 Levels of Generalization and Levels of Macro Language Understanding |
|
|
405 | (1) |
|
13.4 Utilizing Macro Libraries |
|
|
406 | (3) |
|
13.4.1 Establishing an Autocall Library |
|
|
406 | (2) |
|
13.4.2 Tracing Autocall Macro Locations |
|
|
408 | (1) |
|
13.4.3 Using Stored Compiled Macro Libraries |
|
|
408 | (1) |
|
13.4.4 Macro Library Search Order |
|
|
409 | (1) |
|
13.5 Metadata-Driven Programs |
|
|
409 | (6) |
|
13.5.1 Processing across Data Sets |
|
|
409 | (1) |
|
13.5.2 Controlling Data Validations |
|
|
410 | (5) |
|
13.6 Hard Coding---Just Don't Do It |
|
|
415 | (2) |
|
13.7 Writing Macro Functions |
|
|
417 | (3) |
|
13.8 Macro Information Sources |
|
|
420 | (6) |
|
13.8.1 Using Sashelp and Dictionary tables |
|
|
420 | (2) |
|
13.8.2 Retrieving System Options and Settings |
|
|
422 | (2) |
|
13.8.3 Accessing the Metadata of a SAS Data Set |
|
|
424 | (2) |
|
13.9 Macro Security and Protection |
|
|
426 | (4) |
|
|
426 | (1) |
|
13.9.2 Executing a Specific Macro Version |
|
|
427 | (3) |
|
13.10 Using the Macro Language In Operator |
|
|
430 | (3) |
|
13.10.1 What Can Go Wrong |
|
|
430 | (1) |
|
13.10.2 Using the Minoperator Option |
|
|
431 | (1) |
|
13.10.3 Using the Mindelimiter= Option |
|
|
432 | (1) |
|
13.10.4 Compilation vs. Execution for these Options |
|
|
432 | (1) |
|
13.11 Making Use of the Mfile System Option |
|
|
433 | (1) |
|
13.12 A Bit on Macro Quoting |
|
|
434 | (3) |
|
Chapter 14 Operating System Interface and Environmental Control |
|
|
437 | (36) |
|
|
438 | (8) |
|
14.1.1 Initialization Options |
|
|
438 | (3) |
|
14.1.2 Data Processing Options |
|
|
441 | (3) |
|
14.1.3 Saving SAS System Options |
|
|
444 | (2) |
|
14.2 Using an Autoexec Program |
|
|
446 | (1) |
|
14.3 Using the Configuration File |
|
|
446 | (3) |
|
14.3.1 Changing the Sasautos Location |
|
|
447 | (2) |
|
14.3.2 Controlling DM Initialization |
|
|
449 | (1) |
|
14.4 In the Display Manager |
|
|
449 | (18) |
|
14.4.1 Showing Column Names in ViewTable |
|
|
450 | (1) |
|
14.4.2 Using the DM Statement |
|
|
451 | (1) |
|
14.4.3 Enhanced Editor Options and Shortcuts |
|
|
452 | (4) |
|
14.4.4 Macro Abbreviations for the Enhanced Editor |
|
|
456 | (5) |
|
14.4.5 Adding Tools to the Application Tool Bar |
|
|
461 | (2) |
|
14.4.6 Adding Tools to Pull-Down and Pop-up Menus |
|
|
463 | (3) |
|
14.4.7 Adding Tools to the Keys List |
|
|
466 | (1) |
|
14.5 Using SAS to Write and Send E-mails |
|
|
467 | (1) |
|
14.6 Recovering Physical Location Information |
|
|
468 | (5) |
|
14.6.1 Using the Pathname Function |
|
|
468 | (1) |
|
14.6.2 Sashelp Views and Dictionary Tables |
|
|
468 | (1) |
|
14.6.3 Determining the Executing Program Name and Path |
|
|
469 | (1) |
|
14.6.4 Retrieving the UNC (Universal Naming Convention) Path |
|
|
470 | (3) |
|
Chapter 15 Miscellaneous Topics |
|
|
473 | (16) |
|
15.1 A Few Miscellaneous Tips |
|
|
474 | (5) |
|
15.1.1 Customizing Your Notes, Warnings, and Errors |
|
|
474 | (1) |
|
15.1.2 Enhancing Titles and Footnotes with the #BYVAL and #BYVAR Options |
|
|
475 | (2) |
|
15.1.3 Executing OS Commands |
|
|
477 | (2) |
|
15.2 Creating User-defined Functions Using Proc FCMP |
|
|
479 | (6) |
|
15.2.1 Building Your Own Functions |
|
|
479 | (2) |
|
15.2.2 Storing and Accessing Your Functions |
|
|
481 | (1) |
|
15.2.3 Interaction with the Macro Language |
|
|
482 | (1) |
|
15.2.4 Viewing Function Definitions |
|
|
483 | (1) |
|
15.2.5 Removing Functions |
|
|
484 | (1) |
|
|
485 | (4) |
|
15.3.1 RTF Diagram Completion |
|
|
486 | (1) |
|
15.3.2 Template Preparation |
|
|
486 | (1) |
|
|
487 | (2) |
|
|
489 | (2) |
|
|
491 | (16) |
|
Global Statements and Options |
|
|
492 | (3) |
|
|
492 | (1) |
|
|
493 | (1) |
|
|
493 | (1) |
|
|
493 | (2) |
|
|
495 | (1) |
|
Procedures: Steps, Statements, and Options |
|
|
495 | (5) |
|
|
495 | (5) |
|
Data Step: Statements and Options |
|
|
500 | (4) |
|
|
500 | (1) |
|
|
501 | (1) |
|
|
501 | (3) |
|
|
504 | (1) |
|
Output Delivery System, ODS |
|
|
504 | (2) |
|
ODS Destinations and Tagsets |
|
|
504 | (1) |
|
|
505 | (1) |
|
|
505 | (1) |
|
|
506 | (1) |
|
|
506 | (1) |
|
|
506 | (1) |
|
|
507 | (14) |
|
|
507 | (11) |
|
Generally Good Reading---Lots More to Learn |
|
|
518 | (3) |
|
|
518 | (1) |
|
|
518 | (1) |
|
|
518 | (1) |
|
Newsletters, Corporate and Private Sites |
|
|
519 | (1) |
|
|
519 | (1) |
|
|
519 | (1) |
|
|
520 | (1) |
Index |
|
521 | |