Sunday, December 27, 2009
Thursday, December 24, 2009
Wednesday, December 23, 2009
Sunday, December 20, 2009
Thursday, December 17, 2009
Wednesday, December 16, 2009
Tuesday, December 15, 2009
Monday, December 14, 2009
Sunday, December 6, 2009
The pace of innovation got even faster with what I refer to as Web 3.0. Back in the 90's when Web 2.0 was being established, there was a gold rush for websites. Every company including their cousins and grandma it seems was creating their own websites. The website became the new identity complementing the the physical address. It became so ubiquitous that if your organization does not have a website, it does not exist. The majority of sites started out as HTML based sites describing products and services. As web 2.0 evolved, the user's experience became more interactive. Companies such as Google, Salesforce.com and Amazon.com utilized the interactive functionality to make the web experience more like running applications on your desktop.
I am witnessing an evolutionary shift from Web 2.0 to 3.0 with the advent of iPhone App. It is analogous to the 90's but rather than asking: "is there a website for that?", it has become: "is there an App for that?" As I was noticing this trend, I observed all the companies and products that I consumed to see if they "have an App for that." I start my morning at Starbucks and sure enough they were a couple of Apps for that. I later frequented Wal-Mart on my way home... there is an App for that. I checked out Target, the answer was yes once more. It was becoming like the websites but perhaps during the early days.
A few weeks ago, I stop by Walgreens to process some photos and noticed that the two main things they offer were prescription refills and photos. I did not find see that there was an App so this presented an interesting opportunity. People shop for other things but these two items seem to distinguish it from other stores. I did not see an iPhone App at the time so I did an experiment to see if I can prototype an App for Walgreens to see if they might find it useful.
Since I often stop by Walgreens to process my photos, I thought it would start there and provide a method to place photo orders directly on my iPhone.
This would organized pictures in albums which is similar to their website. I can then view my album and then place an order to my local store for processing prints.
Another useful thing I thought was to be able to place prescription refills. Walgreen does have this nice feature as an automated phone service but the iPhone can be a good alternative.
It can assist in filling out the prescription number since it contains the store code.
The list of store close to your current location will make it more user friendly for the selection. The store location can also provide the ability to get driving directions.
Lastly, I thought there can be a smarter way of handling discounts and coupons. This can key off of what you have selected before to provide intelligent targeted advertisements.
Once the coupon is selected, you can also just put your iPhone in front of the scanner of the store clerk and it will automatically apply the discount. I was able to put together this prototype rather quickly with the help of my of my programmer team member. We changed the title bar and navigational button to have the red colors to match the general theme of the Walgreen brand. It was a fun experience.
I then contacted Mark Wagner at Walgreens to see if we can share with him this experiment. He had member of his team follow up with me noting that they had already just completed their iPhone app and it has almost the exact same features as my prototype. I was a little disappointed to see that our prototype did not get a chance to see the light of day but I am glad to see that our guess as to what a Walgreen App would be came pretty close to what they internally implemented.
The experiment did not turn out exactly the way I expected but it did confirm a couple of theories that I had. The most important lesson for me was that many if not all organizations that deal with customers will have an iPhone App. That means just about all companies since if you don't have customers, that would be difficult to be sustainable. I also see that companies
are moving fast towards their having a mobile device or iPhone strategy since there are about 100,000 apps now and it is growing fast. This does parallel with the ubiquitous website back in the 90s. There are some things about iPhone apps that are distinctly different as compared to Web 2.0. The immediacy of having the information on you at all times rather than having to be at your computer even when you are mobile it its main obvious difference. Since it has the ability to understand your current location, it adds a new dimension for providing information that is context sensitive to where you are. The combination of these location based technologies deliver "augmented reality" which is a new class of software allowing for real time experience related to your location. I see that this is building upon Web 2.0 and technologies of yesteryear yet taking it to new levels. It is fascinating to witnesss the fast pace of innovation in this dynamic time.
Friday, December 4, 2009
Wednesday, December 2, 2009
Monday, November 30, 2009
Wednesday, November 25, 2009
Sunday, November 22, 2009
Saturday, November 21, 2009
Friday, November 20, 2009
Thursday, November 19, 2009
Wednesday, November 18, 2009
Tuesday, November 17, 2009
Saturday, November 14, 2009
Friday, November 13, 2009
The video I have recorded below will illustrate how this can be done with relatively little effort.
Tuesday, November 10, 2009
I was working on updating the style sheet of the DEFINE.XML and incorporated this update to the iPhone BI Flash version as well. This means that DEFINE.XML can be generated as before but not it has the option to have the style sheet that contains the colors that was chosen by the CDISC SDS team. This video illustrates how the DEFINE.XML with this style can be generated.
Friday, November 6, 2009
Step 1 – Grant Permissions
The first step is to get access your SAS programs on a mobile device like an iPhone. The assignment of permissions to the SAS programs is applied on the SAS application server where the SAS programs and data reside. This can also be accomplished through a web browser as shown here.
Step 2 – Open and Edit Program
Now that permissions have been granted, I then access the SAS program directly on the iPhone. I first select the library in which the program is stored at:
Once I selected a specific program, I then tap on the “Edit” button to edit the program with an editor not too much different than how I edit emails on my iPhone.
Once the edits are complete, I then submit or run the program by tapping on the “run” button.
Step 3 – Review Edit History
Each time I edit or submit a program using this method, it will automatically create a copy of the current version. This also records my user name and the time in which I performed this edit for a complete audit trail for better change management. The history of the changes are therefore available through reports which I can also generate directly from my iPhone.
By running one of these reports, I can review the history of all the edits that anyone in my team has applied and have the ability to roll back on the server to an older version if that is required.
Editing SAS Programs 3.0 Summary
This process illustrates how a SAS program can be edited through a mobile device such as an iPhone and then submitted with complete version control. This does not mean that I no longer have the ability to edit your SAS program in EG or use your favorite text editor. This is an added tool which complements my existing set of tools and methods I use so now I can gain greater flexibility having the option to perform powerful SAS analytics anywhere with an iPhone.
Thursday, November 5, 2009
Saturday, October 31, 2009
Thursday, October 29, 2009
Tuesday, October 27, 2009
Monday, October 26, 2009
Friday, October 23, 2009
Thursday, October 22, 2009
Wednesday, October 21, 2009
Friday, October 16, 2009
Wednesday, October 14, 2009
I therefore have been using a macro named "datetest" which perform a series of checks against the date values to see if it is invalid. Things it catches include examples such as the month being 13 or the day is missing. There are times when I needing to look at many datasets and it is useful to perform this verification on the go on an iPhone. I will share with you this approach in applying the date test on an iPhone as shown in this video.
Sunday, October 11, 2009
Friday, October 9, 2009
The Definedoc was originally a SAS macro that only ran on a SAS server. I then adapted this to be executable on an iPhone. This will allow a user on an iPhone to dynamically execute and get the latest DEFINE.XML upon request and viewable on the go. This means that I can get the view of the latest update that my analyst has worked on at any moment even when I am on the road through my iPhone. I will illustrate how this is done through a video which you can see below.
Wednesday, October 7, 2009
Tuesday, October 6, 2009
Monday, October 5, 2009
Application Name: BI Flash Application Version Number: 1.0 Application SKU: 1234 Application Apple ID:327568191
When I reviewed the AppStore, it was not there. They did mention that they will process the contract and things will not be live until that is complete. After a couple of hours wait, it became live. I then found it on the App Store and installed it as:
I had intended to list it under our company name but somehow it has it under "sy Truong". There has been quite a few updates since the binary has been uploaded for approval as well. I will plan to update all fixes and enhancements so hope that will be updated real soon.
Saturday, October 3, 2009
Thursday, October 1, 2009
So when you are out and about and just have a sudden dire need to check on your data standards. :) I have recorded a video which illustrates how this can be performed on an iPhone.
Wednesday, September 30, 2009
The part that I find challenging about reviewing data against CDISC has to do it multiple times as data is being developed. There are times when I need to review the latest update and I am not at my desk. I have found a solution for this when I am out and about, I can review the latest data on my iPhone. This allows me to see how standardize my data is and I see the status of my CDISC effort at any moment even standing in line at Starbucks. :)
I capture a YouTube video as to how this is done which you can see below.
Monday, September 28, 2009
Rather than going into a verbose description here, I recorded a video to illustrate this to you. I find that the iPhone which is a multi-touch graphical user interface can be best explained by showing so hope you find this video useful.
Sunday, September 27, 2009
Friday, September 18, 2009
Tuesday, September 15, 2009
I recently submitted an iPhone application to the apple developer program to be approved. This was my first time so the hoops that Apple had me jump through were interesting. The initial application had general information which seems pretty normal. These included things such as:
- Application Name: BI Flash
- Application Description: BI Flash delivers business intelligence to information to the iPhone. It takes SAS macros, programs or data on a server and delivers this to iPhone. The user can register the programs or SAS libraries, and then make this available to specified users who can then view this through BI Flash on the iPhone. This is executed in real time so the user gets always the latest data.
- Primary Category: Business
- Keywords: Business Intelligence, SAS, Analytics
- Application URL: http://meta-x.com/biflash
These seem pretty standard since they would probably use this for the AppStore. The next step is pretty interesting since it asked for me to check three categories including: None, Infrequent/Mild or Frequent/Intense. The description for the categories included:
- Cartoon or Fantasy Violence
- Realistic Violence
- Sexual Content or Nudity
- Profanity or Crude Humor
- Alcohol, Tobacco, or Drug Use or References
- Mature/Suggestive Themes
- Simulated Gambling
- Horror/Fear Themes
- Prolonged Graphic or Sadistic Realistic Violence
- Graphic Sexual Content and Nudity
I then uploaded the binary for my application along with a large 512x512 icon, a screen shot. It took Apple a couple of weeks for them to review my app. Since they receive thousands of apps, I wonder if they even check it at all. I was surprise to find out that they did do a detailed review. They found two things that they wanted to change due to that fact that “it does not adhere to the iPhone Human Interface Guidelines as outlined in the iPhone Developer Program License Agreement section 3.3.5.”
The first part is when the application is tested without a network connection; it just presented a blank screen. Apparently, I missed these guidelines which suppose to display a clear message detailing what the user is suppose to do. I created a screen that is more friendly now:
The second point is that the small icon of the application does not match the large icon.
They have very specific guidelines. I had our graphic artist work on these at different stages of the application so they appeared different so they thought it would confuse the user. I thought these suggestions were very good and I do appreciate that someone actually took the time to do a review.
I then updated the large icon as shown here:
I just submitted an updated version so they sent me a friendly but generic message that someone is reviewing it and will send me a message of any additional request. I will keep my fingers crossed but hopefully this round will take less than two weeks.
Monday, September 14, 2009
Thursday, September 10, 2009
- Transformation Model Validation- A transformation model documenting the source data and how it was transformed confirming the destination and source variables.
- Data Value Subset Review - An automated report printing out a subset of the data before and after the transformation is reviewed and validated. This may catch truncation.
- Categorical Aggregate Review - An automated summary report is generated summarizing the frequency counts of categorical variables verifying the counts are the same. This catches missing or dropped values.
- Continuous Aggregate Review - An automated summary report is generated summarizing the min, max median counts of continuous variables verifying the counts are the same. This catches missing or dropped values.
- CDISC Rules PROC CDISC - SAS tools such as PROC CDISC provides a short list of deviations or guidelines that may have been violated. This review is applied programmatically and a report is generated.
- Variable Lengths - An evaluation of all variable lengths and a report is generated with recommendations on standardizing lengths for variables across all data to adhere to standards.
- Deviation Summary - A summary report documenting all deviations and their resolutions.
- Test Plan - A formal test plan document is used to document all the related tests and deviations.
- CDISC Builder Rule Test - An 18 criteria check list. The list are shown here with an example report shown below:
- Required Fields: Required identifier variables including: DOMAIN, USUBJID, STUDYID and --SEQ.
- Subject Variable: (126.96.36.199) For variable names, labels and comments, use the word "Subject" when referring to "patients" or "healthy volunteer".
- Variable Length: (188.8.131.52) Variable names are limited to 8 characters with labels up to 40 characters.
- Yes/No: (184.108.40.206) Variables where the response is Yes or No (Y/N) should normally be populated for both Yes and No responses.
- Date Time Format: (220.127.116.11) Date or Datetime must be in ISO 8601 format.
- Study Day Variable: (18.104.22.168) Study day variable has the name ---DY.
- Variable Names: (3.2.3) If any variable names used matches CDISC variables, the associated label has to match.
- Variable Label: (3.2.3) If any variable labels match that of CDISC labels, the associated variable has to match.
- Variable Type: (3.2.3) If any variables match that of CDISC variables, the associated type has to match.
- Dataset Names: (3.2.3) If any of the dataset names match CDISC, the associated data label has to match.
- Dataset Labels: (3.2.3) If any of the dataset label match CDISC, the associated dataset name has to match.
- Abbreviations: (10.3.1) (10.4) The following abbreviations are suggested for variable names and data sets.
AE Adverse Events AU Autopsy BM Bone Mineral Density (BMD) Data BR Biopsy CM Concomitant Meds CO Comments DA Drug Accountability DC Disease Characteristics DM Demographics DS Disposition DV Protocol Deviations EE EEG EG EEG EX Exposure HU Healthcare Resource Utilization IE Inclusion/Exclusion IM Imaging LB Laboratory Data MB Microbiology Specimens MH Medical History ML Meal Data MS Microbiology Susceptibility OM Organ Measurements PC PK Concentration PE Physical Exam PP PK Parameters PG Pharmacogenomics QS Questionnaires SC Subject Characteristics SE Subject Elements SG Surgey SK Skin Test SL Sleep (Polysomnography) Data SL Signs and Symptoms ST Stress (Exercise) Test Data SU Substance Use SV Subject Visits TA Trial Arms TE Trial Elements TI Trial Inclusion/Exclusion Criteria TS Trial Summary TV Trial Visits VS Vital Signs CAN ACTION ADJ ADJUSTMENT ADJ ANALYSIS DATASET BL BASELINE BRTH BIRTH BOD BODY CAN CANCER CAT CATEGORY C CHARACTER CND CONDITION CLAS CLASS CD CODE COM COMMENT CON CONCOMITANT CONG CONGENTTAL DTC DATE TIME - CHARACTER DY DAY DTH DEATH DECOD DECODE DRV DERIVED DESC DESCRIPTION DISAB DISABILITY DOS DOSE DOS DOSAGE DOSE DOSE DOSE DOSAGE DUR DURATION EL ELAPSED ET ELEMENT EM EMERGENT END END EN END ETHNIC ETHNICITY X EXTERNAL EVAL EVALUATOR EVL EVALUATION FAST FASTING FN FILENAME FL FLAG FRM FORMULATION, FORM FREQ FREQUENCY GR GRADE GRP GROUP HI HIGHER LIMIT HOSP HOSPITALIZATION ID IDENTIFIER INDC INDICATION INDC INDICATOR INT INTERVAL INTP INTERPRETATION INV INVESTIGATOR LIFE LIFE-THREATENING LOC LOCATION LOINC LOINC CODE LO LOWER LIMIT MIE MEDICALLY-IMPORTANT EVENT NAM NAME NST NON-STUDY THERAPY NR NORMAL RANGE ND NOT DONE NUM NUMBER N NUMERIC ONGO ONGOING ORD ORDER ORIG ORIGIN OR ORIGINAL OTH OTHER O OTHER OUT OUTCOME OD OVERDOSE PARM PARAMETER PATT PATTERN POP POPULATION POS POSITION QUAL QUALIFIER REAS REASON REF REFERENCE RF REFERENCE RGM REGIMEN REL RELATED R RELATED REL RELATIONSHIP R RELATIONSHIP RES RESULT RL RULE SEQ SEQUENCE S SERIOUS SER SERIOUS SEV SEVERITY SPEC SPECIMEN SPC SPECIMEN SPEC SPONSOR SPC SPONSOR ST STANDARD STD STANDARD ST START STD START STAT STATUS SCAT SUBCATEGORY SUBJ SUBJECT SUPP SUPPLEMENTAL SYS SYSTEM TXT TEXT TM TIME TPT TIMEPOINT TOT TOTAL TOX TOXICITY TRANS TRANSITION TRT TREATMENT U UNIT U UNIQUE UP UNPLANNED VAR VARIABLE VAL VALUE V VEHICLE
- SEQ Values: When the --SEQ variable is used, it must have unique values for each USUBJID within each domain.
- Label Casing: For Dataset labels and variable labels, all non trivial words (more than three characters) must start with a capital letter with the rest of the characters lowercase.
- Required Values: (22.214.171.124) For required fields such as the ones specified in number 1, check to see if there are values. If there are any missing, values, report the observation number where it is missing.
- Similar Parenthesis: For labels with matching values inside parenthesis such as (Yes/No) within the same dataset, it will check to see if the variables have the same type and length. If not, it will report the differences.
- Required Variables: (126.96.36.199) A Required variable is any variable that is basic to the identification of a data record (i.e., essential key variables and a topic variable) or is necessary to make the record meaningful. Required variables should always be included in the dataset and cannot be null for any record.
- Expected Variable: (188.8.131.52) An Expected variable is any variable necessary to make a record useful in the context of a specific domain. Columns for Expected variables are assumed to be present in each submitted dataset even if some values are null.
Wednesday, September 9, 2009
I realize that while holding the camera on my hand, it was not on a tripod so it was perhaps not stable and I was looking at the person I was talking to so the composition was not optimal but this adds to the whole amateur video blogging experience. This experiment of one man on the fly reporting was interesting. I hope to do it again at future conferences.
I will include some of the videos below for your viewing.
Claire Castell, Mgr. Information Mgmt| Consumer and Small Business Deposit Risk at Wells Fargo shares the history of WUSS and its name.
Marci Russel, Web Project Manager of SAS Institute talks about Online Support at WUSS 2009 conference
Lora Delwiche author of Little SAS book shares Debugging Techniques
Art Carpenter talks about SAS Macros at WUSS 09 in San Jose Art is a consultant for Caloxy, California Occidental Consultant
Michael A. Raithel
WUSS Opening Session Keynote Address by Michael A. Raithel It's not Easy Being a SAS Programmer
Vincent DelGobbo, Senior Systems Developer for web Tools Group at SAS Institute talks about SAS export to Excel XML format at WUSS.
Heather Brown, Senior Recruiter, Advanced Clinical Services LLC
Saturday, September 5, 2009
Wednesday, September 2, 2009
Tuesday, September 1, 2009
Sunday, August 30, 2009
Saturday, August 29, 2009
Friday, August 28, 2009
Thursday, August 27, 2009
- On Off Selector
These are similar to check boxes where it can be set to on (checked) or off (unchecked).
- Short Text and Passwords
The single text entry allows users to enter any text value to the entry. A similar entry type is the password which will mask the entry so that the text is hidden.
- Check List
This include a check list where the user can select one value from a list of valid values.
- Text Auto fill
This allows users to enter text but provides a list of valid values to choose from if what the user typed matches what is in the valid list of values.
- Date Time
These are preset valid date and time selections. This uses a spin controller with preset for date and time.
- Distinct Value Spin Control
The spinner control can combine values from multiple data sources to then formulate one value. The date and time above illustrates three spinners while this price range illustrates two. You can have it show one to four spinner controls.
In the case of a macro, the parameters of the macro will correspond to a selection by one of the controllers above. The values of the controller are populated by values from a dataset stored on the server.
The macros are stored in libraries which correspond to folders on the server. If you have been granted permissions, you would be able to select the library and then view all the macros in the selected library.
Each macro will have a macro short name which is also the name of the file on the server followed by a longer label. The user can select it by selecting anywhere on the row corresponding to the macro. If you wish to select macros from a different library, you can select the library displayed at the top.
Once you select the library, you can then return back to the Macros screen by selecting the "Macros" navigation button at the top.
Once you have selected the macro, you will then be presented with all the parameter selection pertaining to the macro. You can scroll down if this extends beyond one screen.
Upon completion of selecting all parameters, you can then click on the "Run" button on the upper right. This will enter all selected values and execute the macro. If thee macro has an error, then the log is displayed.
If the macro runs successfully, then the results will be displayed. Results can be in one of the standard SAS output format including: ASCII (LST), PDF, HTML, Excel (XLS), MSWord (DOC). An example very simple SAS ASCII LST output is shown below.
Monday, August 24, 2009
Sunday, August 23, 2009
Friday, August 21, 2009
SAS datasets are stored in libraries on the server similar to how files are stored in folders. Each library is associated with a different folder on the server which contains one or more datasets. You then have the option of selecting the library which contains datasets you wish to view. The screen that lists the available datasets can be accessed through the "Dataset" navigational button at the bottom of your screen.
This will list all the available SAS dataset from the specified library. You can then view the contents of the data by selecting on dataset from the list. This is accomplished by tapping anywhere on the row of the displayed dataset name.
The main dataset screen displays all datasets that you have access to in the specified library. The list displays a short dataset name followed by the more descriptive dataset label below each dataset. You can select a different library by selecting the library name at the top of the dataset view to display the library selection screen as shown here:
Once you select the library, you can then return back to the main Dataset screen by selecting the "Datasets" navigation button at the top. From the list of datasets on the dataset screen, you can view the data by selecting anywhere on the entire row of the dataset name and label. This will then navigate you to the dataset view screen which displays the detail values of the dataset.
SAS datasets can be very large. BI Flash will break down the data into viewable screens of 20 rows at a time. Upon the selection of the dataset from the main dataset screen, you will be brought to the data viewer.
You can navigate to specific observation of the data by selecting the navigational next and back arrow buttons at the bottom of the viewer. The slider also allows you to quickly jump to a specific segment of the data quickly. You can also tap on the current observation number (1-20) to then be presented with a list of the data chunks. This allows you to navigate across larger sets of data.
The list of "chunks" of data can be scrolled through by swiping vertically. This will allow you to scroll through the entire observation list and select on the specific chink of data to be viewed. Upon selection, it will display data viewer with the data with selected observations.
You can also configure how the variables are to be displayed. These options are available through the button shown here:
This button is a toggle which flips the screen between the data
viewer and the configuration screen shown below:
The options include the following.
- Formatted - This will apply any SAS formats or user defined format with the associated format catalog upon the view of the data.
- Variable Attributes - This will display the variable label, length and related attributes similar to what you would see in a PROC CONTENTS.
- Variable Names - The column header will display the variable name as part of the title.
- Variable Label - The column header will display the variable label as part of the title.
- Data Block - Defines the chunk size of the data which will be viewed to optimize viewing experience for large datasets
More details are available at BI Flash User Manual....
Thursday, August 20, 2009
Wednesday, August 19, 2009
Tuesday, August 18, 2009
Friday, August 14, 2009
Tuesday, August 11, 2009
Monday, August 10, 2009
CDISC standards are very helpful in getting the variable attributes such as names and labels standardized. It however, does not enforce the standards of lengths leaving it up to you to evaluate and come up with the correct length for each study submitted. The following steps are recommended to standard your key field lengths to avoid truncation errors.
Identify all datasets within all your studies being submitted that contains the same variables. An example is that you are submitting three studies and each study has about 15 datasets. In this case, there are common variables such as STUDYID, DOMAIN, USBJID that are in more than one dataset. If any variable that exist in more than one dataset, they should be included in this analysis.
Determine the longest character length value of each variable across all datasets. So for example, if your verbatim variable AETERM has a text value with the longest length of 45 characters on one dataset and 59 characters on another, you would note the 59. The goal is to evaluate all the data values and determine the longest length across all your data.
Set the maximum length that will be the standard across all dataset. In the above example, you can set the maximum to be 59 but it may be a better standard to round the length so 60 would be a better standard. In this case, all variables AETERM across all your studies will be set to 60.
An example report shown above illustrates all the variables across three studies. This report is produced by a macro %varlen that automate the evaluation and assignment of the variable lengths. The standardization will prevent errors in your merging of keys but it can also significantly reduce the size of your SAS datasets. Without performing this evaluation, you may just set the variable to be the maximum length of 200 characters. In that case, SAS allocates this and creates very large datasets even though your data values never reach this length. Your standardization effort will result in efficient smaller datasets and allows FDA reviewers using tools such as JMP among other software without causing errors.