לעיתים אנחנו צריכים לבצע חישובים שונים המבוססים על נתונים סיכומיים של הרשומות שלנו. לדוגמא ההפרש בין הגיל של כל ילד לזה של הילד הצעיר ביותר בטבלה. כמובן שיש מגוון דרכים לבצע את זה אבל SAS מאפשרת לנו לחסוך קצת עבודה ולעשות חישוב שכזה בשאילתת SQL אחת:
proc sql noprint;
create table CLASS_DIFF as
select
*,
age-min(age) as Age_Diff
from
sashelp.class;
quit;
שימו לב שהשתמשנו בפונקציה סיכומית (min) בשאילתה אבל ללא החלק של ה – group by. מבט בלוג מראה ש - SAS שמה לב שמשהו פה מוזר וכתבה לנו את ההערה הזו:
NOTE: The query requires remerging summary statistics back with the original data
אבל במקרה הזה, זה בדיוק מה שרצינו. SAS חישבה את המינימום הטבלאי ו – "מרחה" את הערך שהתקבל על פני כל השורות כך שיכולנו להשתמש בו בחישוב שלנו עבור כל שורה ושורה.
מסתבר שניתן לקחת את זה עוד קצת ולבקש חישוב סיכומי גם עבור תתי קבוצות. למשל:
proc sql noprint;
create table CLASS_WEIGHT_RATIO as
select
*,
weight/max(weight) as Weight_Ratio
from
sashelp.class
group by
sex;
quit;
הפעם כן הוספנו את החלק של ה – group by אבל לא כללנו בו את כל השדות הרלוונטיים אלא רק את השדה של המגדר ולכן קיבלנו חישוב נפרד של המקסימום לנשים ולגברים.
חגי