BookmarkSubscribeRSS Feed
Hagay
SAS Employee

לעיתים אנחנו צריכים לבצע חישובים שונים המבוססים על נתונים סיכומיים של הרשומות שלנו. לדוגמא ההפרש בין הגיל של כל ילד לזה של הילד הצעיר ביותר בטבלה. כמובן שיש מגוון דרכים לבצע את זה אבל 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  אבל לא כללנו בו את כל השדות הרלוונטיים אלא רק את השדה של המגדר ולכן קיבלנו חישוב נפרד של המקסימום לנשים ולגברים.

 

חגי

hackathon24-white-horiz.png

2025 SAS Hackathon: There is still time!

Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!

Register Now

Discussion stats
  • 0 replies
  • 769 views
  • 6 likes
  • 1 in conversation