Arthur L. Carpenter, California Occidental Consultants
|
|
|
- Rosalyn Matthews
- 9 years ago
- Views:
Transcription
1 Paper 4-25 Arthur L. Carpenter, California Occidental Consultants ABSTRACT Many macro functions are very analogous to those of the DATA step. The differences are in how they are used and applied. While DATA step functions are applied to values on the Program Data Vector, PDV, macro functions are used to create, modify, and work with text strings. Initially this may seem like a minor difference, but because macro functions deal with text, they can be used to build SAS code. This becomes the powerful advantage of the macro language. The use of various macro functions will be presented. Some of these functions return quoted results, and macro quoting functions will be introduced. Examples will include functions like %SYSEVALF and %SYSFUNC, which are new to V6.11 and V6.12, as well as, various Autocall macros. Several of the examples are adapted from Carpenter s Complete Guide to the SAS Macro Language. KEYWORDS MACRO, MACRO FUNCTIONS, %SYSFUNC, MACRO QUOTING, SCL MACRO CHARACTER FUNCTIONS Macro character functions either change or provide information about the text string that is included as one of the arguments. Many of these functions are analogous to similar functions in the DATA step. Some of the macro character functions that have analogous DATA step functions include: Macro Analogous Task Function(s) DATA Step Function %INDEX index First occurrence of a text string is located %LENGTH length Character count %SCAN scan th Search for the n %QSCAN word in a text string %SUBSTR substr Select text based on %QSUBSTR position %UPCASE upcase Convert to upper case It is important that you remember the differences between these macro functions and their DATA step equivalents. DATA step functions work on character strings, numeric values, and DATA step variable values. Macro functions are applied to text strings that NEVER contain the values of DATA step variables. Several of these functions have two forms, with and without a Q at the start of the function name. Functions with names that start with Q (quoting) remove the meaning from special characters including the ampersand (&), percent sign (%), and mnemonic operators in returned values. %INDEX The %INDEX function searches the first argument (ARGUMENT1) for the first occurrence of the text string which is contained in the second argument (ARGUMENT2). If the target string is found, the position of its first character is returned as the function s response (0 if not found). %INDEX(argument1,argument2) This example stores three words in the macro variable &X. The %INDEX function is then used to search in &X for the string TALL and the result is then displayed using the %PUT statement. %LET X=LONG TALL SALLY; %LET Y=%INDEX(&X,TALL); %PUT TALL CAN BE FOUND AT POSITION &Y; Notice that the TALL as the second argument is not in quotes. The %PUT results in the following text being written to the LOG: TALL CAN BE FOUND AT POSITION 6 %LENGTH The %LENGTH function determines the length (number of characters) of it s argument. The number of detected characters is then returned. When the argument is a null string the value of 0 is returned. %LENGTH(argument) In the macro %LOOK the name of the incoming data set is checked to see if it exceeds 8 characters.
2 %MACRO LOOK(dsn,obs); %if %length(&dsn) gt 8 %then %put Name is too long - &dsn; %else %do; PROC CONTENTS DATA=&dsn; TITLE "DATA SET &dsn"; RUN; PROC PRINT DATA=&dsn (OBS=&obs); TITLE2 "FIRST &obs OBSERVATIONS"; RUN; %end; %MEND LOOK; The LOG shows that the following data set name exceeds 8 characters: 53 %look(demographics, 5) Name is too long - demographics %SCAN and %QSCAN The %SCAN and %QSCAN functions both search a text th string (ARGUMENT1) for the n word (ARGUMENT2) and returns its value. If ARGUMENT3 is not otherwise specified the same word delimiters are used as in the DATA step SCAN function. For an ASCII system these include the following (for EBCDIC the is substituted for the ^): blank. < ( + &! $ * ) ; ^ - /, % > \ %QSCAN removes the significance of all special characters in the returned value. %SCAN(argument1,argument2[,delimiters]) %QSCAN(argument1,argument2[,delimiters]) The macro variable &X below can be broken up using the %SCAN function. %LET X=XYZ.ABC/XYY; %LET WORD=%SCAN(&X,3); %LET PART=%SCAN(&X,1,Z); %PUT WORD IS &WORD AND PART IS &PART; The %PUT returns the following: WORD IS XYY AND PART IS XY Notice that the word delimiter (third argument) is not enclosed in quotes as it would be in the DATA step SCAN function. The %QSCAN function is needed when you want to return a value that contains an ampersand or percent sign. This is demonstrated below: %let dsn = clinics; %let string = %nrstr(*&stuff*&dsn*&morestuf); %let wscan = %scan(&string,2,*); %let wqscan = %qscan(&string,2,*); %put &wscan &wqscan; The %PUT writes: clinics &dsn Both functions return the value &DSN, but since the meaning of the & is not masked by %SCAN, the &DSN in &WSCAN is resolved to clinics. %SUBSTR and %QSUBSTR Like the DATA step SUBSTR function these macro functions return a portion of the string in the first ARGUMENT. The substring starts at the POSITION in the second argument and optionally has a LENGTH of the third argument. %SUBSTR(argument,position[,length]) %QSUBSTR(argument,position[,length]) As is the case with most other macro functions, each of the three arguments can be a text string, macro variable, expression, or a macro call. If a value for LENGTH is not specified, a string containing the characters from POSITION to the end of the argument is produced. %LET CLINIC=BETHESDA; %IF %SUBSTR(&CLINIC,5,4) = ESDA %THEN %PUT *** MATCH ***; %ELSE %PUT *** NOMATCH ***; The LOG would contain *** MATCH *** since &CLINIC has the value ESDA in characters 5 through 8. As is shown in the following example, the %QSUBSTR function allows you to return unresolved references to macros and macro variables. %let dsn = clinics; %let string = %nrstr(*&stuff*&dsn*&morestuf); %let sub = %substr(&string,9,5); %let qsub = %qsubstr(&string,9,5); %put &sub &qsub; The %PUT will write clinics* &dsn* in the LOG. %UPCASE The %UPCASE macro function converts all characters in the ARGUMENT to upper case. This function is especially useful when comparing text strings that may have inconsistent case. %UPCASE(argument) The following code allows the user to differentially include a KEEP= option in the PROC PRINT statement.
3 The %UPCASE function is used to control for variations in the text that is supplied by the user in the macro call. %macro printit(dsn); * use a KEEP for CLINICS; %if %upcase(&dsn)=clinics %then %let keep=(keep=lname fname ssn); %else %let keep=; proc print data=&dsn &keep; title "Listing of %upcase(&dsn)"; %mend printit; %printit(clinics) The macro call to %PRINTIT produces the following code. proc print data=clinics (keep=lname fname ssn); title "Listing of CLINICS"; MACRO EVALUATION FUNCTIONS Since in the macro language there are no numbers or numeric variables (there is only text and macro variables that contain text), numeric operations such as arithmetic and logical comparisons become problematic. Evaluation functions are used to bridge the gap between text and numeric operations. Prior to Release 6.12 only the %EVAL function was available. Because this function has some limitations, the %SYSEVALF function was added to the SAS System starting with Release The evaluation functions are used: + to evaluate arithmetic and logical expressions + inside and outside of macros + during logical comparisons to specify TRUE or FALSE - a value of 1 is returned for logical expressions if the condition is true, 0 (zero) if it is false + perform integer and floating point arithmetic The requests for these functions are either explicit (called by the user by name) or implicit (used automatically without being directly called during comparison operations). %EVAL The %EVAL function always performs integer arithmetic. Regardless of the requested operation the result will always be an integer. %EVAL(argument) In the following example the %EVAL function is called to perform arithmetic operations. The code uses %EVAL to add the value of 1 to &X which in this case contains 5. %LET X=5; %LET Y=&X+1; %LET Z=%EVAL(&X+1); %PUT &X &Y &Z; The %PUT writes the following to the LOG: Non-integer arithmetic is not allowed. Use of the statement %LET Z=%EVAL(&X+1.8); would result in the following message being printed in the LOG: ERROR: A character operand was found in the %EVAL function or %IF condition where a numeric operand is required. The condition was: The 'integer only' requirement is taken quite literally. If the above argument had been &X+1.0 or even &X+1., the error message would still have been generated. In this case the decimal point is enough to prevent a numeric interpretation of the argument. %SYSEVALF The floating point evaluation function, %SYSEVALF, is new with Release 6.12 of the SAS System (although it was available but undocumented in Release 6.11). This function can be used to perform non-integer arithmetic and will even return a non-integer result from an arithmetic operation. %SYSEVALF(expression[,conversion-type]) The EXPRESSION is any arithmetic or logical expression which is to be evaluated and it may contain macro references. The second argument, CONVERSION-TYPE, is an optional conversion to apply to the value returned by %SYSEVALF. Since this function can return non-integer values, problems could occur in other macro statements that use this function but expect integers. When you need the result of this function to be an integer, use one of the CONVERSION-TYPEs. A specification of the CONVERSION-TYPE converts a value returned by %SYSEVALF to an integer or Boolean value so it can be used in other expressions that require a value of that type. CONVERSION-TYPE can be: + BOOLEAN 0 if the result of the expression is 0 or missing,
4 1 if the result is any other Because the semicolon following DSN terminates the value. %LET statement, the macro variable &P contains + CEIL round to next largest whole integer + FLOOR round to next smallest whole integer + INTEGER truncate decimal fraction PROC PRINT DATA=DSN which will almost certainly result in a syntax error due to the missing semicolon. The CEIL, FLOOR, and INTEGER conversion types act on the expression in the same way as the DATA step functions of the same (or similar) names i.e. CEIL, FLOOR, and INT. The following table shows a few calls to %SYSEVALF and the resulting values. Example Result (%put &x;) %let x=%sysevalf(7/3) %let x=%sysevalf(7/3,boolean) 1 %let x=%sysevalf(7/3,ceil) 3 %let x=%sysevalf(7/3,floor) 2 %let x=%sysevalf(1/3) %let x=%sysevalf(1+.). %let x=%sysevalf(1+.,boolean) 0 MACRO QUOTING FUNCTIONS Quoting functions allow the user to pass macro arguments while selectively removing the special meaning from characters such as &, %, ;,, and. Most of these functions are not commonly used and are even less commonly understood. Although they are powerful and can even be necessary, programming solutions are usually available that do not require the use of the quoting functions. All quoting functions are not alike. Consult the documentation to get the gory details, however the following three functions should solve most of your quoting problems. %STR The most commonly used macro quoting function is %STR ('most commonly used' does not necessarily make it the best, see %BQUOTE below). Often it is used along with the %LET statement to mask semicolons that would otherwise terminate the %LET. In the following example we want to create a macro variable &P that contains two SAS statements; %LET P=PROC PRINT DATA=DSN; RUN;; The %STR function masks the semicolon by quoting it. %LET P=%STR(PROC PRINT DATA=DSN; RUN;); This results in the macro variable &P being correctly assigned the two statements. PROC PRINT DATA=DSN; RUN; %BQUOTE The %BQUOTE function is probably the best choice as a overall quoting function. It eliminates many of the limitations of the %STR function (Carpenter, 1999), and it will also remove the meaning from unmatched symbols that are normally found in pairs such as quotes and parentheses. The following %LET will cause all sorts of problems because the apostrophe will be interpreted as an unmatched quote. %let a = Sue's new truck; The %STR function will not help because %STR does not mask quote marks, however %BQUOTE does. %let a = %bquote(sue's new truck); %put &a; %UNQUOTE Once a quoting function has been used, the text remains quoted. Since these "quotes" are hard to see, even in the LOG, this can cause problems for the programmer that does not anticipate that quoting functions may have been used. If you need to remove or change the effects of any of the other quoting functions, the %UNQUOTE is used. Three macro variables are defined below, but the second, &OTH, is defined using the %NRSTR function. This means that &CITY can not be resolved when &OTH is resolved. When the %UNQUOTE function is applied to &OTH its value (&CITY) is seen as a macro variable which is also resolved. %let city = miami; %let oth = %nrstr(&city); %let unq = %unquote(&oth); %put &city &oth &unq; The LOG shows: miami &city miami Although &OTH looks like any other macro variable in the %PUT statement, it will not be fully resolved because
5 it is quoted, thus preventing &CITY from being resolved. USING DATA STEP FUNCTIONS IN THE MACRO LANGUAGE Two macro tools were introduced with Release 6.12 that allow the user to execute virtually all of the functions and routines available in the DATA step as part of the macro language. The %SYSCALL macro statement calls DATA step routines and the %SYSFUNC macro function executes DATA step functions. Through the use of these two elements of the macro language, the need to use the single pass DATA _NULL_ step to create macro variables is virtually eliminated. More importantly these two macro functions greatly increase the list of functions available to the macro language by making available almost all DATA step and user-written functions. %SYSFUNC(function-name(functionarguments)[,format]) %QSYSFUNC(function-name(functionarguments)[,format]) The following example shows three ways to add the current date to a TITLE. The automatic macro variable &SYSDATE is easy to use but cannot be formatted. Prior to Release 6.12 most users created a DATA _NULL_ step with an assignment statement and a CALL SYMPUT to create a formatted macro variable. The DATA step can now be avoided by using the %SYSFUNC macro function. data _null_; today = put(date(),worddate18.); call symput('dtnull',today); title1 "Automatic Macro Variable SYSDATE &sysdate"; title2 "From a DATA _NULL_ &dtnull"; %sysfunc(date(),worddate18.)"; The following three titles are produced: Automatic Macro Variable SYSDATE 10APR00 From a DATA _NULL_ April 10, 2000 Using SYSFUNC April 10, 2000 The leading spaces before the date in the second two titles is caused by the date string being right justified. The LEFT and TRIM functions can be used to remove the space, however care must be exercised or a couple of problems can be encountered. The first is that function calls cannot be nested within a %SYSFUNC. Fortunately this is rather easily handled because %SYSFUNC requests can be nested. Secondly the resolved values of interior calls to %SYSFUNC are used as arguments to the outer calls. When the resolved value contains special characters (especially commas), they can be misinterpreted. The following revised TITLE3 will not work because the interior %SYSFUNC uses a formatted value which contains a comma. %sysfunc(left(%sysfunc(date(),worddate18.) ))"; After the inner %SYSFUNC is executed the result is: %sysfunc(left(april 10, 2000))"; Because of the comma, the LEFT function will see two arguments (it is expecting exactly one), and the message 'too many arguments' is generated. The %QSYSFUNC function can be used to mask special characters in the text string that is passed to the next function. Rewriting the TITLE statement using %QSYSFUNC as is shown below eliminates the problem with the comma. %sysfunc(left(%qsysfunc(date(),worddate18. )))"; TITLE3 from above becomes: Using SYSFUNC April 10, 2000 Starting with Release 6.12, functions originally included in the Screen Control Language (SCL) library, became available in the DATA step and so are also now available to %SYSFUNC. Starting with Nashville Release of the SAS System (Version 7), SAS/ACCESS utilizes the engine option in the LIBNAME statement to designate the type of data that is to be read or written. This allows the user to directly read non-sas data forms such as Excel and dbase. Other third party vendors have been using technique for some time. The following macro uses the PATHNAME function to retrieve the path associated with a LIBREF. This path is then used to build a new LIBREF with a different engine. %macro engchng(engine,dsn); * engine - output engine for this &dsn * dsn - name of data set to copy *; * Create a libref for the stated Engine; libname dbmsout clear; libname dbmsout &engine "%sysfunc(pathname(sasuser))"; * Copy the SAS data set using the * alternate engine;
6 proc datasets; copy in=sasuser out=dbmsout; select &dsn; %mend engchng; ****************; * convert to alt. engine; %engchng(v604,classwt) Notice that the LIBREF in the PATHNAME function call is not in quotes. Remember that arguments to macro functions are always text so the quotes are not necessary. As you use DATA step functions with %SYSFUNC, you should expect the behavior of many of the arguments of the DATA step functions to vary slightly in ways such as this. When the macro must not contain any non-macro statements, librefs can be defined by using the LIBNAME DATA step function. %let rc = %sysfunc(libname(classwt, %sysfunc(pathname(sasuser)), v604)); This single macro statement will create the libref CLASSWT with the V604 engine using the same path information as SASUSER. %SYSFUNC can also be used to check to see if a data set exists by using the EXIST function. The following %IF will execute the %RPT macro only when the data set identified by &DSN exists. %if %SYSFUNC(exist(&dsn)) %then %RPT(&dsn); The GAMMA function can be used to calculate factorials. In a macro a factorial can be calculated by calling the GAMMA function with %SYSFUNC. The following macro acts like a function and returns the factorial value of the argument, N. %macro fact(n); %sysfunc(gamma(%eval(&n+1))) %mend fact; %let fact5 = %fact(5); The macro variable &FACT5 will contain 120. AUTOCALL MACROS THAT MIMIC FUNCTIONS The AUTOCALL facility allows the user to call macros that have been defined outside of the execution of the current program. A number of these macros are provided with the base macro language and are described in the Macro Language Elements section of the SAS Macro Language: Reference, First Edition reference manual. Although these are, strictly speaking, macros, they act like functions. Commonly used Autocall macros include: %CMPRES %LEFT %LOWCASE %TRIM %VERIFY %LEFT This macro can be used to left justify a macro argument. In the earlier example for %QSYSFUNC the DATA step LEFT function was used, this title can be further simplified by using %LEFT. %left(%qsysfunc(date(),worddate18.))"; %VERIFY While %INDEX and its variations search for specific strings, %VERIFY determines the position of the first character that is NOT in a text string. The following example subsets a string starting at the first character that is not a number. %let code = 2000SUGI25; %let part = %substr(&code,%verify(&code, )); &PART will contain: SUGI25 %CMPRES The %CMPRES macro removes multiple blanks (as well as leading and trailing blanks) from a text string. This macro is similar to the COMPBL DATA step function. In the following example a numeric value is placed into a macro variable using the SYMPUT routine. In the conversion process a series of leading blanks are added to &FIVE. data _null_; x=5; call symput('five',x); %put *&five*; %let five = *%cmpres(&five)*; %put &five; The resulting LOG shows: %put *&five*; * 5* 140 %let five = *%cmpres(&five)*; 141 %put &five; *5*
7 SUMMARY Macro functions extend the capabilities and power of the DATA step to the macro language. Many of the DATA step functions have analogous macro functions, and other DATA step functions can now be directly accessed from within the macro language through the use of macro functions such as %SYSFUNC. Since recent changes to the base SAS System allow the use in the DATA step of functions that were originally a part of SCL, these functions are also now available in the macro language. Quoting functions and functions that return quoted results, are available and can be used to remove the special meaning of selected characters. The Autocall library that is supplied with the SAS System also contains a number of macros that act like functions. These macros further extend the range of the macro language by providing even more power and functionality. ABOUT THE AUTHOR Art Carpenter s publications list includes three books (Annotate: Simply the Basics, Quick Results with SAS/GRAPH Software, and Carpenter's Complete Guide to the SAS Macro Language), two chapters in Reporting from the Field, and over three dozen papers and posters presented at SUGI, PharmaSUG, and WUSS. Art has been using SAS since 1976 and has served in a variety of positions in user groups at the local, regional, and national level. REFERENCES Burlew, Michele M., SAS Macro Programming Made Easy, Cary, NC: SAS Institute, Inc., 1998, 280 pp. Carpenter, Arthur L., Carpenter's Complete Guide to the SAS Macro Language, Cary, NC: SAS Institute Inc., 1998, 242 pp. Carpenter, Arthur L., "Macro Quoting Functions, Other Special Character Masking Tools, and How to Use Them", Proceedings of the Twenty-Fourth Annual SUGI Conference, 1999, pp SAS Institute Inc., SAS Macro Language: Reference, First Edition, Cary, NC: SAS Institute Inc., 1997, 304 pp. TRADEMARK INFORMATION SAS, SAS/ACCESS, SAS Certified Professional, and SAS Quality Partner are registered trademarks of SAS Institute, Inc. in the USA and other countries.. indicates USA registration DBMS/Engines is a registered trademark of Conceptual Software, Inc. in the USA and other countries. indicates USA registration Excel is a registered trademark of Microsoft Corporation in the USA and other countries. indicates USA registration TM Art is a SAS Quality Partner and SAS TM Certified Professional. Through California Occidental Consultants he teaches SAS courses and provides contract SAS programming support nationwide. AUTHOR CONTACT Arthur L. Carpenter California Occidental Consultants P.O. Box 6199 Oceanside, CA (760) [email protected]
Nine Steps to Get Started using SAS Macros
Paper 56-28 Nine Steps to Get Started using SAS Macros Jane Stroupe, SAS Institute, Chicago, IL ABSTRACT Have you ever heard your coworkers rave about macros? If so, you've probably wondered what all the
Storing and Using a List of Values in a Macro Variable
Storing and Using a List of Values in a Macro Variable Arthur L. Carpenter California Occidental Consultants, Oceanside, California ABSTRACT When using the macro language it is not at all unusual to need
Macro Quoting. Overview of Macro Quoting CHAPTER 7
71 CHAPTER 7 Macro Quoting Overview of Macro Quoting 71 Understanding Why Macro Quoting is Necessary 72 Understanding Macro Quoting Functions 72 Passing Parameters That Contain Special Characters and Mnemonics
Five Ways to Create Macro Variables: A Short Introduction to the Macro Language
Paper HW03_05 Five Ways to Create Macro Variables: A Short Introduction to the Macro Language Arthur L. Carpenter California Occidental Consultants, Oceanside, California ABSTRACT The macro language is
AN INTRODUCTION TO MACRO VARIABLES AND MACRO PROGRAMS Mike S. Zdeb, New York State Department of Health
AN INTRODUCTION TO MACRO VARIABLES AND MACRO PROGRAMS Mike S. Zdeb, New York State Department of Health INTRODUCTION There are a number of SAS tools that you may never have to use. Why? The main reason
Writing cleaner and more powerful SAS code using macros. Patrick Breheny
Writing cleaner and more powerful SAS code using macros Patrick Breheny Why Use Macros? Macros automatically generate SAS code Macros allow you to make more dynamic, complex, and generalizable SAS programs
Table Lookups: From IF-THEN to Key-Indexing
Paper 158-26 Table Lookups: From IF-THEN to Key-Indexing Arthur L. Carpenter, California Occidental Consultants ABSTRACT One of the more commonly needed operations within SAS programming is to determine
More Tales from the Help Desk: Solutions for Simple SAS Mistakes Bruce Gilsen, Federal Reserve Board
More Tales from the Help Desk: Solutions for Simple SAS Mistakes Bruce Gilsen, Federal Reserve Board INTRODUCTION In 20 years as a SAS consultant at the Federal Reserve Board, I have seen SAS users make
Getting the IN operator to FUNCTION inside a SAS Macro
ABSTRACT Getting the IN operator to FUNCTION inside a SAS Macro Perry Watts, Independent Consultant, Elkins Park, PA Large SAS macros with many parameters require that user values be checked at run time.
KEYWORDS ARRAY statement, DO loop, temporary arrays, MERGE statement, Hash Objects, Big Data, Brute force Techniques, PROC PHREG
Paper BB-07-2014 Using Arrays to Quickly Perform Fuzzy Merge Look-ups: Case Studies in Efficiency Arthur L. Carpenter California Occidental Consultants, Anchorage, AK ABSTRACT Merging two data sets when
Secrets of Macro Quoting Functions How and Why. Susan O Connor, SAS Institute Inc., Cary, NC
Secrets of Macro Quoting Functions How and Why Susan O Connor, SAS Institute Inc., Cary, NC ABSTRACT How, why, when and where to use macro quoting functions are tricky questions for all users. Macro quoting
Bachelors of Computer Application Programming Principle & Algorithm (BCA-S102T)
Unit- I Introduction to c Language: C is a general-purpose computer programming language developed between 1969 and 1973 by Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating
B) Mean Function: This function returns the arithmetic mean (average) and ignores the missing value. E.G: Var=MEAN (var1, var2, var3 varn);
SAS-INTERVIEW QUESTIONS 1. What SAS statements would you code to read an external raw data file to a DATA step? Ans: Infile and Input statements are used to read external raw data file to a Data Step.
Name: Class: Date: 9. The compiler ignores all comments they are there strictly for the convenience of anyone reading the program.
Name: Class: Date: Exam #1 - Prep True/False Indicate whether the statement is true or false. 1. Programming is the process of writing a computer program in a language that the computer can respond to
PharmaSUG AD08. Maximize the power of %SCAN using WORDSCAN utility Priya Saradha, Edison, NJ
PharmaSUG AD08 Maximize the power of %SCAN using WORDSCAN utility Priya Saradha, Edison, NJ This paper demonstrates the power of %SCAN macro function using the user-defined utility, WORDSCAN, and illustrates
You have got SASMAIL!
You have got SASMAIL! Rajbir Chadha, Cognizant Technology Solutions, Wilmington, DE ABSTRACT As SAS software programs become complex, processing times increase. Sitting in front of the computer, waiting
SAS Macro Autocall and %Include
Paper CC-019 SAS Macro Autocall and %Include Jie Huang, Merck & Co., Inc. Tracy Lin, Merck & Co., Inc. ABSTRACT SAS provides several methods to invoke external SAS macros in a SAS program. There are two
How to Reduce the Disk Space Required by a SAS Data Set
How to Reduce the Disk Space Required by a SAS Data Set Selvaratnam Sridharma, U.S. Census Bureau, Washington, DC ABSTRACT SAS datasets can be large and disk space can often be at a premium. In this paper,
Macros from Beginning to Mend A Simple and Practical Approach to the SAS Macro Facility
Macros from Beginning to Mend A Simple and Practical Approach to the SAS Macro Facility Michael G. Sadof, MGS Associates, Inc., Bethesda, MD. ABSTRACT The macro facility is an important feature of the
The Power of CALL SYMPUT DATA Step Interface by Examples Yunchao (Susan) Tian, Social & Scientific Systems, Inc., Silver Spring, MD
Paper 052-29 The Power of CALL SYMPUT DATA Step Interface by Examples Yunchao (Susan) Tian, Social & Scientific Systems, Inc., Silver Spring, MD ABSTRACT AND INTRODUCTION CALL SYMPUT is a SAS language
MATLAB Programming. Problem 1: Sequential
Division of Engineering Fundamentals, Copyright 1999 by J.C. Malzahn Kampe 1 / 21 MATLAB Programming When we use the phrase computer solution, it should be understood that a computer will only follow directions;
An Introduction to SAS/SHARE, By Example
Paper 020-29 An Introduction to SAS/SHARE, By Example Larry Altmayer, U.S. Census Bureau, Washington, DC ABSTRACT SAS/SHARE software is a useful tool for allowing several users to simultaneously access
OBJECT_EXIST: A Macro to Check if a Specified Object Exists Jim Johnson, Independent Consultant, North Wales, PA
PharmaSUG2010 - Paper TU01 OBJECT_EXIST: A Macro to Check if a Specified Object Exists Jim Johnson, Independent Consultant, North Wales, PA ABSTRACT This paper describes a macro designed to quickly tell
5. Crea+ng SAS Datasets from external files. GIORGIO RUSSOLILLO - Cours de prépara+on à la cer+fica+on SAS «Base Programming»
5. Crea+ng SAS Datasets from external files 107 Crea+ng a SAS dataset from a raw data file 108 LIBNAME statement In most of cases, you may want to assign a libref to a certain folder (a SAS library) LIBNAME
Using Macros to Automate SAS Processing Kari Richardson, SAS Institute, Cary, NC Eric Rossland, SAS Institute, Dallas, TX
Paper 126-29 Using Macros to Automate SAS Processing Kari Richardson, SAS Institute, Cary, NC Eric Rossland, SAS Institute, Dallas, TX ABSTRACT This hands-on workshop shows how to use the SAS Macro Facility
9.1 SAS. SQL Query Window. User s Guide
SAS 9.1 SQL Query Window User s Guide The correct bibliographic citation for this manual is as follows: SAS Institute Inc. 2004. SAS 9.1 SQL Query Window User s Guide. Cary, NC: SAS Institute Inc. SAS
PharmaSUG 2015 - Paper QT26
PharmaSUG 2015 - Paper QT26 Keyboard Macros - The most magical tool you may have never heard of - You will never program the same again (It's that amazing!) Steven Black, Agility-Clinical Inc., Carlsbad,
Paper 2917. Creating Variables: Traps and Pitfalls Olena Galligan, Clinops LLC, San Francisco, CA
Paper 2917 Creating Variables: Traps and Pitfalls Olena Galligan, Clinops LLC, San Francisco, CA ABSTRACT Creation of variables is one of the most common SAS programming tasks. However, sometimes it produces
Paper 70-27 An Introduction to SAS PROC SQL Timothy J Harrington, Venturi Partners Consulting, Waukegan, Illinois
Paper 70-27 An Introduction to SAS PROC SQL Timothy J Harrington, Venturi Partners Consulting, Waukegan, Illinois Abstract This paper introduces SAS users with at least a basic understanding of SAS data
Reading Delimited Text Files into SAS 9 TS-673
Reading Delimited Text Files into SAS 9 TS-673 Reading Delimited Text Files into SAS 9 i Reading Delimited Text Files into SAS 9 Table of Contents Introduction... 1 Options Available for Reading Delimited
The SAS Data step/macro Interface
Paper TS09 The SAS Data step/macro Interface Lawrence Heaton-Wright, Quintiles, Bracknell, Berkshire, UK ABSTRACT The SAS macro facility is an extremely useful part of the SAS System. However, macro variables
The SET Statement and Beyond: Uses and Abuses of the SET Statement. S. David Riba, JADE Tech, Inc., Clearwater, FL
The SET Statement and Beyond: Uses and Abuses of the SET Statement S. David Riba, JADE Tech, Inc., Clearwater, FL ABSTRACT The SET statement is one of the most frequently used statements in the SAS System.
SAS Macro Programming for Beginners
Paper 243-29 SAS Macro Programming for Beginners Susan J. Slaughter, Avocet Solutions, Davis, CA Lora D. Delwiche, Delwiche Consulting, Winters, CA ABSTRACT Macro programming is generally considered an
Chapter 2: Elements of Java
Chapter 2: Elements of Java Basic components of a Java program Primitive data types Arithmetic expressions Type casting. The String type (introduction) Basic I/O statements Importing packages. 1 Introduction
Managing Tables in Microsoft SQL Server using SAS
Managing Tables in Microsoft SQL Server using SAS Jason Chen, Kaiser Permanente, San Diego, CA Jon Javines, Kaiser Permanente, San Diego, CA Alan L Schepps, M.S., Kaiser Permanente, San Diego, CA Yuexin
Symbol Tables. Introduction
Symbol Tables Introduction A compiler needs to collect and use information about the names appearing in the source program. This information is entered into a data structure called a symbol table. The
Imelda C. Go, South Carolina Department of Education, Columbia, SC
PO 003 Matching SAS Data Sets with PROC SQL: If at First You Don t Succeed, Match, Match Again ABSTRACT Imelda C. Go, South Carolina Department of Education, Columbia, SC Two data sets are often matched
Big Data and Analytics by Seema Acharya and Subhashini Chellappan Copyright 2015, WILEY INDIA PVT. LTD. Introduction to Pig
Introduction to Pig Agenda What is Pig? Key Features of Pig The Anatomy of Pig Pig on Hadoop Pig Philosophy Pig Latin Overview Pig Latin Statements Pig Latin: Identifiers Pig Latin: Comments Data Types
Microsoft Access 3: Understanding and Creating Queries
Microsoft Access 3: Understanding and Creating Queries In Access Level 2, we learned how to perform basic data retrievals by using Search & Replace functions and Sort & Filter functions. For more complex
CHAPTER 1 Overview of SAS/ACCESS Interface to Relational Databases
3 CHAPTER 1 Overview of SAS/ACCESS Interface to Relational Databases About This Document 3 Methods for Accessing Relational Database Data 4 Selecting a SAS/ACCESS Method 4 Methods for Accessing DBMS Tables
Innovative Techniques and Tools to Detect Data Quality Problems
Paper DM05 Innovative Techniques and Tools to Detect Data Quality Problems Hong Qi and Allan Glaser Merck & Co., Inc., Upper Gwynnedd, PA ABSTRACT High quality data are essential for accurate and meaningful
THE POWER OF PROC FORMAT
THE POWER OF PROC FORMAT Jonas V. Bilenas, Chase Manhattan Bank, New York, NY ABSTRACT The FORMAT procedure in SAS is a very powerful and productive tool. Yet many beginning programmers rarely make use
Moving from CS 61A Scheme to CS 61B Java
Moving from CS 61A Scheme to CS 61B Java Introduction Java is an object-oriented language. This document describes some of the differences between object-oriented programming in Scheme (which we hope you
Let the CAT Out of the Bag: String Concatenation in SAS 9 Joshua Horstman, Nested Loop Consulting, Indianapolis, IN
Paper S1-08-2013 Let the CAT Out of the Bag: String Concatenation in SAS 9 Joshua Horstman, Nested Loop Consulting, Indianapolis, IN ABSTRACT Are you still using TRIM, LEFT, and vertical bar operators
That Mysterious Colon (:) Haiping Luo, Dept. of Veterans Affairs, Washington, DC
Paper 73-26 That Mysterious Colon (:) Haiping Luo, Dept. of Veterans Affairs, Washington, DC ABSTRACT The colon (:) plays certain roles in SAS coding. Its usage, however, is not well documented nor is
New Tricks for an Old Tool: Using Custom Formats for Data Validation and Program Efficiency
New Tricks for an Old Tool: Using Custom Formats for Data Validation and Program Efficiency S. David Riba, JADE Tech, Inc., Clearwater, FL ABSTRACT PROC FORMAT is one of the old standards among SAS Procedures,
PharmaSUG 2014 Paper CC23. Need to Review or Deliver Outputs on a Rolling Basis? Just Apply the Filter! Tom Santopoli, Accenture, Berwyn, PA
PharmaSUG 2014 Paper CC23 Need to Review or Deliver Outputs on a Rolling Basis? Just Apply the Filter! Tom Santopoli, Accenture, Berwyn, PA ABSTRACT Wouldn t it be nice if all of the outputs in a deliverable
SAS Comments How Straightforward Are They? Jacksen Lou, Merck & Co.,, Blue Bell, PA 19422
SAS Comments How Straightforward Are They? Jacksen Lou, Merck & Co.,, Blue Bell, PA 19422 ABSTRACT SAS comment statements typically use conventional symbols, *, %*, /* */. Most programmers regard SAS commenting
Post Processing Macro in Clinical Data Reporting Niraj J. Pandya
Post Processing Macro in Clinical Data Reporting Niraj J. Pandya ABSTRACT Post Processing is the last step of generating listings and analysis reports of clinical data reporting in pharmaceutical industry
Programming Idioms Using the SET Statement
Programming Idioms Using the SET Statement Jack E. Fuller, Trilogy Consulting Corporation, Kalamazoo, MI ABSTRACT While virtually every programmer of base SAS uses the SET statement, surprisingly few programmers
A Technique for Storing and Manipulating Incomplete Dates in a Single SAS Date Value
A Technique for Storing and Manipulating Incomplete Dates in a Single SAS Date Value John Ingersoll Introduction: This paper presents a technique for storing incomplete date values in a single variable
Essential Project Management Reports in Clinical Development Nalin Tikoo, BioMarin Pharmaceutical Inc., Novato, CA
Essential Project Management Reports in Clinical Development Nalin Tikoo, BioMarin Pharmaceutical Inc., Novato, CA ABSTRACT Throughout the course of a clinical trial the Statistical Programming group is
VB.NET Programming Fundamentals
Chapter 3 Objectives Programming Fundamentals In this chapter, you will: Learn about the programming language Write a module definition Use variables and data types Compute with Write decision-making statements
Writing Control Structures
Writing Control Structures Copyright 2006, Oracle. All rights reserved. Oracle Database 10g: PL/SQL Fundamentals 5-1 Objectives After completing this lesson, you should be able to do the following: Identify
Informatica e Sistemi in Tempo Reale
Informatica e Sistemi in Tempo Reale Introduction to C programming Giuseppe Lipari http://retis.sssup.it/~lipari Scuola Superiore Sant Anna Pisa October 25, 2010 G. Lipari (Scuola Superiore Sant Anna)
Technical Paper. Reading Delimited Text Files into SAS 9
Technical Paper Reading Delimited Text Files into SAS 9 Release Information Content Version: 1.1July 2015 (This paper replaces TS-673 released in 2009.) Trademarks and Patents SAS Institute Inc., SAS Campus
AN INTRODUCTION TO THE SQL PROCEDURE Chris Yindra, C. Y. Associates
AN INTRODUCTION TO THE SQL PROCEDURE Chris Yindra, C Y Associates Abstract This tutorial will introduce the SQL (Structured Query Language) procedure through a series of simple examples We will initially
Variables, Constants, and Data Types
Variables, Constants, and Data Types Primitive Data Types Variables, Initialization, and Assignment Constants Characters Strings Reading for this class: L&L, 2.1-2.3, App C 1 Primitive Data There are eight
1 Files to download. 3 A macro to list out-of-range data values. 2 Reading in the example data file. 22S:172 Lab session 9 Macros for data cleaning
1 2 22S:172 Lab session 9 Macros for data cleaning July 20, 2005 GENDER VISIT HR SBP DBP DX AE = "Gender" = "Visit Date" = "Heart Rate" = "Systolic Blood Pressure" = "Diastolic Blood Pressure" = "Diagnosis
Information and Computer Science Department ICS 324 Database Systems Lab#11 SQL-Basic Query
Information and Computer Science Department ICS 324 Database Systems Lab#11 SQL-Basic Query Objectives The objective of this lab is to learn the query language of SQL. Outcomes After completing this Lab,
DBF Chapter. Note to UNIX and OS/390 Users. Import/Export Facility CHAPTER 7
97 CHAPTER 7 DBF Chapter Note to UNIX and OS/390 Users 97 Import/Export Facility 97 Understanding DBF Essentials 98 DBF Files 98 DBF File Naming Conventions 99 DBF File Data Types 99 ACCESS Procedure Data
Data Presentation. Paper 126-27. Using SAS Macros to Create Automated Excel Reports Containing Tables, Charts and Graphs
Paper 126-27 Using SAS Macros to Create Automated Excel Reports Containing Tables, Charts and Graphs Tugluke Abdurazak Abt Associates Inc. 1110 Vermont Avenue N.W. Suite 610 Washington D.C. 20005-3522
Oracle SQL. Course Summary. Duration. Objectives
Oracle SQL Course Summary Identify the major structural components of the Oracle Database 11g Create reports of aggregated data Write SELECT statements that include queries Retrieve row and column data
Solution for Homework 2
Solution for Homework 2 Problem 1 a. What is the minimum number of bits that are required to uniquely represent the characters of English alphabet? (Consider upper case characters alone) The number of
Excel: Introduction to Formulas
Excel: Introduction to Formulas Table of Contents Formulas Arithmetic & Comparison Operators... 2 Text Concatenation... 2 Operator Precedence... 2 UPPER, LOWER, PROPER and TRIM... 3 & (Ampersand)... 4
arrays C Programming Language - Arrays
arrays So far, we have been using only scalar variables scalar meaning a variable with a single value But many things require a set of related values coordinates or vectors require 3 (or 2, or 4, or more)
Lecture 2 Notes: Flow of Control
6.096 Introduction to C++ January, 2011 Massachusetts Institute of Technology John Marrero Lecture 2 Notes: Flow of Control 1 Motivation Normally, a program executes statements from first to last. The
Advanced Tutorials. The Dark Side of the Transparent Moon
The Dark Side of the Transparent Moon -- Tips, Tricks and Traps of Handling ORACLE Data Using SAS Xinyu Ji, Fallon Clinic, Worcester, MA ABSTRACT The paper discusses tips, tricks and traps of handling
Counting the Ways to Count in SAS. Imelda C. Go, South Carolina Department of Education, Columbia, SC
Paper CC 14 Counting the Ways to Count in SAS Imelda C. Go, South Carolina Department of Education, Columbia, SC ABSTRACT This paper first takes the reader through a progression of ways to count in SAS.
Chapter 2 The Data Table. Chapter Table of Contents
Chapter 2 The Data Table Chapter Table of Contents Introduction... 21 Bringing in Data... 22 OpeningLocalFiles... 22 OpeningSASFiles... 27 UsingtheQueryWindow... 28 Modifying Tables... 31 Viewing and Editing
Effective Use of SQL in SAS Programming
INTRODUCTION Effective Use of SQL in SAS Programming Yi Zhao Merck & Co. Inc., Upper Gwynedd, Pennsylvania Structured Query Language (SQL) is a data manipulation tool of which many SAS programmers are
High-Level Programming Languages. Nell Dale & John Lewis (adaptation by Michael Goldwasser)
High-Level Programming Languages Nell Dale & John Lewis (adaptation by Michael Goldwasser) Low-Level Languages What are disadvantages of low-level languages? (e.g., machine code or assembly code) Programming
Beginning Tutorials. bt009 A TUTORIAL ON THE SAS MACRO LANGUAGE John J. Cohen AstraZeneca LP
bt009 A TUTORIAL ON THE SAS MACRO LANGUAGE John J. Cohen AstraZeneca LP Abstract The SAS Macro language is another language that rests on top of regular SAS code. If used properly, it can make programming
Database Programming with PL/SQL: Learning Objectives
Database Programming with PL/SQL: Learning Objectives This course covers PL/SQL, a procedural language extension to SQL. Through an innovative project-based approach, students learn procedural logic constructs
MICROSOFT EXCEL FORMULAS
MICROSOFT EXCEL FORMULAS Building Formulas... 1 Writing a Formula... 1 Parentheses in Formulas... 2 Operator Precedence... 2 Changing the Operator Precedence... 2 Functions... 3 The Insert Function Button...
Paper 109-25 Merges and Joins Timothy J Harrington, Trilogy Consulting Corporation
Paper 109-25 Merges and Joins Timothy J Harrington, Trilogy Consulting Corporation Abstract This paper discusses methods of joining SAS data sets. The different methods and the reasons for choosing a particular
Microsoft Excel Tips & Tricks
Microsoft Excel Tips & Tricks Collaborative Programs Research & Evaluation TABLE OF CONTENTS Introduction page 2 Useful Functions page 2 Getting Started with Formulas page 2 Nested Formulas page 3 Copying
Data Cleaning and Base SAS Functions Caroline Bahler, Meridian Software Inc
Data Cleaning and Base SAS s Caroline Bahler, Meridian Software Inc Introduction s are small programming subroutines and can be defined as the work horses of any data cleansing operation. Dirty data, unfortunately,
Introduction to Python
Caltech/LEAD Summer 2012 Computer Science Lecture 2: July 10, 2012 Introduction to Python The Python shell Outline Python as a calculator Arithmetic expressions Operator precedence Variables and assignment
PROC SQL for SQL Die-hards Jessica Bennett, Advance America, Spartanburg, SC Barbara Ross, Flexshopper LLC, Boca Raton, FL
PharmaSUG 2015 - Paper QT06 PROC SQL for SQL Die-hards Jessica Bennett, Advance America, Spartanburg, SC Barbara Ross, Flexshopper LLC, Boca Raton, FL ABSTRACT Inspired by Christianna William s paper on
CS 141: Introduction to (Java) Programming: Exam 1 Jenny Orr Willamette University Fall 2013
Oct 4, 2013, p 1 Name: CS 141: Introduction to (Java) Programming: Exam 1 Jenny Orr Willamette University Fall 2013 1. (max 18) 4. (max 16) 2. (max 12) 5. (max 12) 3. (max 24) 6. (max 18) Total: (max 100)
ABSTRACT INTRODUCTION
Automating Concatenation of PDF/RTF Reports Using ODS DOCUMENT Shirish Nalavade, eclinical Solutions, Mansfield, MA Shubha Manjunath, Independent Consultant, New London, CT ABSTRACT As part of clinical
A Closer Look at PROC SQL s FEEDBACK Option Kenneth W. Borowiak, PPD, Inc., Morrisville, NC
A Closer Look at PROC SQL s FEEDBACK Option Kenneth W. Borowiak, PPD, Inc., Morrisville, NC SESUG 2012 ABSTRACT The FEEDBACK option on the PROC SQL statement controls whether an expanded or transformed
Chapter 1 Overview of the SQL Procedure
Chapter 1 Overview of the SQL Procedure 1.1 Features of PROC SQL...1-3 1.2 Selecting Columns and Rows...1-6 1.3 Presenting and Summarizing Data...1-17 1.4 Joining Tables...1-27 1-2 Chapter 1 Overview of
First Java Programs. V. Paúl Pauca. CSC 111D Fall, 2015. Department of Computer Science Wake Forest University. Introduction to Computer Science
First Java Programs V. Paúl Pauca Department of Computer Science Wake Forest University CSC 111D Fall, 2015 Hello World revisited / 8/23/15 The f i r s t o b l i g a t o r y Java program @author Paul Pauca
Digital System Design Prof. D Roychoudhry Department of Computer Science and Engineering Indian Institute of Technology, Kharagpur
Digital System Design Prof. D Roychoudhry Department of Computer Science and Engineering Indian Institute of Technology, Kharagpur Lecture - 04 Digital Logic II May, I before starting the today s lecture
Object Oriented Software Design
Object Oriented Software Design Introduction to Java - II Giuseppe Lipari http://retis.sssup.it/~lipari Scuola Superiore Sant Anna Pisa September 14, 2011 G. Lipari (Scuola Superiore Sant Anna) Introduction
Converting Numeric Variables and Character Variables in SAS Randall Reilly; Covance Clinical Pharmacology; Madison, WI
Converting Numeric Variables and Character Variables in SAS Randall Reilly Covance Clinical Pharmacology Madison, WI INTRODUCTION This paper gives a general understanding of how to convert numeric and
COMP 110 Prasun Dewan 1
COMP 110 Prasun Dewan 1 12. Conditionals Real-life algorithms seldom do the same thing each time they are executed. For instance, our plan for studying this chapter may be to read it in the park, if it
6.170 Tutorial 3 - Ruby Basics
6.170 Tutorial 3 - Ruby Basics Prerequisites 1. Have Ruby installed on your computer a. If you use Mac/Linux, Ruby should already be preinstalled on your machine. b. If you have a Windows Machine, you
Introduction to SAS Functions
Paper 57 Introduction to SAS Functions Neil Howard, Independent Consultant, Charlottesville, VA Abstract A FUNCTION returns a value from a computation or system manipulation that requires zero or more
Perl in a nutshell. First CGI Script and Perl. Creating a Link to a Script. print Function. Parsing Data 4/27/2009. First CGI Script and Perl
First CGI Script and Perl Perl in a nutshell Prof. Rasley shebang line tells the operating system where the Perl interpreter is located necessary on UNIX comment line ignored by the Perl interpreter End
ODBC Chapter,First Edition
1 CHAPTER 1 ODBC Chapter,First Edition Introduction 1 Overview of ODBC 2 SAS/ACCESS LIBNAME Statement 3 Data Set Options: ODBC Specifics 15 DBLOAD Procedure: ODBC Specifics 25 DBLOAD Procedure Statements
AN ANIMATED GUIDE: SENDING SAS FILE TO EXCEL
Paper CC01 AN ANIMATED GUIDE: SENDING SAS FILE TO EXCEL Russ Lavery, Contractor for K&L Consulting Services, King of Prussia, U.S.A. ABSTRACT The primary purpose of this paper is to provide a generic DDE
Advanced Tutorials. Numeric Data In SAS : Guidelines for Storage and Display Paul Gorrell, Social & Scientific Systems, Inc., Silver Spring, MD
Numeric Data In SAS : Guidelines for Storage and Display Paul Gorrell, Social & Scientific Systems, Inc., Silver Spring, MD ABSTRACT Understanding how SAS stores and displays numeric data is essential
