BookmarkSubscribeRSS Feed
Hagay
SAS Employee

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

 

לדוגמא, אם יש לנו טבלה המכילה 16  עמודות בשם price1  עד price16 שמייצגים את המחיר של מוצר מסויים לאורך ארבעה רבעונים של ארבע שנים יהיה לנו הרבה יותר נוח לבצע את החישובים שלנו עליהן אם נגדיר אותם כמערך דו-מימדי שהשנים הם המימד הראשון (נקרא לו השורות) והרבעונים הם המימד השני (נקרא לו העמודות):

data PRICEDATA;
	set SASHELP.PRICEDATA(obs=1);
	array prices{2018:2021, 4} price1-price16;
	put prices[2019,1]=;* The first column of the second row is price5;
run;

SAS ממלא את מטריצת העמודות שלנו שורה שורה. ברגע שהוא סיים לשייך עמודות לשורה הראשונה, הוא מתחיל למלא את השורה השניה וכך הלאה. SAS גם מצפה שכל השורות יהיו מלאות, כלומר אם הגדרנו מערך של 4 שורות על 4 עמודות אנחנו חייבים למפות אליו 16 עמודות מהטבלה שלנו.

 

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

 

נקודה נוספת היא שאנחנו הגדרנו מערך שהאינדקס של אחד המימדים שלו לא מתחיל ב – 1 שהוא ברירת המחדל. לפיכך אם אנחנו רוצים לבצע לולאות על המימד הזה אנחנו יכולים לעשות שימוש בפונקציות LBOUND ו – HBOUND שמחזירות לנו את האינדקס המינימלי והמקסימלי של המימד שלנו:

data PRICEDATA(drop=i);
	set SASHELP.PRICEDATA(obs=1);
	array prices{2018:2021, 4} price1-price16;
	array ratios{2018:2021} ratio_year1-ratio_year4;
	
	r=dim(prices, 1); * Number of rows - dimension 1;
	c=dim(prices, 2); * Number of columns - dimension 2;

	do i=lbound(prices,1) to hbound(prices,1);
		ratios[i]=prices[i,1]/prices[i,4];
	end;

run;

אומנם מערכים רב מימדיים ב – SAS קיימים אבל השימוש בהם לא נפוץ במיוחד אבל כשצריך אז הם יכולים להקל עלינו בעיבוד טבלאות עם מספר רב של עמודות ע"י סידור העמודות בצורה הגיונית יותר.

 

חגי

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
  • 388 views
  • 1 like
  • 1 in conversation