08-26-2016 10:59 AM
I just started last week using sas programming language. For those who are well acquaintanced with sas: How much time would it take from me to become an advanced user? I have been stuck all this week long to code a program where the output is an row summary of statistical charactéristics of sashelp.class. I have all my statistics , now what's next in your opinion? where to look?
Thanks for your help
08-26-2016 12:43 PM
Easy to learn compared to what?
If SAS is your first programming language then there are hurdles just learning to think properly about what you want and understanding what you have. One element that recurs for new users is there is a large volume of tools and takes awhile to get used to them. For instance you say "I have been stuck all this week long to code a program where the output is an row summary of statistical charactéristics of sashelp.class".
If you describe what your desired outcome is then you can get different approaches from users here.
Have you investigated Proc Univariate, Proc Freq, Proc Report or Proc Tabulate? Many newcomers attempt to use the datastep when SAS provides procedures to do many tasks. Often there are many ways to get the same thing done. Some choices may be made because of experience about what I am going to do next and one flows better.
You should define what you think an "advanced user" might be. I've been using SAS off and on for nearly 30 years and I know there big topics that I no little about and others that I think I'm fairly proficient with.
08-29-2016 03:23 AM
Thank you so much for your collaboration.
SAS is indeed not my first programming expercience, I am a good C++ programmer, I use Python and R for the statistical analysis most of the time. I am also a Mathematician and Statistician. The hurdle that I believe I have is that I don't understand yet the tools -as you mentioned - That allows me to make the most of this programming language. With C++ for example as I know all the tricks and I build everything from scratch, it is easy.
It is true I tended to build everything as I still have no clue how to do it as a SAS programmer
08-28-2016 12:27 PM
When we make recommendations to students, before jumping straight into statistical usage, we recommend taking the free Programming 1 class because it explains fundamental concepts like: how to I point to my data; how do I read ASCII files like comma-separated files into a SAS dataset form; how do I read proprietary files, like database and/or Excel files into a SAS dataset form; how do I list all the rows in my dataset; how do I use SAS procedures, in general (because all SAS procedures follow a basic model); how do I write a basic SAS program; how do I use IF statements; how do I create new variables; and how do I use formats, labels, titles and other "cosmetics" to alter the display of my data. All of that (and more) is in Programming 1, including the use of PROC FREQ, PROC MEANS and PROC UNIVARIATE.
Next, after Programming 1, I would recommend the free Statistics 1 class, which covers more about PROC FREQ (chi-square), ANOVA, Regression and Logistic Regression. But, Programming 1 is the recommended level of SAS skill before you tackle Statistics 1.
Do you really need Programming 1? Of course not. If you always have perfect data that never needs to change and your data is always in perfect SAS dataset structure in exactly the form (long or wide) that you need for your analysis and you NEVER need to calculate new variables or "fix" dates or names. Then you don't need Programming 1. Sadly, I've never had data like that, but you might not need Programming 1 if all you need is a LIBNAME statement to point to your data.
Most SAS procedures follow this basic form of usage:
proc whatever data=libref.datasetname;
. . . action statements differ with each procedure . . . ;
quit; /* some procedures end with a quit; */
Here are some simple examples of creating output datasets using SASHELP.CLASS with FREQ, MEANS and UNIVARIATE. Each procedure is invoked. Before the Procedure step, there is an ODS OUTPUT step that makes a SAS dataset. I like the ODS OUTPUT method instead of the internal procedure OUT= method because the ODS OUTPUT statement is consisent across all procedures. Then, each Procedure step is followed by a PROC PRINT that shows the structure of the output dataset created by the ODS OUTPUT statement.
You should be able to run this code because SASHELP.CLASS is included with every installation of SAS. Of course, if you need to point to your own data, then you will need to understand the LIBNAME statement (covered in Programming 1) and if you need to fix anything in your data or read your data into SAS form, then you'll need to understand the DATA step basics (also covered in Programming 1) and if you need to every get a simple list of your data then you'll need to understand PROC PRINT (also covered in Programming 1).
To get to "advanced user" depends on your definition of "advanced" and in what area of SAS. For an "advanced SAS programmer" without regard to statistical programming, we recommend these 5 classes:
SAS Macro Language 1
SAS SQL 1
And, to this list, I would add that, in my opinion, a really advanced SAS programmer has some knowledge of PROC TABULATE and PROC REPORT and might not completely understand graphics, but can manage to produce a decent looking graph if necessary. In other words, a really advanced SAS programmer/user might not know everything, but knows how to look in the documentation or in papers for examples and has done enough SAS programming that they can figure out how to approach a program for something they don't immediately know.
To be considered proficient at the statistical level, that would involve at least:
Predictive Modeling using Logistic Regression
and then many of the other classes on these learning paths:
Statistical Analysis: http://support.sas.com/training/us/paths/stat.html
Data Mining: http://support.sas.com/training/us/paths/dm.html
Forecasting and Econometrics: http://support.sas.com/training/us/paths/for.html
Just click on any course title from any of those pages to drill down to the web site for the course so you can see the detailed course outline and read the recommended prerequisites for each course.
And, then, there's proficiency in other tools and components and interfaces like Enterprise Guide, Enterprise Miner, Forecast Studio; and possibly a level of comfort with SAS solutions like the BI Platform, the Add-in for Microsoft Office and Visual Analytics.
It is nearly impossible to quantify the amount of time it would take to become "advanced". However, the punch line to the old Carnegie Hall joke https://www.youtube.com/watch?v=189Zm69kt10 tells you HOW to do it (practice) just not how long you have to practice to get to advanced.
But you're off to a good start in trying to figure things out on your own. Taking some of the free training might give you a more organized way to direct your practice.
If you look at the web sites for these 2 classes, you will see that the price of the e-learning class is "Free" and all you have to do is click the "Start" button to activate the training.
Programming 1: https://support.sas.com/edu/schedules.html?id=2588&ctry=US
Statistics 1: https://support.sas.com/edu/schedules.html?id=2816&ctry=US
Hope this helps,
ods output onewayfreqs=work.frqout; proc freq data=sashelp.class nlevels; title '1a PROC FREQ Report'; tables age sex ; run; proc print data=work.frqout; title '1b Dataset from PROC FREQ -- each variable has a TABLE value'; run; ods output means.summary=work.mnout; proc means data=sashelp.class n min mean max median css std maxdec=2; title '2a PROC MEANS'; class age; var height weight; run; proc print data=work.mnout; title '2b Dataset from PROC MEANS'; run; ods output Moments=work.U_moment BasicMeasures=work.u_basicmeas TestsForLocation=work.u_tfl Quantiles=work.u_quant ExtremeObs=work.u_extrobs; proc univariate data=sashelp.class; title '3a PROC UNIVARIATE REPORT'; class age; var height weight; run; proc print data=work.U_moment; title '3b Moments data from Proc Univariate'; run; proc print data=work.u_basicmeas; title '3b BasicMeasures data from Proc Univariate'; run; proc print data=work.u_tfl; title '3b TestsforLocation data from Proc Univariate'; run; proc print data=work.u_quant; title '3b Quantiles data from Proc Univariate'; run; proc print data=work.u_extrobs; title '3b ExtremeObs data from Proc Univariate'; run;