יום שבת, 31 במרץ 2012

סאסוד

עבר לא מעט זמן מאז הפוסט האחרון שלי אבל אני מקווה שמעכשיו אצליח לשמור על תדירות פרסום פחות או יותר קבועה.

לפני שניגש לנושא שלשמו התכנסנו אני רוצה להודות ל – Rottman ולאפרת זילברמן על התגובות שלהם לפוסטים קודמים שלי. אחת ממטרות בלוג זה הוא לעודד רב-שיח ושיתוף בין משתמשי ה – SAS בארץ כך שתגובות, הערות והארות תמיד יתקבלו בברכה.

ולעניינו. שפת ה – SAS עשירה מאוד וכוללת אלפי פקודות ופונקציות שונות. חלקן ידועות ונמצאות בשימוש כמעט בכל יום ע"י משתמשי ה - SAS אולם חלקן ידוע פחות. מידי פעם אני נתקל בפרמטרים, פונקציות ואפילו ב - PROC-ים שלמים המתחבאים אל הכלים ופחות ידועים בברנז'ה אבל יכולים לחסוך לנו עבודה רבה אם נכיר אותם ונדע להשתמש בהם במקום ובזמן הנכון.

לכן, החלטתי לייסד פינה חדשה בבלוג זה בשם סאסוד (סאס + סוד – מחוכם, הא...) בה נוציא לאור הזרקורים אופציות, פונקציות ויכולות של SAS שהן אולי פחות מוכרות אבל בהחלט שימושיות.

לפני שנמשיך, אזהרה – הן פוסט זה והן מרבית הפוסטים העתידיים בפינה זו יעסקו בנושאים מתקדמים ב – SAS כך שאם אתם חדשים בכל הקטע הזה של SAS יכול להיות שיהיה לכם קצת קשה להתחבר. בכל מקרה, בכוונתי גם להתחיל בקרוב פינה נוספת המיועדת במיוחד למשתמשים חדשים ב – SAS (עדיין לא מצאתי שם, הצעות יתקבלו בברכה) כך שכולם ייצאו מרוצים.

בחרתי להתחיל עם פונקציית מאקרו ידועה בשם %SYSFUNC. פונקציה זו מאפשרת לנו להפעיל מתוך שפת המאקרו של SAS פונקציות "רגילות" של SAS. מה שפחות ידוע הוא שפונקציית מאקרו זו יכולה לקבל פרמטר נוסף שהוא הפורמט בו יעשה שימוש לעצב את התוצר המתקבל מפונקציית ה – SAS.

דוגמא מהחיים:
בתוכנית ה – SAS שלנו אנחנו רוצים להוסיף הערת-שוליים (footnote) המכילה את תאריך נכונות הנתונים. הדרך הפשוטה לעשות זאת היא:

footnote ‘Data as of 28/03/2012’;
proc print data=sashelp.class noobs;
      where age=13;
run;

ובפלט נקבל:

הבעיה היא שבשיטה זו נצטרך כל פעם לעדכן ידנית את התוכנית שלנו עסק שיכול להיות די מתיש ופתח לטעויות מביכות.

אם הצלחנו לאסוף ידע בסיסי בשפת המאקרו של SAS נראה שנוכל לפתור את בעיית העדכון בצורה פשוטה ע"י שינוי ה – footnote בצורה הבאה:

footnote "Data as of %sysfunc(today())";
*footnote "Data as of %sysfunc(date())";
proc print data=sashelp.class noobs;
      where age=13;
run;


כאמור, פונקציית המאקרו %sysfunc מאפשרת לנו לקרוא לפונקציות "רגילות" של SAS כגון today() המחזירה לנו את התאריך של הרצת הקוד (הפונקציה date() עושה בדיוק אותו דבר). חשוב, כמובן, לזכור לשנות את המרכאות הבודדות למרכאות כפולות אחרת העסק לא יעבוד.

הבעיה היא שהפלט שנקבל יהיה אומנם נכון טכנית – מה – 1/1/1960 ועד ה – 28/3/2012 אכן עברו 19080 ימים – אבל פחות נוח לקריאה ע"י בני אדם:


פתרון אחד הוא שימוש שוב ב - %sysfunc לקריאה לפונקציה putn() שבעזרתה נעצב את התאריך בצורה מתאימה לצריכה אנושית:
footnote "Data as of %sysfunc(putn(%sysfunc(today()),ddmmyy10.))";
proc print data=sashelp.class noobs;
      where age=13;
run;

ונקבל שוב:


הבעיה שהסוגריים מתחילים להשתולל בקוד שלנו ובאופן כללי הוא נהיה די ארוך.

הפתרון האלגנטי במקרים שכאלו הוא שימוש בפרמטר השני והסודי של %sysfunc לעיצוב התאריך:

footnote "Data as of %sysfunc(today(),ddmmyy10.)";
proc print data=sashelp.class noobs;
      where age=13;
run;

שגם הוא ייתן לנו:

אבל עם פחות קוד ועם הרבה פחות סוגריים.

כמובן שניתן להשתמש בשיטה זו לעיצוב כל מספר או טקסט שהוא ולא בהכרח תאריכים:

footnote "Daily percent:%sysfunc(ranuni(0),percentn5.0)";
proc print data=sashelp.class noobs;
      where age=13;
run;

חגי


יום שלישי, 6 במרץ 2012

כנס לשכת מנתחי המערכות "נתפסים ברשת" עם SAS

את כנס לשכת מנתחי המערכות השנתי בחרו המארגנים להכתיר בשם "נתפסים ברשת", במובן מסויים כך בדיוק הרגשנו כאשר מייד לאחר הרצאתו החשובה של וולף ליכטנשטיין, "Big Data or Big Mass? Big data Analiytics is the stairway to Heaven" ,  הרצאה מקצועית מרכזית במליאת אחר הצהרים של הכנס בה הדגיש מר וולף את העובדה הפשוטה והחשובה שספרייה גדולה יותר אינה הופכת את בעלייה לחכם יותר ותיאר את אתגרי הטיפול בצמיחה העצומה בכמויות המידע הנוצרות ברשת, (כמויות אלו שהוערכו בשנת 2009 בכ-0.8 זטהבייט צפויות לצמוח עד שנת 2020 עד כדי 35.2 זטהבייט), ופרטה את המודל המנצח של SAS המאפשר התמודדות עם כמויות מידע עצומות באופן יעיל יותר בעזרת האנליטיקה העסקית המובילה בעולם. (ראו בקטע הוידאו).




בדרכנו לקוקטייל שלאחר המליאה התבשרנו כי הפרוייקט המנצח שזכה לפרס הראשון בכנס הוא לא אחר מאשר אחד מן הפרוייקטים המובילים בישראל אשר בוצעו בעזרת SAS לניהול הסיכונים במסגרת באזל 2 בבנק לאומי. הפרס הוענק לזלמן אל-אני וללאורה לוין לפניכם תמונות שצולמו באירוע.


מעל: צבי צוויג, זלמן אל-אני, לאורה לוין ורונית לפידור בלו עם תעודת הזכייה, למטה ברגע ההכרזה לחיצת יד לדוד טוביאס.
מעל: רונית לפידור-בלו, צבי צוויג, דויד טוביאס וולף ליכטנשטיין.