1 statistical software programming. stat 6360 –statistical software programming data input in sas...

25
1 Statistical Software Programming

Upload: allen-carpenter

Post on 18-Jan-2016

225 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 Statistical Software Programming. STAT 6360 –Statistical Software Programming Data Input in SAS Many ways to get your data into SAS: –Through data entry

1

Statistical Software Programming

Page 2: 1 Statistical Software Programming. STAT 6360 –Statistical Software Programming Data Input in SAS Many ways to get your data into SAS: –Through data entry

STAT 6360 –Statistical Software Programming

Data Input in SASMany ways to get your data into SAS:

– Through data entry via viewtable and other tools– As part of your data step via datalines.– Reading from raw data files (ascii or plain text files, delimited

files)– Converting the data files of other software into SAS data files.– Reading other software’s data files directly.

•We will cover all of these, but concentrate on how to read raw data using the input and infile statements.

2

Page 3: 1 Statistical Software Programming. STAT 6360 –Statistical Software Programming Data Input in SAS Many ways to get your data into SAS: –Through data entry

STAT 6360 –Statistical Software Programming

Using Viewtable to Enter DataAn easy way to enter small datasets is via viewtable.

•Click Tools → Table Editor and a blank spreadsheet will pop up in viewtable.

•Now you can enter data. Columns are variables, rows are observations.

– Right-click column names to create variable names and set variable properties.

– Then save as a SAS dataset in any available library and use as usual.3

Page 4: 1 Statistical Software Programming. STAT 6360 –Statistical Software Programming Data Input in SAS Many ways to get your data into SAS: –Through data entry

STAT 6360 –Statistical Software Programming

Example – My Stats Grades

4

1. Open viewtable. Create two character variables in columns A and B: class and grades. Use default properties.

2. Enter the statistics classes you have taken (e.g., STAT2000, STAT4210) and the grades you received (A, B+, etc.)

3. Save as dataset grades in WORK library.

4. Close viewtable and save changes.

Page 5: 1 Statistical Software Programming. STAT 6360 –Statistical Software Programming Data Input in SAS Many ways to get your data into SAS: –Through data entry

STAT 6360 –Statistical Software Programming

Example – My Stats Grades

5

5. Run the following code:

Your grades data should print:

proc print data=grades;run;

• Entering data in viewtable can be convenient for small tasks but is impractical for big datasets.

• Even for small jobs, better to have a source file for your data or have it permanently recorded in your code (e.g., in datalines).

Page 6: 1 Statistical Software Programming. STAT 6360 –Statistical Software Programming Data Input in SAS Many ways to get your data into SAS: –Through data entry

STAT 6360 –Statistical Software Programming

Using PROC IMPORT & Import Wizard•SAS has a proc called PROC IMPORT that will import various file types and convert them to SAS datasets.

– Excel files, Access files, comma separated values (.csv files), tab and other delimited ascii files, and files in SPSS, Stata, JMP and other formats.

•The import wizard is a convenient front-end to PROC IMPORT that can be used to generate PROC IMPORT code and/or to run PROC IMPORT in the background if we don’t care to see that code.

– We will illustrate it to import some data on nutritional information for different types of cereal. The cereal types were sampled using stratified random sampling from four shelves at Dillon’s grocery store in Manhattan, KS, in January, 1999. Shelf is the stratum. The data are in cereal_data.xls, an Excel file, which should be placed in your “Data Files” subfolder on your USB drive.

6

Page 7: 1 Statistical Software Programming. STAT 6360 –Statistical Software Programming Data Input in SAS Many ways to get your data into SAS: –Through data entry

STAT 6360 –Statistical Software Programming

Using PROC IMPORT & Import Wizard•Select File → Import Data…. This will give a dialog form which you can select the type of data source you want to import. Excel is default and we’ll use that, so click Next.

7

• Now browse and select cereal_data.xls from your Data Files folder and press ok.• Note that there is currently a bug in SAS for Windows X64 that

generates an error if you’re trying to import from the 32 bit version of MS Office. If you encounter this, go back and change the data source to Microsoft Excel Workbook on PC Files Server, click Next, Browse to the file, and click OK (leave the info in the PC Files Server box unchanged).

Page 8: 1 Statistical Software Programming. STAT 6360 –Statistical Software Programming Data Input in SAS Many ways to get your data into SAS: –Through data entry

STAT 6360 –Statistical Software Programming

Using PROC IMPORT & Import Wizard•Now you can select the worksheet within the Excel workbook if it has data in multiple worksheets (use Sheet1$ in our example) and, optionally, choose from some options that fine-tune the import (don’t change these options for this example). Click Next.•Now you can select a library and name your dataset. Use the WORK library and name the dataset cereal.•The wizard will generate PROC IMPORT code to import the Excel file. It now asks if you want that code written to a file so you have it for future use. Let’s do that.

– Browse to the SAScode subfolder on your USB, set the filename to import_cereal.sas, and click Save (in the browse dialog).

•Now click Finish. This will import the data, which you can now view with viewtable or by using proc print.

8

Page 9: 1 Statistical Software Programming. STAT 6360 –Statistical Software Programming Data Input in SAS Many ways to get your data into SAS: –Through data entry

STAT 6360 –Statistical Software Programming

Using PROC IMPORT & Import Wizard•Take a look at the PROC IMPORT code that was generated.

– Open import_cereal.sas in the editor. Here’s the code:

9

PROC IMPORT OUT= WORK.cereal DATAFILE= "MyPath\Data Files\cereal_data.xls" DBMS= EXCEL REPLACE; RANGE="Sheet1$"; GETNAMES=YES; MIXED=NO; SCANTEXT=YES; USEDATE=YES; SCANTIME=YES;RUN;

Dataset to be created

Source file to import

Type of source file*

• Variable names taken from first row by default. To change, use statement GETNAMES=NO;

* See SAS/ACCESS(R) 9.3 Interface to PC Files: Reference (http://tinyurl.com/m9dz4a8) for list of DBMS choices.

Overwrite output dataset if it exists.

These are file-format-specific statements. In this case, EXCEL-specific statements. See http://tinyurl.com/k5jojys for documentation.

Page 10: 1 Statistical Software Programming. STAT 6360 –Statistical Software Programming Data Input in SAS Many ways to get your data into SAS: –Through data entry

STAT 6360 –Statistical Software Programming

Using PROC IMPORT & Import Wizard

•Always check the log file after trying to import a file.– Should look like this in our example:

•Always close the Excel file before trying to import it!!! Leaving it open may result in failure to import the file or (worse) undetected strange behavior when importing the file.

10

NOTE: WORK.CEREAL data set was successfully created. NOTE: The data set WORK.CEREAL has 40 observations and 7 variables. NOTE: PROCEDURE IMPORT used (Total process time): real time 1.55 seconds cpu time 0.09 seconds

Page 11: 1 Statistical Software Programming. STAT 6360 –Statistical Software Programming Data Input in SAS Many ways to get your data into SAS: –Through data entry

STAT 6360 –Statistical Software Programming

Using PROC IMPORT & Import Wizard•PROC IMPORT can also import .csv files. cereal_data.csv is a comma-separated version of the cereal dataset.

– MS Office gives such files an Excel icon, but they are plain text files! Here is cereal_data.csv in Notepad:

11

Page 12: 1 Statistical Software Programming. STAT 6360 –Statistical Software Programming Data Input in SAS Many ways to get your data into SAS: –Through data entry

STAT 6360 –Statistical Software Programming

Using PROC IMPORT & Import Wizard•To import cereal_data.csv

– choose the .csv file type

– browse to the file’s location

– don’t change any options (for now)

– save the dataset as cereal2 (in WORK)

– and save the PROC IMPORT code as import_cereal2.sas.

•This seemed to work, but look at observation 25 (in viewtable). The cereal name is incomplete.•By default, the length of character variables is determined by scanning the 1st 20 records in the file.•Add guessingrows=41; statement to the PROC IMPORT code and retry. It works!

12

Page 13: 1 Statistical Software Programming. STAT 6360 –Statistical Software Programming Data Input in SAS Many ways to get your data into SAS: –Through data entry

STAT 6360 –Statistical Software Programming

Reading Data from Plain Text Files•Although some plain text files can be read with PROC IMPORT (delimited files), they are more flexibly input using the INFILE and INPUT statements in a data step.•Types of input – list, column, formatted, delimited, and named. We’ll cover the first 4 of these.

List Input:– We used this when using datalines (pets.sas) and in pets2.sas.– Data must be separated by spaces or delimiters.– You must read all the data in each record (line of data).– All missing values must be indicated with periods.– No spaces allowed in values of character variables.– Need length statement for character variables with length>8.– Can’t handle special data types like dates, times.

13

Page 14: 1 Statistical Software Programming. STAT 6360 –Statistical Software Programming Data Input in SAS Many ways to get your data into SAS: –Through data entry

STAT 6360 –Statistical Software Programming

Example: InputExamps.sas•This file illustrates many different input modes.

– Example 1: we use list input to read in data on tar, nicotine, CO content for 25 cigarette brands.

– Similar to pets2.sas but one complication: brand is too long (>8 characters). SAS handles this by truncating brand to length 8.

– This can be fixed with an informat or by adding a length statement to tell SAS brand has up to 16 characters.

• Must appear before input.

– Note the use of (obs=5) in PROC PRINT.• This is an example of a SAS data set option. Such options appear in

parentheses next to the name of a dataset to be used in a PROC. They affect the dataset as it is brought into the PROC for manipulation/analysis.

• In this case, we are telling PROC PRINT to use dataset cigs, but only use the first 5 observations.

14

Page 15: 1 Statistical Software Programming. STAT 6360 –Statistical Software Programming Data Input in SAS Many ways to get your data into SAS: –Through data entry

STAT 6360 –Statistical Software Programming

Example: InputExamps.sas•Example 2: Consumer Reports Data on 1993 Cars

– 26 variables, so each observation spans two lines in data file.– Two ways to handle this with input statement:

1. Insert slash (/) to tell SAS when to go to the next line.

2. Precede variables on line 1 with #1, vars on line 2 with #2, etc.

– Again we used length statement because manuf, model are long.

– This dataset has asterisks for missing values for some numeric variables.

• When SAS encounters * when expecting a number, it generates a NOTE in log window and sets the value to missing.

• This is ok in this example, but better to use periods in raw data file to avoid worrisome NOTE.

15

Page 16: 1 Statistical Software Programming. STAT 6360 –Statistical Software Programming Data Input in SAS Many ways to get your data into SAS: –Through data entry

STAT 6360 –Statistical Software Programming

Example: InputExamps.sas•Example 3: TVs and Life Expectancy – Column Input

Column Input– Useful for character or standard numeric data (no dates or

special formatting) aligned in columns in raw data file.– Advantages over list input:

• Spaces not required between values• Missing values can be left blank• Character values can be long and can contain spaces• Can skip unwanted values in raw data file

– Easy to use. After each variable on the input statement specify the column range from which to read the variable.

• Comes after $ if a character variable.

– E.g.: input name $ 1-10 shoesize 12-15;16

Page 17: 1 Statistical Software Programming. STAT 6360 –Statistical Software Programming Data Input in SAS Many ways to get your data into SAS: –Through data entry

STAT 6360 –Statistical Software Programming

Example: InputExamps.sas•Example 3: TVs and Life Expectancy – Column Input

– Data from 40 largest countries on life expectancy, TVs and doctors per capita (inverted, actually) as of 1993.

– Notice long country names with spaces handled without a length statement.

– Blank values treated as missing (e.g., people per TV in Tanzania)

17

Page 18: 1 Statistical Software Programming. STAT 6360 –Statistical Software Programming Data Input in SAS Many ways to get your data into SAS: –Through data entry

STAT 6360 –Statistical Software Programming

Example: InputExamps.sas•Example 4: Tour de France Winners – Formatted Input

Formatted Input - Informats

Q: Numeric data can’t contain characters (other than +,-,e) so how does SAS know to read 1,000 (one thousand) as 1000, or 07/04/1776 (Independence Day) as a numeric date?

A: Informats

An informat is a code to tell SAS the format to use when reading in data.–SAS also has formats, which tell it how to print or output a data value. You can think of them as “outformats”.

18

Page 19: 1 Statistical Software Programming. STAT 6360 –Statistical Software Programming Data Input in SAS Many ways to get your data into SAS: –Through data entry

STAT 6360 –Statistical Software Programming

InformatsThe three main types and their general form:

– Every character informat begins with $– The informat part is the name of the informat and, in part

determines what it does.– The w part determines the total width– The d part determines how many digits follow the decimal point

in a numeric format.– The period is an essential part of any informat.

19

Character Numeric Date

$informatw. informatw.d informatw.

Page 20: 1 Statistical Software Programming. STAT 6360 –Statistical Software Programming Data Input in SAS Many ways to get your data into SAS: –Through data entry

STAT 6360 –Statistical Software Programming

InformatsCharacter formats do things like

– Specify the length of the character value ($w.)– Trim leading blanks– Converts to UPPER CASE

Numeric formats do things like– Specify width & how many decimal places (w.d)– Handle percentages, numbers with commas

20

Page 21: 1 Statistical Software Programming. STAT 6360 –Statistical Software Programming Data Input in SAS Many ways to get your data into SAS: –Through data entry

STAT 6360 –Statistical Software Programming

InformatsDate and time formats

– Read in dates (12/07/1941, 06-jun-44) of different form and convert them to SAS date values, which are the number of days since Jan. 01, 1960.

• E.g., mmddyy10. reads 12/31/1959 and assigns it a SAS date value of -1

– Read in times of different form and convert them to SAS time values, which are the number of seconds since midnight of the current day.

• E.g., time10. reads 00:10:07.4 and assigns it a SAS time value of 607.4

– Read in times on a particular day and convert them to SAS datetime values, which are the number of seconds since midnight, Jan. 01, 1960.

•These conversions allow calculations on dates and times (e.g., how much time has passed between two dates).

21

Page 22: 1 Statistical Software Programming. STAT 6360 –Statistical Software Programming Data Input in SAS Many ways to get your data into SAS: –Through data entry

STAT 6360 –Statistical Software Programming

Example: InputExamps.sas•Example 4: Tour de France Winners – Formatted Input

– In this example, we use @n where n is a column number to tell the INPUT statement where to start reading each variable.

– Then each variable is read in from that column using the informat given after the variable name on the INPUT statement.

input @1 year 4.

@6 start_town $18.

@25 start_date mmddyy8.

22

Start from col 1 and read a number that has width 4 and no decimal places into the numeric variable year

Then start in col 6 and read 18 columns into a character variable called start_town Then start at column 25 and read a date that is 8 columns

wide and has format mmddyy (could be mm-dd-yy or mm/dd/yy) into the variable start_date. Treat as a SAS date value.

Page 23: 1 Statistical Software Programming. STAT 6360 –Statistical Software Programming Data Input in SAS Many ways to get your data into SAS: –Through data entry

STAT 6360 –Statistical Software Programming

Example: InputExamps.sas•Example 4: Tour de France Winners – Formatted Input

– The use of @n (@1, @6, @25, …) is one type of pointer control.

• We are controlling where SAS points to when reading in the next data value.

– Another pointer control is +n where n is the number of columns forward that you want SAS to move.

– E.g., input @1 year 4. +1 start_town $18.;

– This tells SAS to start at column 1 and read four columns into year. SAS will then be pointing to column 5. Then +1 tells it to move ahead one column and point to column 6. Then it reads start_town with the informat $18.

23

Page 24: 1 Statistical Software Programming. STAT 6360 –Statistical Software Programming Data Input in SAS Many ways to get your data into SAS: –Through data entry

STAT 6360 –Statistical Software Programming

Example: InputExamps.sas•Example 5: Pizza Size – Delimited Input

– Delimited (e.g., .csv) data files can be read in with INFILE and INPUT statements instead of PROC IMPORT.

– DLM=‘,’ tells SAS what kind of delimiter to expect• Use DLM=‘05’X for tab-delimited data.

– DSD option tells SAS 1. Consecutive delimiters should be interpreted as missing values.

2. Don’t read quotation marks as part of the data value

3. Treat delimiters (e.g., commas) inside quotes as part of the value, not a delimiter.

– MISSOVER option tells SAS not to go to next line in input file if values of some variables not provided. Instead give those variables missing values.

24

Page 25: 1 Statistical Software Programming. STAT 6360 –Statistical Software Programming Data Input in SAS Many ways to get your data into SAS: –Through data entry

STAT 6360 –Statistical Software Programming

Example: InputExamps.sas•Example 5: Pizza Size – Delimited Input

– Colon (:) operator on a character informat (e.g., :$9.) tells SAS to read 9 columns into the character variable, but stop if you reach a delimiter before all 9 columns have been read.

– To see how DSD, MISSOVER, colon operator work, try reading the data in pizzasize_fake.csv with the code in inputexs.sas that is written for that purpose, but omitting MISSOVER, DSD, and the colon on the :$9. informat, each in turn.

Finally, note that it is ok and sometimes convenient to mix input modes within a single input statement.

– Good example of this section 2.9 of D&S.

25