410 likes | 420 Views
HRP223 - 2008. Topic 2 – Using EG. At this point you can:. Start up a project Use SAS as a calculator Set some configuration options Remember to work in WORK, rather than SASUSER Create a library Import a dataset into work or your custom library Subset a dataset
E N D
HRP223 - 2008 Topic 2 – Using EG
At this point you can: • Start up a project • Use SAS as a calculator • Set some configuration options • Remember to work in WORK, rather than SASUSER • Create a library • Import a dataset • into work or your custom library • Subset a dataset • You can use data steps, write or point/click to SQL
Working on a Project Set up a library to hold your permanent data. Import data into that library. Look at what you’ve got. Check for bad data. Subset the data to keep the data you want. Make a report.
Make the Library Tools menu > Assign Library… Review the code (if you want) Check the log
Write the Import Code Where is the dataset node in the flowchart? The log is good. It is a bug… they forgot to draw the dataset if you use proc import.
You really want to put the source file in the library. Tweak the code and link the import node to the library.
Files in a Library Once a file is in a library, you can access it just like any other file on your computer.
Structure • If you have a dataset on the left margin of a process flow, you will have a problem in your future. • Put every dataset into a library. • If your datasets move across machines you just need to change the one library reference path. • Add a note (File > New > Note) with information on the origin of every data file and connect it. • Include the time, date, and source of the file (email titles help also).
Add a Variable • To add a variable with EG: • Select the dataset • Choose Filter and Query…. from the Data menu • Name the query and new dataset • Select the current variables (drag and drop to select data) • Click Computed Columns • Click New, then click Build Expression • Fill in the expression and click OK • Select the new variable and give it a good name • Select the new variable (drag and drop to select data)
Calculate Stuff • Calculate the discounted price and then get some descriptive statistics on the new values. • Either reopen the previous filter and add in the formula there or just make a new data set by filtering the previously created data set.
Click on the data set to analyze or choose it from the list Proc Means Proc Univariate
Procs or Menu Items Use the task list (right side of the screen), organized by task name, to look up the procedures that go with a menu item or if you are told to use a procedure, you can find the corresponding menu item like this.
Not enough data for a useful histogram Be glad you did not need to memorize this stuff.
Looking at Categorical Data Drag Tour from the left pane and drop it into the Analysis variables group. In this source file we have a categorical “tour” variable. What are the its values? Use the Describe > One-Way Frequencies menu option to see the categories.
Proc Freak The procedure that does frequency counts is proc freq (pronounced freak). It is very important to learn because it does the core categorical analysis for basic epidemiological studies. The EG code is: This could be simplified PROCFREQDATA=day2.source; TABLES Tour; RUN;
The Levels You have already seen how to subset a dataset using the GUI and SQL. What if you want to subset into 3 different data sets? You could do a lot of pointing and clicking or write a little program.
Splitting in a Data Step All data steps begin with the datastatement. Most have a set statement saying where the data is coming from and they should end with a run statement. * A list of what data sets to make; data fj12 ps27 sh43; * based on what file? ; set day2.source; * Check the value of tour and if TRUE output; if tour = "FJ12"thenoutput fj12; if tour = "PS27"thenoutput ps27; if tour = "SH43"thenoutput sh43; return; * This line is optional; run;
What is a statement? • A statement is a single instruction beginning with a keyword and ending in a semicolon. • You can use white space and new lines to make them easier to read. • Look back at the proc sql statements you have seen and notice where the semicolons are. • SQL statements are LONG.
How does a Data Step work? • The data statement says make this (or these) data set(s). • SAS then reads every line down to the run statement and gathers a list of all variables used. • This list is called the program data vector (PDV). • It then sets all the variables to missing. • It then does the instruction listed on each line of the data step program in the order that the lines are written.
How SAS Processes a Dataset • When you create a SAS data set, SAS does the following things: • SAS reads every line down to the run statement and gathers a list of all variables used. • This list is called the program data vector (PDV). • It sets the values in the PDV to missing. • Then it does all the instructions you tell it to do, in the order you have written them. • Then it writes all the variables out to the new dataset. • It then repeats the process if there is more data.
How SAS Processes a Dataset(2) In the example below, SAS will look in the existing dataset called Teletubbies and it will find two variables, teletubby and thing. Then it will find the variable called kid. Then it will do the instructions in order. data Teletubbies2; *name of a new data set; set Teletubbies; *load 1 observation of data; kid = "Andrew"; * fill in the blank; output; *write the variables to teletubbies2; return; *return to the top of the step; run; *end of these instructions;
The Set Statement set Teletubbies; • This line tells SAS to load one row of data from the data set Teletubbies into the PDV. The first time this line is run, the first row of data is loaded into the PDV. • When there is no more data to load, the data step is done.
Assignment goes this way original value new value Variable Assignment • In the example the word Andrew is assigned to the variable kid. All variables are assigned from the right side into the variable named on the left. kid = "Andrew"; • If a variable appears on the left and right side of an equal sign, the original value on the right is changed and then written to the left. • aNumber = aNumber + 4;
How SAS Processes a Dataset(3) • If you do not include the output and return statements, SAS will do them automatically. So, the previous data step would typically be written like this. data Teletubbies2; set Teletubbies; kid = "Andrew"; run;
Test Your Understanding(2) data test3a test3b; set source; if isMale = 1thenoutput test3a; hasCancer = 1; output test3b; run;
Adding Variables with Code • Creating a new variable is simple. All you need to do is give the bit of data a name and give it a value. The variable being assigned information is always on the left side of the equal sign. Actually it is too easy because it lets you miss bugs. data day2.paid; set day2.source; didpay = ‘nope’; run;
What is a bug anyway? • When you write a program and it doesn’t work the way that you intended, it is described as having a bug. • There are many types of bugs. Syntax and semantic errors are relatively easy to find and fix. When these errors happen, SAS can not figure out what you want done. Conceptual errors happen when SAS understands the words you give it but it does not do what you intended. These can be very, very hard to find and fix. • Spotting syntax bugs is easy. You just need to look in the SAS log.
What is a bug anyway? (2) • You will look in the log window to find out if SAS found any syntax errors. * oops forgot the "then";
Uninitialized Bug data day2.paid; set day2.source; didpay = nope; run; If you are trying to assign a string of letters to a character variable but you forget to quote the string, SAS thinks it is a variable but that variable never gets a value.
Uninitialized Bug (2) If empty variables (usually with easy typos or spelling mistakes) show up in your datasets, you probably made this mistake.
Parts of a SAS Dataset • You have seen how to browse a SAS dataset like a spreadsheet. There are two parts of a dataset which you do not see when you browse the data. • There is a section that acts like a dictionary which has a description of the data set, including among other things, the types of variables (character or numeric) and when the data set was created. • There is sometimes a section that has “index” information. You can create an index to help speed up processing of huge files.
By Position Knowing the variables’ order can help you do complex things.
If want to code… • You can see the dictionary of attributes by typing a proc contents step in a code window: proccontentsdata=teletubbies; run; • To get the variables in their stored order, use: proccontentsdata=teletubbies position; run;
Running it All If you return to this project later and you want to rerun the code, keep in mind you can right click on the left-most node and do Run Branch.