Posts

How to read next record while working on the current record. (LEAD FUNCTION)

Even though there is no function is available in SAS to do exactly the opposite work of the LAG function (i.e: reading the next record while working on the current one), there are few things you can do to do exactly that. Here are few simple techniques which are proved to work without any problem. *SAMPLE DATASET; data test; input id age grp ; datalines ; 1 10 1 2 20 1 3 30 1 4 40 1 5 50 1 1 10 2 2 20 2 3 30 2 4 40 2 5 50 2 ; run ; *1) Using the POINT feature along with automatic variable _N_; This solution was suggested by Paul M. Dorfman ; data leads; _n_ ++ 1 ; if _n_ le n then do; set one point=_n_; leadage=age; end ; set one nobs=n; run ; *OR*; data leads; _n_ ++ _n_ lt n; set one point=_n_; leadage=age; set one nobs=n end=end; if end then leadage= . ; run ; By using the above techniques, you can jump a bit higher and even look values of two, three or any numbers of observations in advance by advancing the value of...

STUDY 'DAY' CLCULATION (ONE-LINER)

Image
Recently I stumbled upon a SUGI-Paper  SAS 1-Liners by Stephen Hunt. I liked the way Stephen developed the 1-liner for   STUDY DAY calculation. Direct link: One of the most common calculation used across all types of programming is determining a relative 'day' based on 2 date fields. In clinical trials the initial 'Study Day' is generally considered to begin at either randamization or dosing, thus assessments made prior to this starting point require a slight variation in the calculating in order to preserve the typical  'no day 0' concept.   SUGI proceedings10/054-2010.pdf   When it comes to calculating such, some programmers opt to both with evaluating whether a visit date occurred on or /after randomization. if visdt > randdt >.z then stydy=visdt-randdt; else stydt=visdt-randdt+1; However, this is unnecessary, sine the 1-liner will suffice: if visdt > .z & randdt > .z then stydy=visdt-randdt+(visdt>=randdt); ...

Easy way to UPCASE variable names of SAS dataset

Image
option VALIDVARNAME=UPCASE; Use trhe above option statement to upcase the variable name of the SAS dataset irrespective of type of variable in the dataset (character or numeric). The following example shows how the option sattement VALIDVARNAME=UPCASE works. proc contents data =sashelp.class out =test; run; Note: Propcase variable names.  *Upcasing the variables; option validvarname=upcase; proc sort data=sashelp.class out=test; run; Because of the option statement. Ex:  'Age'  becomes 'AGE' and 'Height' becomes 'HEIGHT' etc. See the SAS Language Reference dictionary to get more details. Another way to do this is to use a macro and I call it as UPCASE macro. proc sort data =sashelp.class out =test; by name; run ;   % macro upcase (lib,dsn); *Create a macro variable with the total number of variable count; data _null_; set sashelp.vtable(where=(libname="&LIB" and memname="&DSN")); ...

MDY Function

The MDY function converts MONTH, DAY, and YEAR values to a SAS date value. For example, MDY(10,19,1999) returns the SAS date value '19OCT99'D. Syntax:    MDY(month,day,year) Arguments month : specifies a numeric expression that represents an integer from 1 through 12. day     :specifies a numeric expression that represents an integer from 1 through 31. year    :specifies a two-digit or four-digit integer that represents the year. The YEARCUTOFF = system    option defines the year value for two-digit dates. If you know month, day, and year values, it’s very easy to derive date variable. You just need to use MDY function (of course, month, day, and year should be numeric). However, if the data is character then the conversion to numeric should occur first and then the conversion to the date value. Example: *When month, day, and year has numeric values; data test; year= 1999 ; month= 12 ; day= 19 ; newdate= mdy ...

Overview on CDISC Implementation

Image
CDISC Advantages CDISC has developed a set of data standards to enhance data collection, management, analysis, and reporting efficiencies, improve safety monitoring, and streamline the review and approval process for investigational treatments. Under the ICH’s electronic Common Technical Document (eCTD) guidance, CDISC Study Data Tabulation Model (SDTM) is the preferred standard for content format and structure of clinical data for all clinical studies. Based on proposed federal regulations, the FDA will mandate that all clinical trial submissions be in electronic format and that the content comply with data standards guidance. Veristat helps our clients by not only implementing these standards on a project or program, but also by providing our clients with an understanding of the CDISC standards. source:veristatinc.com   source: http://cro.businessdecision.com/ (' ’)

How to convert the datetime character string to SAS datetime value? (ANYDTDTM and MDYAMPM formats)

Image
When we have a string like this "9/01/2010 11:52:54 AM" and would like to translate the string to a numeric SAS date time variable, most of the times we use SCAN function to extract the information to get the DATETIME format. This is definitely a tedious job. SAS formats ( MDYAMPM, ANTDTDTM ) comes to rescue us. Here is how it works. data test ; length date $25 ; date=" 9/01/2010 11:52:54 AM "; *Convert the character string to SAS datetime value; datetimevar = input (date, mdyampm25.2 ); datetimevar1 = input (date, anydtdtm20. ); *Apply format to the SAS date time value; format datetimevar datetimevar1  datetime19. ; run ; Result: 01SEP2010:11:52:54 * ANYDTDTM and MDYAMPM informats work together when the datetime value has AM PM specified or day, month, and year components are not ambiguous. The MDYAMPMw . format writes datetime values with separators in the form mm/dd/yy hh:mm AM PM, and requires a space between the date and the time....

SAS Keyboard Shortcuts

Image
Here are the few shortcuts you need to know to speed up the code writing. These work in both EPG (Enterprise Guide) and SAS Enhanced Editor. Shortcuts and their descriptions: Remember that the keyboard shortcuts listed here are default. Selection Operations: 1) Comment the section with line comments (/): press CTL + / 2) Undo the comment: press CTL + SHIFT + / 3) Convert selected text to lowercase: press CTL + SHIFT + L 4) Convert selected text to uppercase: press CTL + SHIFT + U Shortcuts (pre-defined) CTRL+Shift+L or +U (only for the enhanced editor), which convert all selected text into lowercase or uppercase respectively. These become very handy  when we insert the text by copy+paste. 5) Indent selected section: press TAB 6) Un-indent selected section: press SHIFT + TAB 7) To move curser to the matching DO/END statement: press      ALT + [ or      ALT + { or        ALT+] or ...