PROC SQL ב – SAS מאפשר לנו להשתמש בשפת ה – SQL לשליפה ועיבוד של נתונים מכל בסיס נתונים שמבין SQL כמו למשל SQL Sever או אורקל כמו גם מטבלאות SAS. למעשה כאשר אנחנו משתמש ב – PROC SQL אנחנו אפילו לא צריכים לדעת מול איזה סוג של בסיס נתונים אנחנו עובדים. SAS מבצעת את ההמרה של קוד ה – SQL שלנו לניב הספציפי של בסיס הנתונים ברגע ההרצה כך שאותו קוד בדיוק שכתבנו לשליפת נתונים מאורקל יעבוד גם מול SQL Server או כל מערכת בסיס נתונים אחרת.
למרות שחלק גדול מאיתנו לא כותבים קוד SQL ידנית אלא משתמשים בכלים כגון SAS Enterprise Guide שמייצרים אוטומטית את הקוד עבורנו מאחורי הקלעים, SAS כוללת כמה קיצורי דרך שימושים שמאפשרים לנו להיות יעילים יותר בעבודה. השבוע אציג שניים מהם – התייחסות לשדות מחושבים שיצרנו מבלי לחזור על החישוב שלהם בחישובים נוספים והיכולות להתייחס לעמודות ע"י המספר שלהן בפקודות ה - group by וה – order by.
היכולת לייצר שדה מחושב ב – SQL היא, כמובן, שימושית מאוד אבל לפעמים אנחנו רוצים להתייחס לשדה מחושב שיצרנו בשדה מחושב נוסף. הדרך הנאיבית היא פשוט לכתוב שוב את החישוב של השדה המחושב הראשון אבל החסרונות של שיטה זו ברורים – הרבה יותר כתיבה של קוד ופתח לשגיאות במקרה של צורך בשינוי החישובים.
אם אנחנו כותבים SQL ב – SAS אנחנו יכולים לפתור את הבעיה הזו ע"י שימוש במילה השמורה calculated כדי להבהיר ל – SAS שאנחנו רוצים להתייחס בחישוב הנוכחי שלנו לשדה מחושב אחר בשאילתה שאנחנו בונים ולא לשדה קיים באחת מטבלאות המקור:
proc sql noprint;
create table CLASS as
select
name,
age,
weight,
height*height as Height2,
(weight / calculated Height2)*703 as BMI
from
SASHELP.CLASS;
quit;
שימו לב שסדר הוספת השדות המחושבים בשאילתה חשוב, כלומר לא ניתן להתייחס לשדה מחושב שמופיע אחרי השדה שקורא לו. זה, למשל, לא יעבוד:
proc sql noprint;
create table CLASS as
select
name,
age,
weight,
(weight / calculated Height2)*703 as BMI,
height*height as Height2
from
SASHELP.CLASS;
quit;
קיצור נוסף הוא האפשרות להתייחס לשדות בשאילתה שלנו ע"י המיקום שלהם בפקודת ה – select כאשר אנחנו צריכים להתייחס אליהם בפקודות ה – group by ו/או ה – order by:
proc sql noprint;
create table CLASS1 as
select
age,
sex,
count(*) as Students
from
SASHELP.CLASS
group by
1,2
order by
3 desc;
quit;
כאן אנחנו צריכים לשים לב שאם אנחנו מעדכנים את השאילתה שלנו ומשנים את סדר השדות ב – select או מוסיפים שדות חדשים שהמספרים עדיין מתייחסים לשדות שאנחנו רוצים להתייחס אליהם.
תודה לאשתי על הרעיון למאמר השבוע *
אם יש לכם רעיונות/בקשות למאמרים עתידיים אשמח לשמוע בהערות.
חגי