The INPUT Statement: Where
|
|
- Conrad Foster
- 6 years ago
- Views:
Transcription
1 The INPUT Statement: Where Ronald Cody, Ed.D. Robert Wood Johnson Medical School Introduction One of the most powerful features of SAS software is the ability to read data in almost any form. For example, you can have data values separated by blanks or other delimiters or you can arrange your data in columns, using one or more lines of data for each subject. You can also read selected data fields and then decide how to read the remaining data values. This tutorial will give you an overview of the immense power and flexibility of the SAS INPUT statement. Reading Space Delimited Data A common form of data entry is to separate each data value by one or more spaces. This is handy for small data sets that are entered by hand, especially for test purposes. This arrangement of data is often called "list directed" data. The rule here is that you must specify all the variables in the data lines and all the data values must be separated by one or more spaces. You must also indicate which variables are to be read as character data. Look at the following example: ***LIST DIRECTED INPUT DATA LIST INPUT X Y A $ Z 1 2 HELLO GOODBYE 6 PROC PRINT DATA=LIST TITLE 'LIST DIRECTED INPUT' Notice that you need to list the variable names on the INPUT statement and to place a dollar sign ($) after any variable that is to hold character values. Also notice that the second line of data which has multiple spaces between each data value causes no problems at all. 1 Delimiters Other Than Spaces With just a small change to the program, you can indicate any delimiter you like, in place of the default blank. To understand how this works, we need to jump ahead a bit to see how a SAS program reads data from an external data file (as opposed to data following a DATA- LINES statement). You do this by including an INFILE statement which tells the program where to find the data. The INFILE statement has several options that provide additional information on how to read these external data lines, one of them being an option to define a delimiter other than a blank. The option has the form: DLM= 'your_delimiter'. Since we want to demonstrate this option with "instream" data, we use the reserved fileref (file reference) DATALINES. This allows you to supply INFILE options with "in-stream" data. Here is the program: ***OTHER DELIMITERS DATA DELIM INFILE DATALINES DLM='#' INPUT X Y A $ Z 1#2#HELLO#3 4 # 5 # GOODBYE # 6 PROC PRINT DATA=DELIM TITLE 'OTHER DELIMITERS' In this example, we use a number sign (#) as the data delimiter. The INFILE statement uses the reserved fileref DATALINES followed by the DLM= option. Special Case of Comma Delimited Files There is a common data arrangement used by many personal computer applications. That is, to separate data values by commas and to place string values in double quotes. Furthermore, two commas together indicate that there is a missing value. The INFILE option DSD takes care of all of these features. Besides allowing commas as the data delimiter, this
2 option reads character strings enclosed in double quotes and strips off the quotes before assigning the value to the character variable. It also allows you to include commas within a character string. Finally, two commas together are interpreted as a missing value. The program that follows demonstrates all these features: ***SPECIAL COMMA DELIMITED FORMAT DATA SPECIAL INFILE DATALINES DSD INPUT X Y A $ Z 1,2,HELLO,3 4, 5, GOODBYE, 6 7,,"HI THERE",8 9,10,"HI,THERE",11 PROC PRINT DATA=SPECIAL TITLE 'SPECIAL COMMA DELIMITED FORMAT' To see that this program is working as expected, here is the output from PROC PRINT: 6SHFLDO &RPPD 'HOLPLWHG )RUPDW 2%6 < $ = +(//2 *22'%<( +, 7+(5( +,7+(5( When you use the DSD INFILE option, the default delimiter is a comma. You may use the DSD and DLM= options together to allow all the features just discussed but with a delimiter other than a comma. Data Arranged in Columns One of the most common forms of data entry is to arrange the data values in specified columns. This has several advantages over space or comma delimited data. First, you can pack more data values together without wasting space. Second, you can read only those columns of data that you want, and third, you can read the data values in any order you choose. Let's look at a SAS program that reads data arranged in columns: ***COLUMN INPUT DATA COL1 2 INPUT X 1-2 Y 3 A $ 4-10 Z 11 12HELLO 3 4 5GOODBYE6 PROC PRINT DATA=COL1 TITLE 'COLUMN INPUT' The rules are very simple. You list each of the variable names followed by the starting and ending columns (or just the starting column if there is only one column). You also place a dollar sign after any variable name that will hold character data. Notice the value of X in the two lines of data in this example. It doesn't matter whether this value is right adjusted (placed in the right-most columns of the field) or not. Good programming practice dictates that numbers should be right adjusted but SAS will read numbers correctly regardless. Reading Only Selected Variables As we mentioned earlier, once you have arranged your data values in columns, you can read only those variables that you need. So, using the same data lines as above, here is a program that only reads values for variables X and Z: ***COLUMN INPUT (SELECTED VARIABLES) DATA COL2 INPUT X 1-2 Z 11 12HELLO 3 4 5GOODBYE6 PROC PRINT DATA=COL2 TITLE 'COLUMN INPUT' It's just as easy as that. You can also read these variables in any order you choose as demonstrated in the program below: ***COLUMN INPUT (DIFFERENT ORDER) DATA COL3 INPUT Y 3 A $ 4-10 Z 11 X HELLO 3 4 5GOODBYE6
3 PROC PRINT DATA=COL3 TITLE 'COLUMN INPUT' Using Pointers and INFORMATS to Read Data As an alternative to using column specifications, you can use column pointers and IN- FORMATS. This method is actually more flexible than using column specifications since you can use a SAS INFORMAT or a userdefined INFORMAT to specify how a data value is to be read. The example that follows uses almost the same data arrangement as the program that used column specifications except for the addition of a date value. We added that to demonstrate the advantage of this method. ***POINTERS AND INFORMATS DATA INFORM1 X Y A Z DATE MMDDYY10. FORMAT DATE DATE9. 12HELLO 310/21/ GOODBYE611/12/1997 PROC PRINT DATA=INFORM1 TITLE 'POINTERS AND INFORMATS' symbols are columns pointers. For says to move to column 3. The INFORMAT following the variable name tells the program how many columns to read and how to read the data value. The INFORMAT n. indicates a numeric variable occupying n columns. The $n. INFORMAT is used for character variables and the MMDDYY10. INFORMAT converts dates in the form MM/DD/YYYY to a SAS date value (that's a topic for another talk). We chose MMDDYY10. instead of the more traditional MMDDYY8. because the year 2000 is fast approaching and, even with the YEAR- CUTOFF option, it is a good idea to use 4-digit years. 3 Using INFORMATS with List-Directed Input You may want to read list-directed or some form of delimited data and still provide an IN- FORMAT. For example, you may want to read a character variable more than 8 bytes in length or one of the data values might be a date which needs an INFORMAT to be read correctly. Here comes the colon modifer to the rescue! By placing a colon (:) after the variable name, you can then supply an INFORMAT to be used. The program will search for a delimiter and begin reading the first non-blank data value according to the INFORMAT you supply. Look at the following example: ***USING INFORMATS: LIST DIRECTED DATA (COLON MODIFIER) DATA COLON INPUT X : 2. Y : 1. A : $11. Z : 1. DATE : MMDDYY10. FORMAT DATE DATE HELLO 3 10/21/ ARRIVEDERCI 6 11/12/1997 PROC PRINT DATA=COLON TITLE 'INFORMATS: COLON MODIFIER' Notice that variable A is now 11 bytes and the variable DATE will be a true SAS date. An Alternate Method for Supplying INFORMATS An alternative to the program above is preceed the INPUT statement with an INFORMAT statement, associating each of the variables with an INFORMAT. The program below will produce exactly the same data set as the one above. Which method you choose is up to you. ***USING INFORMATS: LIST DIRECTED DATA (INFORMAT STATEMENT) DATA INFORM2 INFORMAT X 2. Y Z 1. A $11. DATE MMDDYY10. INPUT X Y A Z DATE FORMAT DATE DATE HELLO 3 10/21/ ARRIVEDERCI 6 11/12/1997
4 PROC PRINT DATA=INFORM2 TITLE 'INFORMAT STATEMENT' Space Delimited Data Values Containing Blanks What happens if you are using blanks as data delimiters and you have a character value that contains a blank, such as a first and last name? By replacing the colon modifer with an ampersand (&), the system will continue reading a character value, even if it contains single blanks. The program will know that a data value is finished when it encounters two or more blanks. Notice variable A in the program below and the values of "HELLO THERE" and "A BIENTOT" in the data lines. When you use the ampersand modifier, be sure to remember to follow the variable with two or more blanks. ***USING INFORMATS: LIST DIRECTED DATA (AMPERSAND MODIFIER) DATA AMPER INPUT X : 2. Y : 1. A & $11. Z : HELLO THERE A BIENTOT 6 PROC PRINT DATA=AMPER TITLE 'AMPERSAND MODIFIER' A Shortcut Way of Specifying Variable Names and INFORMATS First, look at the rather long and inelegant program below: ***WITHOUT VARIABLE AND INFORMAT LISTS DATA NOINLIST Q1 Q2 Q3 Q4 Q5 A B C $ XYZ PROC PRINT DATA=NOINLIST TITLE 'WITHOUT VARIABLE AND INFORMAT LISTS' Even beginning SAS programmers know that whenever a program gets tedious to write, there is usually a better and shorter way to accomplish the same thing. In this case, you can use a variable list and an INFORMAT list to shorten the program. Take a look at this program: ***VARIABLE AND INFORMAT LISTS (1) DATA INLIST1 (Q1-Q5 A B C) (5*1. 3*$1.) 12345XYZ PROC PRINT DATA=INLIST1 TITLE 'VARIABLE LISTS (1)' You can place a list of variables, including the basen-basem notation (Q1-Q5 for example), in parentheses followed by a list of INFORMATS, also placed in parentheses. The notation 5*1. or 3*$1. means to repeat the INFORMAT 5 or 3 times respectively. Each variable in the variable list is read with the corresponding INFOR- MAT in the INFORMAT list. If the INFORMAT list is shorter than the variable list, the program will "recycle" the INFORMAT list, that is, go back to the first INFORMAT in the list and go through the list as many times as necessary. You can take advantage of this feature to simplify the program like this: ***VARIABLE AND INFORMAT LISTS (2) DATA INLIST2 (A B C)($1.) 12345XYZ PROC PRINT DATA=INLIST2 TITLE 'VARIABLE LISTS (2)' By grouping variables together that use the same INFORMAT, you can list the INFORMAT just once and it will be used for each of the variables in the list. 4
5 Skipping Around Using Relative Column Pointers Suppose you have several X,Y pairs (X1,Y1 X2,Y2 and X3,Y3 for example). You might think the only way to read these data would be an INPUT statement that looked like this: INPUT X1 1 Y1 2 X2 3 Y2 4 X3 5 Y3 6 OR INPUT (X1 Y1 X2 Y2 X3 Y3)(1.) Well, there is an easier way. By using a relative columns pointer (a + sign), you can move the column pointer right or left, relative to its last position. You can use this to read each of the X-values first, skipping over the columns occupied by the Y-values and then go back to column 2 (where the Y-values start) and read all the Y-values, skipping over the columns occupied by the X's. Here is the program: ***RELATIVE COLUMN POINTERS DATA RELATIVE (X1-X3)(1. + (Y1-Y3)(1. + 1) PROC PRINT DATA=RELATIVE TITLE 'RELATIVE COLUMN POINTERS' The INPUT statement above says to start reading in column 1 (@1) and then read a single digit value (1.) and then skip a column (+1). Do this for all the X-values. When you are finished, go back to column 2 (@2) and read the Y-values in the same way. If you had more than three X's and Y's, this technique could save you lots of typing. Reading Data from an External File So far, all our examples used data lines "instream" or part of the program. Most SAS programers, especially when large amounts of data are involved, keep the data separately from the program. It is quite simple to have the program read data from an external raw data file instead of "in-stream" data. First, you use an INFILE statement to point to the data file and, second, you remove the DATALINES statement. It's as easy as that. There are two ways that an INFILE statement can point to a file. The first is to name the file directly in the INFILE statement as follows: ***READING FROM AN EXTERNAL FILE (METHOD 1) DATA EXTERN1 INFILE 'C:\SASTALKS\DATA1' INPUT X Y A $ Z PROC PRINT DATA=EXTERN1 TITLE 'DATA IN AN EXTERNAL FILE' Notice that the file name is place in quotes (single or double). If the file is in the same subdirectory as the program, you can omit the full path description and just supply the file name. We prefer that you include the entire path and file name as above so that the program is transportable and can be run from another subdirectory without changes. A second method of supplying the file name is to first define a fileref (file reference) with a FILE- NAME statement. This fileref is then named on the INFILE statement. The very important difference between this method and the previous method is that the fileref is not placed in quotes on the INFILE statement. Here is an example of this method of specifying an external file: ***READING FROM AN EXTERNAL FILE (METHOD 2) DATA EXTERN2 FILENAME PAT 'C:\SASTALKS\DATA1' INFILE PAT INPUT X Y A $ Z PROC PRINT DATA=EXTERN2 TITLE 'DATA IN AN EXTERNAL FILE' INFILE Options Whether you are reading data following a DATALINES statement or from an external file, you may need to exercise some control on how the data values are read. There are a number of INFILE options that are useful. We will only discuss a few here. If you read complicated data structures or read data from multiple files, 5
6 you will want to investigate all the possible IN- FILE options available to you. The first option we will show you concerns data lines, either "in-stream" or from external files, that may be missing data values at the end of a line of data. In the example below, line 2 only contains 3 values (for X, Y, and A). When the program attempts to read this list-directed data, it goes to the third line to find a value for Z. Then, when the data step iterates again, the pointer tries to move to the next record but meets an end-of-file instead and the data step stops. To see this clearly, look at the output from PROC PRINT shown following the program. ***INFILE OPTIONS DATA INOPT1 ***PROGRAM WITHOUT MISSOVER INPUT X Y A $ Z 1 2 HELLO GOODBYE 7 8 LAST 9 PROC PRINT DATA=INOPT1 TITLE 'INFILE OPTIONS',QILOH 2SWLRQV 2%6 < $ = +(//2 *22'%<( To solve the problem of missing data at the end of a line, when using list-directed data entry, use an INFILE option called MISSOVER. The program below uses the reserved fileref DATALINES on the INFILE statement. If you are reading data from an external file, the MIS- SOVER option is used in the same way. This option instructs the program to set any variables to a missing value if the end of a line (or record) is reached and values have not been read for all the variables in the INPUT list. Look at the program below and the resulting output. ***INFILE OPTIONS: MISSOVER DATA INOPT2 ***PROGRAM WITH MISSOVER INFILE DATALINES MISSOVER INPUT X Y A $ Z 1 2 HELLO GOODBYE 7 8 LAST 9 PROC PRINT DATA=INOPT2 TITLE 'INFILE OPTIONS',QILOH 2SWLRQV 2%6 < $ = +(//2 *22'%<( /$67 With column oriented data or when you use pointers and INFORMATS, the same problem can occur. The PAD option is the best choice for resolving this problem. This option says to PAD out short data lines with blanks to the length of the logical record (set by default or by the LRECL option). ***INFILE OPTIONS: PAD DATA INFORM INFILE DATALINES PAD INPUT X 1-2 Y 3 A $ 4-10 Z 11 12HELLO 3 4 5GOODBYE 78LAST 9 PROC PRINT DATA=INFORM TITLE 'USING THE PAD OPTION' Reading Data "Blindly" Suppose you have a data file and are not given information on the data layout. Are you dead in the water, finished, kaput? Not at all. Use the strange looking program below to first take a look at the file. Notice that there are no variables listed on the INPUT statement. This form of the INPUT statement will read an entire logical record (or line of data) but will not assign any values to variables. This does not seem very useful except for the fact that you can use a PUT statement with the keyword _INFILE_ to write out the contents of the data record to the log (the default output location) or to your 6
7 output window (by using a FILE PRINT statement). Look at the program below and the resulting log file. (Note: this form of INPUT statement is obviously useful when you are reading data from and external file. The instream data in this example is for illustrative purposes only.) ***NO VARIABLES LISTED DATA READIT INFILE INPUT PUT _INFILE_ 12345ABCDEXYZ HELLO 310/21/ GOODBYE611/12/1997 Here is a listing of the SAS log after running the program above: '$7$ 5($',7,1),/( '$7$/,1(6, B,1),/(B '$7$/,1(6 $%&'(<= +(//2 *22'%<( 127( 7+( '$7$ 6(7 :25.5($',7 +$6 2%6(59$7,216 $1' 9$5,$%/(6 127( 7+( '$7$ 67$7(0(17 86(' 6(&21'6 Using More than One INPUT Statement: The Single There are times when you want to be able to read one or more values from a data line and then, depending on the value, decide how to read the remaining values. In the example that follows, there are two data layouts in a single file. Type 1 records have age in columns 1 and 2 type 2 records have age in columns 3 and 4. The record type is stored in column 6. You want to be able to read the record type first and then decide where to read the age value. If you use two INPUT statements like this: 7 TYPE $1. IF TYPE = '1' THEN INPUT AGE 1-2 ELSE IF TYPE = '2' THEN INPUT AGE 3-4 it will not work. After the first INPUT statement is executed, the pointer moves automatically to the next line. Age values are then read from the wrong line. You want to tell the program to "hold the line" after reading the value for TYPE. You do this with a single as shown next: ***WHERE DATA TRAILING TYPE IF TYPE = '1' THEN INPUT AGE 1-2 ELSE IF TYPE = '2' THEN INPUT AGE 3-4 DROP TYPE PROC PRINT DATA=TRAILING TITLE 'SINGLE After a value is read for TYPE, the trailing tells the program not to go to the next data line for the next INPUT statement in the data step. When the data step finishes, the pointer will then move to the next line of data for another iteration of the data step. A very useful application of the single is to decide whether to read a line of data or not. For example, suppose you only want to read data on females from a raw data file. One way to do this is to read a line of data in the usual way and to delete all observations where the value of GENDER is not equal to 'F'. A much more efficient way is to first read the value of GENDER and only read the remaining values if GENDER is female. Here is how it's done. EXAMPLE DATA TRAIL2 GENDER IF GENDER NE 'F' THEN DELETE AGE HEIGHT 2. M 2368 F 4462 PROC PRINT DATA=TRAIL2 TITLE EXAMPLE'
8 If there are a lot of variables in each observation this method can save considerable computer time. Remember that when the DELETE statement is executed, control returns to the top of the DATA step. Creating Several Observations from One Line of Data: The Double What if you want to create several observations from a single line of data? In the example below, several X,Y pairs are placed on a single line to save space. A single would not help here. After a value was read for X and Y, the data step would iterate again and the pointer would move to a new line. Try it. You will have only two observations, the first with X=1, Y=2 and the second with X=7, Y=8. To hold the line for multiple iterations of the data step, use the double as shown in the examle below: ***WHERE IT'S DATA DOUBLE INPUT X PROC PRINT DATA=DOUBLE TITLE 'DOUBLE Reading Multiple Lines of Data for a Single Observation What do you do when you have more than one line of data for each observation you want to create? You use a line pointer #. In the example below, there are two lines of data for each observation. The line pointer, #, is used to tell the program that ID and DOB are on the first line and HEIGHT and WEIGHT are on the second line. ***READING MULTIPLE LINES FOR ONE OBSERVATION DATA MULT1 INPUT ID DOB MMDDYY8. HEIGHT WEIGHT 3. FORMAT DOB MMDDYY PROC PRINT DATA=MULT1 TITLE 'READING MULTIPLE LINES' If you only want to read the first two lines of data but you have more than two lines of data for each subject, make sure you include a #n at the end of your INPUT statement, where n is the number of data lines for each subject (it must be the same for each subject). The program below demonstrates this with 4 lines of data for each subject with values being read from only the first 2. ***READING MULTIPLE LINES FOR ONE OBSERVATION DATA MULT2 INPUT ID DOB MMDDYY8. HEIGHT WEIGHT 3. #4 FORMAT DOB MMDDYY PROC PRINT DATA=MULT2 TITLE 'READING MULTIPLE LINES' Supressing Error Messages in the SAS LOG For our last two examples, we will show you how to eliminate error messages from being written to the SAS log when bad data values, such as character data in a numeric field, are encountered. In the example that follows, values of 'NA' and '?' indicate that a value was missing. A normal INPUT statement generates NOTES and listings of the offending data lines in the SAS log. The following program generates such error messages: ***SUPRESSING ERROR MESSAGES DATA ERROR INPUT X Y Z
9 1 NA 3 4 5? PROC PRINT DATA=ERROR TITLE 'SUPRESSING ERROR MESSAGES' Here is a listing of the SAS log from the program above: 6XSUHVVLQJ (UURU 0HVVDJHV '$7$ (5525,1387 < = '$7$/,1(6 127(,QYDOLG GDWD IRU < LQ OLQH 58/( 1$ < = B(5525B B1B 127(,QYDOLG GDWD IRU = LQ OLQH " < = B(5525B B1B 127( 7KH GDWD VHW :25.(5525 KDV REVHUYDWLRQV DQG YDULDEOHV 127( 7KH '$7$ VWDWHPHQW XVHG VHFRQGV If you know the there are invalid data values, such as NA (not applicable) in a numeric field and you want to avoid all the NOTES in the SAS log, use a? modifier in your INPUT statement. A single? following the variable name tells the program to omit the NOTES from the log. Look at the program below and the resulting log. ***SUPRESSING ERROR MESSAGES DATA NOERROR1 INPUT X? Y? Z? 1 NA 3 4 5? PROC PRINT DATA=NOERROR1 TITLE 'SUPRESSING ERROR MESSAGES' 6XSUHVVLQJ (UURU 0HVVDJHV '$7$ 12(5525,1387 " < " = " '$7$/,1(6 58/( 1$ < = B(5525B B1B " < = B(5525B B1B 127( 7KH GDWD VHW :25.12(5525 KDV REVHUYD WLRQV DQG YDULDEOHV 127( 7KH '$7$ VWDWHPHQW XVHG VHFRQGV Finally, to completely eliminate both the NOTES and the data listing, use a double?? following the variable name like this: ***SUPRESSING ERROR MESSAGES DATA NOERROR2 INPUT X?? Y?? Z?? 1 NA 3 4 5? PROC PRINT DATA=NOERROR2 TITLE 'SUPRESSING ERROR MESSAGES' Notice that the SAS log (following) indicates no errors. Use this with caution! Make sure you understand your data before overriding error messages. 6XSUHVVLQJ (UURU 0HVVDJHV '$7$ 12(5525,1387 "" < "" = "" '$7$/,1(6 127( 7KH GDWD VHW :25.12(5525 KDV REVHUYD WLRQV DQG YDULDEOHV 127( 7KH '$7$ VWDWHPHQW XVHG VHFRQGV One final example shows how a double?? can allow you to read a date field with invalid dates such as 99/99/99, or MISSING, in place of a valid date. ***SUPRESSING ERROR MESSAGES DATA NOERROR3 DATE?? X FORMAT DATE MMDDYY8. 10/21/46 3 MISSING 4 99/99/99 5 PROC PRINT DATA=NOERROR3 TITLE 'SUPRESSING ERROR MESSAGES' Conclusion We have demonstrated some of the power and versitility of the seemingly simple INPUT statement. Remember that the INPUT statement is one of the strengths of the SAS language that 9
10 allows you to read such diverse types of data easily. SAS is a registered trademark or trademark of SAS Institute Inc. in the USA and other countries, indicated USA registration. Ronald P. Cody, Ed.D. Robert Wood Johnson Medical School Department of Environmental and Community Medicine 675 Hoes Lane Piscataway, NJ (732) cody@umdnj.edu 10
The INPUT Statement: Where It
The INPUT Statement: Where It s @ Ron Cody email: ron.cody@gmail.com Author page: Support.sas.com/cody List Directed Input data list input X Y A $ Z datalines 1 2 hello 3 4 5 goodbye 6 title 'List Directed
Chapter 7 File Access. Chapter Table of Contents
Chapter 7 File Access Chapter Table of Contents OVERVIEW...105 REFERRING TO AN EXTERNAL FILE...105 TypesofExternalFiles...106 READING FROM AN EXTERNAL FILE...107 UsingtheINFILEStatement...107 UsingtheINPUTStatement...108
Chapter 2: Getting Data Into SAS
Chapter 2: Getting Data Into SAS Data stored in many different forms/formats. Four categories of ways to read in data. 1. Entering data directly through keyboard 2. Creating SAS data sets from raw data
SAS 101. Based on Learning SAS by Example: A Programmer s Guide Chapter 21, 22, & 23. By Tasha Chapman, Oregon Health Authority
SAS 101 Based on Learning SAS by Example: A Programmer s Guide Chapter 21, 22, & 23 By Tasha Chapman, Oregon Health Authority Topics covered All the leftovers! Infile options Missover LRECL=/Pad/Truncover
Getting Your Data into SAS The Basics. Math 3210 Dr. Zeng Department of Mathematics California State University, Bakersfield
Getting Your Data into SAS The Basics Math 3210 Dr. Zeng Department of Mathematics California State University, Bakersfield Outline Getting data into SAS -Entering data directly into SAS -Creating SAS
17. Reading free-format data. GIORGIO RUSSOLILLO - Cours de prépara)on à la cer)fica)on SAS «Base Programming» 386
17. Reading free-format data 386 Reading free format data: The list input A raw dataset is free-format when it is not arranged in fixed fields. -> Fields are separated by a delimiter List input allows
ECLT 5810 SAS Programming - Introduction
ECLT 5810 SAS Programming - Introduction Why SAS? Able to process data set(s). Easy to handle multiple variables. Generate useful basic analysis Summary statistics Graphs Many companies and government
Using a HASH Table to Reference Variables in an Array by Name. John Henry King, Hopper, Arkansas
PharmaSUG 2011 - Paper TT04 Using a HASH Table to Reference Variables in an Array by Name John Henry King, Hopper, Arkansas ABSTRACT Array elements are referenced by their index value using a constant,
II (concatenation), INDEX, INDEXC, AND SOUNDEX. Wow, did you realize there were so many string functions? let's get started.
Having a Ball with Strings Ronald Cody, Ed.D. Robert Wood Johnson Medical School Introduction SAS software is especially rich in its assortment of functions that deal with character data. This class of
SAS PROGRAMMING AND APPLICATIONS (STAT 5110/6110): FALL 2015 Module 2
SAS PROGRAMMING AND APPLICATIONS (STAT 5110/6110): FALL 2015 Department of MathemaGcs and StaGsGcs Phone: 4-3620 Office: Parker 364- A E- mail: carpedm@auburn.edu Web: hup://www.auburn.edu/~carpedm/stat6110
DSCI 325: Handout 2 Getting Data into SAS Spring 2017
DSCI 325: Handout 2 Getting Data into SAS Spring 2017 Data sets come in many different formats. In some situations, data sets are stored on paper (e.g., surveys) and other times data are stored in huge
Write SAS Code to Generate Another SAS Program A Dynamic Way to Get Your Data into SAS
Paper 175-29 Write SAS Code to Generate Another SAS Program A Dynamic Way to Get Your Data into SAS Linda Gau, Pro Unlimited @ Genentech, Inc., South San Francisco, CA ABSTRACT In this paper we introduce
ASSIGNMENT #2 ( *** ANSWERS ***) 1
ASSIGNMENT #2 ( *** ANSWERS ***) 1 * problem #1 *** WHERE WILL THE PERMANENT SAS DATA SET BE WRITTEN libname x 'i:\' CREATE A PERMANENT SAS DATA SET NAMED CLINICAL USE AN INFILE STATEMENT TO TELL SAS WHERE
Other Data Sources SAS can read data from a variety of sources:
Other Data Sources SAS can read data from a variety of sources: Plain text files, including delimited and fixed-column files Spreadsheets, such as Excel Databases XML Others Text Files Text files of various
16. Reading raw data in fixed fields. GIORGIO RUSSOLILLO - Cours de prépara)on à la cer)fica)on SAS «Base Programming» 364
16. Reading raw data in fixed fields 364 Reading raw Dataset: three solu)ons You can mix all of them! Data that SAS cannot read without further informa)on 365 Reading standard data with column input: review
Introduction to Programming in C Department of Computer Science and Engineering. Lecture No. #43. Multidimensional Arrays
Introduction to Programming in C Department of Computer Science and Engineering Lecture No. #43 Multidimensional Arrays In this video will look at multi-dimensional arrays. (Refer Slide Time: 00:03) In
Use That SAP to Write Your Code Sandra Minjoe, Genentech, Inc., South San Francisco, CA
Paper DM09 Use That SAP to Write Your Code Sandra Minjoe, Genentech, Inc., South San Francisco, CA ABSTRACT In this electronic age we live in, we usually receive the detailed specifications from our biostatistician
Using Dynamic Data Exchange
145 CHAPTER 8 Using Dynamic Data Exchange Overview of Dynamic Data Exchange 145 DDE Syntax within SAS 145 Referencing the DDE External File 146 Determining the DDE Triplet 146 Controlling Another Application
What Is New in CSI-Data-Miner 6.0A and B?
Data-Miner 6.0A "Auto" and "Task" mode scripts Data-Miner will now run in either "Auto" mode or "Task" mode. Auto is the way that previous versions of Data-Miner have operated with reading and writing
Introduction to SAS Mike Zdeb ( , #1
Mike Zdeb (402-6479, msz03@albany.edu) #1 (1) INTRODUCTION Once, the acronym SAS actually did stand for Statistical Analysis System. Now, when you use the term SAS, you are referring to a collection of
This Text file. Importing Non-Standard Text Files using and / Operators.
Paper CC45 @/@@ This Text file. Importing Non-Standard Text Files using @,@@ and / Operators. Russell Woods, Wells Fargo Home Mortgage, Fort Mill SC ABSTRACT SAS in recent years has done a fantastic job
ERROR: ERROR: ERROR:
ERROR: ERROR: ERROR: Formatting Variables: Back and forth between character and numeric Why should you care? DATA name1; SET name; if var = Three then delete; if var = 3 the en delete; if var = 3 then
Contents. Overview How SAS processes programs Compilation phase Execution phase Debugging a DATA step Testing your programs
SAS Data Step Contents Overview How SAS processes programs Compilation phase Execution phase Debugging a DATA step Testing your programs 2 Overview Introduction This section teaches you what happens "behind
1. Lexical Analysis Phase
1. Lexical Analysis Phase The purpose of the lexical analyzer is to read the source program, one character at time, and to translate it into a sequence of primitive units called tokens. Keywords, identifiers,
SAS Certification Handout #6: Ch
SAS Certification Handout #6: Ch. 16-18 /************ Ch. 16 ******************* /* Suppose we have numeric variables ModelNumber Price Weight Change and date variable Date, plus a string variable Designer
A Brief Tutorial on PERL Regular Expressions
bt002 An Introduction to PERL Regular Expressions Ronald Cody, Ed.D., Robert Wood Johnson Medical School, Piscataway, NJ Introduction PERL regular expressions were added to SAS in Version 9. SAS regular
LOOPS. Repetition using the while statement
1 LOOPS Loops are an extremely useful feature in any programming language. They allow you to direct the computer to execute certain statements more than once. In Python, there are two kinds of loops: while
Accessing Data and Creating Data Structures. SAS Global Certification Webinar Series
Accessing Data and Creating Data Structures SAS Global Certification Webinar Series Accessing Data and Creating Data Structures Becky Gray Certification Exam Developer SAS Global Certification Michele
Introduction to Programming in C Department of Computer Science and Engineering. Lecture No. #44. Multidimensional Array and pointers
Introduction to Programming in C Department of Computer Science and Engineering Lecture No. #44 Multidimensional Array and pointers In this video, we will look at the relation between Multi-dimensional
ABSTRACT: INTRODUCTION: WEB CRAWLER OVERVIEW: METHOD 1: WEB CRAWLER IN SAS DATA STEP CODE. Paper CC-17
Paper CC-17 Your Friendly Neighborhood Web Crawler: A Guide to Crawling the Web with SAS Jake Bartlett, Alicia Bieringer, and James Cox PhD, SAS Institute Inc., Cary, NC ABSTRACT: The World Wide Web has
Omitting Records with Invalid Default Values
Paper 7720-2016 Omitting Records with Invalid Default Values Lily Yu, Statistics Collaborative Inc. ABSTRACT Many databases include default values that are set inappropriately. These default values may
WRITE SAS CODE TO GENERATE ANOTHER SAS PROGRAM
WRITE SAS CODE TO GENERATE ANOTHER SAS PROGRAM A DYNAMIC WAY TO GET YOUR DATA INTO THE SAS SYSTEM Linda Gau, ProUnlimited, South San Francisco, CA ABSTRACT In this paper we introduce a dynamic way to create
(Refer Slide Time: 01:12)
Internet Technology Prof. Indranil Sengupta Department of Computer Science and Engineering Indian Institute of Technology, Kharagpur Lecture No #22 PERL Part II We continue with our discussion on the Perl
Cody s Collection of Popular SAS Programming Tasks and How to Tackle Them
Cody s Collection of Popular SAS Programming Tasks and How to Tackle Them Ron Cody Contents List of Programs... ix About This Book... xv About The Author... xix Acknowledgments... xxi Chapter 1 Tasks Involving
April 4, SAS General Introduction
PP 105 Spring 01-02 April 4, 2002 SAS General Introduction TA: Kanda Naknoi kanda@stanford.edu Stanford University provides UNIX computing resources for its academic community on the Leland Systems, which
CHAPTER 7 Using Other SAS Software Products
77 CHAPTER 7 Using Other SAS Software Products Introduction 77 Using SAS DATA Step Features in SCL 78 Statements 78 Functions 79 Variables 79 Numeric Variables 79 Character Variables 79 Expressions 80
Make Your Life a Little Easier: A Collection of SAS Macro Utilities. Pete Lund, Northwest Crime and Social Research, Olympia, WA
Make Your Life a Little Easier: A Collection of SAS Macro Utilities Pete Lund, Northwest Crime and Social Research, Olympia, WA ABSTRACT SAS Macros are used in a variety of ways: to automate the generation
BEYOND FORMAT BASICS 1
BEYOND FORMAT BASICS 1 CNTLIN DATA SETS...LABELING VALUES OF VARIABLE One common use of a format in SAS is to assign labels to values of a variable. The rules for creating a format with PROC FORMAT are
Some _FILE_ Magic Mike Zdeb, FSL, University at Albany School of Public Health, Rensselaer, NY
SESUG 2016 Paper CC-171 Some _FILE_ Magic Mike Zdeb, FSL, University at Albany School of Public Health, Rensselaer, NY ABSTRACT The use of the SAS automatic variable _INFILE_ has been the subject of several
SUGI 29 Data Warehousing, Management and Quality
Building a Purchasing Data Warehouse for SRM from Disparate Procurement Systems Zeph Stemle, Qualex Consulting Services, Inc., Union, KY ABSTRACT SAS Supplier Relationship Management (SRM) solution offers
A PROGRAM IS A SEQUENCE of instructions that a computer can execute to
A PROGRAM IS A SEQUENCE of instructions that a computer can execute to perform some task. A simple enough idea, but for the computer to make any use of the instructions, they must be written in a form
Creation of SAS Dataset
Creation of SAS Dataset Contents SAS data step Access to PC files Access to Oracle Access to SQL 2 SAS Data Step Contents Creating SAS data sets from raw data Creating and managing variables 3 Creating
There are functions to handle strings, so we will see the notion of functions itself in little a detail later. (Refer Slide Time: 00:12)
Programming Data Structures, Algorithms Prof. Shankar Balachandran Department of Computer Science and Engineering Indian Institute of Technology, Madras Module - 13b Lecture - 19 Functions to handle strings;
An Introduction to SAS University Edition
An Introduction to SAS University Edition Ron Cody From An Introduction to SAS University Edition. Full book available for purchase here. Contents List of Programs... xi About This Book... xvii About the
Using Unnamed and Named Pipes
227 CHAPTER 12 Using Unnamed and Named Pipes Overview of Pipes 227 Using Unnamed Pipes 228 Unnamed Pipe Syntax 228 Using Redirection Sequences 229 Unnamed Pipe Example 229 Using Named Pipes 230 Named Pipe
Using an Array as an If-Switch Nazik Elgaddal and Ed Heaton, Westat, Rockville, MD
Using an Array as an If-Switch Nazik Elgaddal and Ed Heaton, Westat, Rockville, MD Abstract Do you sometimes find yourself using nested IF statements or nested SELECT blocks? Does the code become more
Week - 01 Lecture - 04 Downloading and installing Python
Programming, Data Structures and Algorithms in Python Prof. Madhavan Mukund Department of Computer Science and Engineering Indian Institute of Technology, Madras Week - 01 Lecture - 04 Downloading and
Lecture 05 I/O statements Printf, Scanf Simple statements, Compound statements
Programming, Data Structures and Algorithms Prof. Shankar Balachandran Department of Computer Science and Engineering Indian Institute of Technology, Madras Lecture 05 I/O statements Printf, Scanf Simple
A Macro that can Search and Replace String in your SAS Programs
ABSTRACT MWSUG 2016 - Paper BB27 A Macro that can Search and Replace String in your SAS Programs Ting Sa, Cincinnati Children s Hospital Medical Center, Cincinnati, OH In this paper, a SAS macro is introduced
Creating a new form with check boxes, drop-down list boxes, and text box fill-ins. Customizing each of the three form fields.
In This Chapter Creating a new form with check boxes, drop-down list boxes, and text box fill-ins. Customizing each of the three form fields. Adding help text to any field to assist users as they fill
In this simple example, it is quite clear that there are exactly two strings that match the above grammar, namely: abc and abcc
JavaCC: LOOKAHEAD MiniTutorial 1. WHAT IS LOOKAHEAD The job of a parser is to read an input stream and determine whether or not the input stream conforms to the grammar. This determination in its most
If You Need These OBS and These VARS, Then Drop IF, and Keep WHERE Jay Iyengar, Data Systems Consultants LLC
Paper 2417-2018 If You Need These OBS and These VARS, Then Drop IF, and Keep WHERE Jay Iyengar, Data Systems Consultants LLC ABSTRACT Reading data effectively in the DATA step requires knowing the implications
Earthwork 3D for Dummies Doing a digitized dirt takeoff calculation the swift and easy way
Introduction Earthwork 3D for Dummies Doing a digitized dirt takeoff calculation the swift and easy way Getting to know you Earthwork has inherited its layout from its ancestors, Sitework 98 and Edge.
Intro. Scheme Basics. scm> 5 5. scm>
Intro Let s take some time to talk about LISP. It stands for LISt Processing a way of coding using only lists! It sounds pretty radical, and it is. There are lots of cool things to know about LISP; if
Bits, Words, and Integers
Computer Science 52 Bits, Words, and Integers Spring Semester, 2017 In this document, we look at how bits are organized into meaningful data. In particular, we will see the details of how integers are
The Programmer's Solution to the Import/Export Wizard
The Programmer's Solution to the Import/Export Wizard Lora D. Delwiche, University of California, Davis, CA Susan J. Slaughter, SAS Consultant, Davis, CA Abstract Do you like what the Import/Export Wizard
printf( Please enter another number: ); scanf( %d, &num2);
CIT 593 Intro to Computer Systems Lecture #13 (11/1/12) Now that we've looked at how an assembly language program runs on a computer, we're ready to move up a level and start working with more powerful
Learning SAS by Example
Learning SAS by Example A Programmer's Guide Second Edition.sas Ron Cody The correct bibliographic citation for this manual is as follows: Cody, Ron. 2018. Learning SAS by Example: A Programmer's Guide,
Boolean Expressions. Is Equal and Is Not Equal
3 MAKING CHOICES Now that we ve covered how to create constants and variables, you re ready to learn how to tell your computer to make choices. This chapter is about controlling the flow of a computer
Boolean Expressions. Is Equal and Is Not Equal
3 MAKING CHOICES ow that we ve covered how to create constants and variables, you re ready to learn how to tell your computer to make choices. This chapter is about controlling the flow of a computer program
Programming in C++ Prof. Partha Pratim Das Department of Computer Science and Engineering Programming in C++ Indian Institute of Technology, Kharagpur
Programming in C++ Prof. Partha Pratim Das Department of Computer Science and Engineering Programming in C++ Indian Institute of Technology, Kharagpur Lecture 14 Default Parameters and Function Overloading
Using Recursion for More Convenient Macros
Paper BB-04 Using Recursion for More Convenient Macros Nate Derby, Stakana Analytics, Seattle, WA ABSTRACT There are times when a macro needs to alternatively be applied to either one value or a list of
Essentials of PDV: Directing the Aim to Understanding the DATA Step! Arthur Xuejun Li, City of Hope National Medical Center, Duarte, CA
PharmaSUG 2013 - Paper TF17 Essentials of PDV: Directing the Aim to Understanding the DATA Step! Arthur Xuejun Li, City of Hope National Medical Center, Duarte, CA ABSTRACT Beginning programmers often
TLF Management Tools: SAS programs to help in managing large number of TLFs. Eduard Joseph Siquioco, PPD, Manila, Philippines
PharmaSUG China 2018 Paper AD-58 TLF Management Tools: SAS programs to help in managing large number of TLFs ABSTRACT Eduard Joseph Siquioco, PPD, Manila, Philippines Managing countless Tables, Listings,
Lab #0 Getting Started Due In Your Lab, August 25, 2004
Lab #0 Getting Started Due In Your Lab, August 25, 2004 Name: Lab Time: Grade: /10 Man UNIX systems contain on-line manuals called man pages that are accessed through the program man. To find out how to
My Favorite bash Tips and Tricks
1 of 6 6/18/2006 7:44 PM My Favorite bash Tips and Tricks Prentice Bisbal Abstract Save a lot of typing with these handy bash features you won't find in an old-fashioned UNIX shell. bash, or the Bourne
How to Use Adhoc Parameters in Actuate Reports
How to Use Adhoc Parameters in Actuate Reports By Chris Geiss chris_geiss@yahoo.com http://www.chrisgeiss.com How to Use Adhoc Parameters in Actuate Reports By Chris Geiss Revised 3/31/2002 This document
USING SAS SOFTWARE TO COMPARE STRINGS OF VOLSERS IN A JCL JOB AND A TSO CLIST
USING SAS SOFTWARE TO COMPARE STRINGS OF VOLSERS IN A JCL JOB AND A TSO CLIST RANDALL M NICHOLS, Mississippi Dept of ITS, Jackson, MS ABSTRACT The TRANSLATE function of SAS can be used to strip out punctuation
4. Write sets of directions for how to check for direct variation. How to check for direct variation by analyzing the graph :
Name Direct Variations There are many relationships that two variables can have. One of these relationships is called a direct variation. Use the description and example of direct variation to help you
Functional Programming in Haskell Prof. Madhavan Mukund and S. P. Suresh Chennai Mathematical Institute
Functional Programming in Haskell Prof. Madhavan Mukund and S. P. Suresh Chennai Mathematical Institute Module # 02 Lecture - 03 Characters and Strings So, let us turn our attention to a data type we have
Using GitHub to Share with SparkFun a
Using GitHub to Share with SparkFun a learn.sparkfun.com tutorial Available online at: http://sfe.io/t52 Contents Introduction Gitting Started Forking a Repository Committing, Pushing and Pulling Syncing
Hidden in plain sight: my top ten underpublicized enhancements in SAS Versions 9.2 and 9.3
Hidden in plain sight: my top ten underpublicized enhancements in SAS Versions 9.2 and 9.3 Bruce Gilsen, Federal Reserve Board, Washington, DC ABSTRACT SAS Versions 9.2 and 9.3 contain many interesting
MARK CARPENTER, Ph.D.
MARK CARPENTER, Ph.D. Module 1 : THE DATA STEP (1, 2, 3) Keywords : DATA, INFILE, INPUT, FILENAME, DATALINES Procedures : PRINT Pre-Lecture Preparation: create directory on your local hard drive called
Lesson 1: Writing Your First JavaScript
JavaScript 101 1-1 Lesson 1: Writing Your First JavaScript OBJECTIVES: In this lesson you will be taught how to Use the tag Insert JavaScript code in a Web page Hide your JavaScript
Module 1: Introduction RStudio
Module 1: Introduction RStudio Contents Page(s) Installing R and RStudio Software for Social Network Analysis 1-2 Introduction to R Language/ Syntax 3 Welcome to RStudio 4-14 A. The 4 Panes 5 B. Calculator
Reading data in SAS and Descriptive Statistics
P8130 Recitation 1: Reading data in SAS and Descriptive Statistics Zilan Chai Sep. 18 th /20 th 2017 Outline Intro to SAS (windows, basic rules) Getting Data into SAS Descriptive Statistics SAS Windows
Direct Variations DIRECT AND INVERSE VARIATIONS 19. Name
DIRECT AND INVERSE VARIATIONS 19 Direct Variations Name Of the many relationships that two variables can have, one category is called a direct variation. Use the description and example of direct variation
Paper PS05_05 Using SAS to Process Repeated Measures Data Terry Fain, RAND Corporation Cyndie Gareleck, RAND Corporation
Paper PS05_05 Using SAS to Process Repeated Measures Data Terry Fain, RAND Corporation Cyndie Gareleck, RAND Corporation ABSTRACT Data that contain multiple observations per case are called repeated measures
Getting Started. Excerpted from Hello World! Computer Programming for Kids and Other Beginners
Getting Started Excerpted from Hello World! Computer Programming for Kids and Other Beginners EARLY ACCESS EDITION Warren D. Sande and Carter Sande MEAP Release: May 2008 Softbound print: November 2008
Base and Advance SAS
Base and Advance SAS BASE SAS INTRODUCTION An Overview of the SAS System SAS Tasks Output produced by the SAS System SAS Tools (SAS Program - Data step and Proc step) A sample SAS program Exploring SAS
SAS Certification Handout #7: Ch
SAS Certification Handout #7: Ch. 19-21 /************ Ch. 19 ********************/ /* Consider a mailing list example, partial from http://mlb.mlb.com/team/ 1---+----10---+----20---+ Kansas City Royals
ssh tap sas913 sas
Fall 2010, STAT 430 SAS Examples SAS9 ===================== ssh abc@glue.umd.edu tap sas913 sas https://www.statlab.umd.edu/sasdoc/sashtml/onldoc.htm a. Reading external files using INFILE and INPUT (Ch
22S:166. Checking Values of Numeric Variables
22S:1 Computing in Statistics Lecture 24 Nov. 2, 2016 1 Checking Values of Numeric Variables range checks when you know what the range of possible values is for a given quantitative variable internal consistency
Simplifying Your %DO Loop with CALL EXECUTE Arthur Li, City of Hope National Medical Center, Duarte, CA
PharmaSUG 2017 BB07 Simplifying Your %DO Loop with CALL EXECUTE Arthur Li, City of Hope National Medical Center, Duarte, CA ABSTRACT One often uses an iterative %DO loop to execute a section of a macro
CS 251 Intermediate Programming Java Basics
CS 251 Intermediate Programming Java Basics Brooke Chenoweth University of New Mexico Spring 2018 Prerequisites These are the topics that I assume that you have already seen: Variables Boolean expressions
Reading in Data Directly from Microsoft Word Questionnaire Forms
Paper 1401-2014 Reading in Data Directly from Microsoft Word Questionnaire Forms Sijian Zhang, VA Pittsburgh Healthcare System ABSTRACT If someone comes to you with hundreds of questionnaire forms in Microsoft
Radix Searching. The insert procedure for digital search trees also derives directly from the corresponding procedure for binary search trees:
Radix Searching The most simple radix search method is digital tree searching - the binary search tree with the branch in the tree according to the bits of keys: at the first level the leading bit is used,
Topic C. Communicating the Precision of Measured Numbers
Topic C. Communicating the Precision of Measured Numbers C. page 1 of 14 Topic C. Communicating the Precision of Measured Numbers This topic includes Section 1. Reporting measurements Section 2. Rounding
COMP 110 Project 1 Programming Project Warm-Up Exercise
COMP 110 Project 1 Programming Project Warm-Up Exercise Creating Java Source Files Over the semester, several text editors will be suggested for students to try out. Initially, I suggest you use JGrasp,
Formulas in Microsoft Excel
Formulas in Microsoft Excel Formulas are the main reason for wanting to learn to use Excel. This monograph is intended as a quick reference to the basic concepts underlying the use of formulas. It is prepared
2 Spreadsheet Considerations 3 Zip Code and... Tax ID Issues 4 Using The Format... Cells Dialog 5 Creating The Source... File
Contents I Table of Contents Part 1 Introduction 1 Part 2 Importing from Microsoft Excel 1 1 Overview... 1 2 Spreadsheet Considerations... 1 3 Zip Code and... Tax ID Issues 2 4 Using The Format... Cells
MISSOVER, TRUNCOVER, and PAD, OH MY!! or Making Sense of the INFILE and INPUT Statements. Randall Cates, MPH, Technical Training Specialist
MISSOVER, TRUNCOVER, and PAD, OH MY!! or Making Sense of the INFILE and INPUT Statements. Randall Cates, MPH, Technical Training Specialist ABSTRACT The SAS System has many powerful tools to store, analyze
AN INTRODUCTION TO MACRO VARIABLES AND MACRO PROGRAMS Mike Zdeb, School of Public Health
AN INTRODUCTION TO MACRO VARIABLES AND MACRO PROGRAMS Mike Zdeb, University@Albany School of Public Health INTRODUCTION There are a number of SAS tools that you may never have to use. Why? The main reason
Introduction OR CARDS. INPUT DATA step OUTPUT DATA 8-1
Introduction Thus far, all the DATA step programs we have seen have involved reading and writing only SAS data sets. In this chapter we will present techniques to read and write external or "raw" files
Introduction. Getting Started with the Macro Facility CHAPTER 1
1 CHAPTER 1 Introduction Getting Started with the Macro Facility 1 Replacing Text Strings Using Macro Variables 2 Generating SAS Code Using Macros 3 Inserting Comments in Macros 4 Macro Definition Containing
6.001 Notes: Section 15.1
6.001 Notes: Section 15.1 Slide 15.1.1 Our goal over the next few lectures is to build an interpreter, which in a very basic sense is the ultimate in programming, since doing so will allow us to define
Variables and Literals
C++ By 4 EXAMPLE Variables and Literals Garbage in, garbage out! To understand data processing with C++, you must understand how C++ creates, stores, and manipulates data. This chapter teaches you how
How to Think Through the SAS DATA Step
How to Think Through the SAS DATA Step Ian Whitlock, Kennett Square, PA Abstract You are relatively new to SAS and interested in writing SAS code. You have probably written DATA step code; some works,
TIPS FROM THE TRENCHES
TIPS FROM THE TRENCHES Christopher Bost MDRC SAS Users Group October 1, 2008 Recent user questions 2 How can I print long character values? How can I EXPORT formatted values to Excel? How can I check for
Foundations and Fundamentals. SAS System Options: The True Heroes of Macro Debugging Kevin Russell and Russ Tyndall, SAS Institute Inc.
SAS System Options: The True Heroes of Macro Debugging Kevin Russell and Russ Tyndall, SAS Institute Inc., Cary, NC ABSTRACT It is not uncommon for the first draft of any macro application to contain errors.