SAS (שפת תכנות)

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

SAS איננה רק שפת תכנות אלא תוכנה (software), הכוללת למעלה מ-200 חבילות שונות. רבות מהן מתבססות על תכנות חזותי (ויזואלי) שאינו דורש ידע מוקדם בתיכנות.

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

סקריפטים של SAS וקובצי דאטה מקבלים את הסיומת file.sas.

בתעשייה השימוש ב-SAS נפוץ בעיקר בחברות גדולות, לרוב מתחומי הפיננסים (בנקים, חברות ביטוח וכדומה) והפרמקולוגיה (תרופות). זאת משום אמינותה ויציבותה של השפה, והעובדה שקיים גוף שהוא האחראי עליה, בשונה משפות אחרות כמו python ו-r.

תחביר השפה

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

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

ב-SAS אין חשיבות להזחה. גם לא קיים הבדל בין אותיות גדולות וקטנות.

מאפיינים בסיסיים

יש לכתוב נקודה פסיק אחרי כל פקודה. לאחר כל פעולה, יש לכתוב את המילה השמורה RUN;

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

עבודה בספריות

תהליך העבודה ב-SAS מתבסס על עבודה בספריות (Library), שהן תיקיות שהוגדרו בעזרת נתיב (pathway).

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

הגדרת הספרייה פותחת במילה השמורה libname, לאחר מכן הגדרת שם הספרייה, ואז הנתיב כמחרוזת.

הנה דוגמה להגדרת ספרייה במערכת ההפעלה WINDOWS:
libname mydata 'c:\my documents\sasfiles';

טיפוסי נתונים

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

טיפוסי הנתונים לרוב ימומשו כעמודה בתוך טבלה.

סקירה כללית של תחביר בסיסי

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

יצירת טבלה חדשה מתבצעת כך:

data work.name_table;
length A $25;
input A $ B C date9.;
format B best. C date9.;
datalines;
Smith 3 30MAR1988
Williams 4 05SEP1984
Jones 5 12FEB1989
;
run;

בדוגמה זו יצרנו את הטבלה name_table בספריית work.

משתנה A הוא מחרוזת ואורכו 25 תווים. השימוש בתו $ מבהיר ל-SAS שמדובר במחרוזת, ולכן אין צורך להגדיר פורמט עבור משתנה A. משתנה B הוא נומרי, ומשתנה C הוא משתנה תאריך, בפורמט המתאים לצורת הכתיבה הנתונה כאן  

הגדרת משתנה חדש או פעולות על משתנים יכולה להתבצע כך:

data new_table;
set work.name_table;
D = B * 2;
E = "hello world";
run;

הפקודה set מבצעת טעינה של טבלה אחרת. כדי לבצע איחוד בין טבלאות (JOIN), יש להשתמש בפקודה merge.

אם לא הוגדרה תיקייה מסוימת לפני יצירת הטבלה, היא תיווצר אוטומטית בספריית WORK.

קיימות מתודות רבות המתאימות לעבודה על משתנים בטבלה. כמו למשל length, compress, וכדומה. כולן מתפרסמות באתר SAS.

עבודה בתהליכי SAS (המכונים procedure)

בשפת SAS קיימים מאות "בלוקים" מובנים המשמשים לתכלית ספציפית כלשהי. כולם פותחים במילה השמורה proc ומסיימים ב-run.

כך למשל, לקליטת קובץ חיצוני נשתמש ב-proc import, ולרגרסיה נוכל להשתמש ב-proc reg. מיון הנתונים יתבצע בעזרת proc sort, וקוד SQL ייכנס תחת proc sql.

להמחשה, להדפסת הטבלה נוכל להשתמש ב-proc print, בצורה הבאה:

proc print data=new_table; run;

קיימות אפשרויות רבות עבור כל proc, ולכל אחד מהם קיים פרוטוקול ייחודי משלו. כולם מתפרסמים באתר SAS.

 הצגת הנתונים 
SAS היא שפה שנועדה לנתונים, וקיימות בה אפשרויות רבות להצגת נתונים, טבלאות, גרפים, מדדים סטטיסטיים, ועוד שימושים רבים נוספים. 

פקודה להצגת נתונים תפתח לרוב קובץ HTML ואליו תדפיס את הנתונים שנדרשו. ניתן גם להעביר אותם לתוכנות נוספות, כדוגמת excel.

הנה דוגמה לשימוש בתהליך SAS שנקרא proc tabulate להצגת מדדים סטטיסטיים, הכוללים סכום וממוצע לפי קטגוריות (פרוטוקול התהליך כולו מופיע באתר SAS)

proc tabulate data=new_table;
class A E;
var B;
table A, sum*B mean*B;
run;בדוגמה זו הגדרנו ל-SAS את משתנים A ו-E כמשתנים קטגוריאלים, ואת משתנה B כמשתנה נומרי מדיד. לאחר מכן דרשנו טבלה המראה את הסכום והממוצע של משתנה B, עבור כל קטגוריה במשתנה A.

דרישה שהיא בלתי הגיונית מבחינה סטטיסטית (למשל, ממוצע של משתנה קטגוריאלי) תעלה הודעת שגיאה.

אין חובה להשתמש בכל המשתנים שהוגדרו. כך למשל, משתנה E לא בא כאן לידי ביטוי.

ניתן להוסיף טבלאות נוספות ופקודות נוספות לפני פקודת run.

שפת מאקרו

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

דרך פשוטה להגדיר משתנה מאקרו (משתנה זה איננו עמודה בטבלה) היא כך:
%let A = 2 ;

בדוגמה זאת, ערכו של האובייקט A הוא 2.

הגישה למשתני מאקרו היא בעזרת התג &. למשל, כדי להדפיס את A יש לכתוב:
%put &A ;

ההדפסה עצמה תתבצע בחלק סביבת העבודה שנקרא LOG.

פונקציה מוגדרת בעזרת המילה השמורה macro ומסתיימת במילה mend. ניתן להגדיר משתנה מקומי (לוקאלי) בפונקציות SAS, והגישה אליו היא בעזרת התג &. למשל:
%macro func (argument);
%put %eval ( &argument. + 10) ;
%mend;

פונקציה זו מדפיסה (PUT) את הארגומנט לאחר שהיא מחשבת ומוסיפה לערכו 10.

כדי להפעיל את הפונקציה, נקרא לה בצורה הבאה:%func (5)

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

 מערכים ולולאות 

ב-SAS ניתן להגדיר מערך (array) בעזרת המילה השמורה array, ואחריה מופיעים הממדים בסוגריים מסולסלות. כלי זה משמש פעמים רבות להגדרת משתנים רבים בבת אחת. למשל:data work.example;
array a{3} a1-a3;
run;

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

לולאה תתחיל בפקודה DO ותיגמר בפקודה END

הנה דוגמה להמחשת לולאת while המתרחשת בתוך טבלה שאיננה קיימת:data _null_;
n=0;
do while(n<10);
put n=;
n = n+1;
end;
run;

דוגמה להמחשת לולאת for בתוך פקודת מאקרו:%macro for_loop;
%do i=1 %to 10;
%put &=i;
%end;
%mend;

%for_loop

קישורים חיצוניים
מרכז העזרה והתיעוד של SAS

 הערות שוליים 

קטגוריה:שפות תכנות