BookmarkSubscribeRSS Feed
Hagay
SAS Employee

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

 

פונקציה אחת בשם max קיימת ב – proc sql והיא מחזירה את המקסימום של משתנה מסוים מבין כלל הרשומות (שורות) הרלוונטיות. הפונקציה השניה באותו שם בדיוק גרה ועובדת ב – data step והיא מחזירה את הערך הגבוה ביותר מבין מספר עמודות. אותה כפילות מבלבלת לעיתים קיימת גם עבור הפונקציה min

 

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

 

במידה והנתונים שלנו הן בשורות – כלומר אנחנו צריכים להביא את הרשומה עם הערך השני או השלישי או whatever הכי גדול אז ישנן מספר פתרונות. אפשר, כמובן להשתמש ב – proc sort ואז במשתנה האוטומטי _n_ שסופר שורות:

proc sort data=SASHELP.CLASS out=CLASS_SORT;
	by descending weight;
run;

data CLASS_SORT_N_LARGEST;
	set CLASS_SORT;
	if _n_=4; * Note that Janet has the same weight. Whom we get is a little random unless we will add others, ties breaking, columns in the sort;
run;

אם אנחנו רוצים להיות קצת שונים אפשר להשתמש גם ב – proc rank אבל, יש לקחת בחשבון, שבמקרה של תיקו, כלומר מספר רשומות המכילות את אותו ערך נקבל מספר רשומות כתשובה.

proc rank data=SASHELP.CLASS out=CLASS_RANK ties=dense descending; * The DENSE option for the TIES argument gives the same value for all the tied records;
	var weight;
	ranks Weight_Rank;
run;

data CLASS_RANK_N_LARGEST;
	set CLASS_RANK;
	where weight_rank=4;
run;

אם אנחנו צריכים למצוא את הערך השני או השלישי הכי גבוה מבין מספר עמודות אז כאן באה לעזרתנו הפונקציה largest (ואחותה התאומה smallest😞

data N_COLUMN;
	set SASHELP.PRICEDATA;
	Largest4=largest(4, of price:);
	Largest10=largest(10, of price:);
	Smallest5=smallest(5, of price:);
run;

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

 

חגי

SAS Innovate 2025: Call for Content

Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!

Submit your idea!

Discussion stats
  • 0 replies
  • 317 views
  • 1 like
  • 1 in conversation