BookmarkSubscribeRSS Feed
Hagay
SAS Employee

לפני שלושה שבועות שהתחלנו לדבר על מערכים ציינתי שלוש נקודות שחשוב לזכור בנוגע למערכים ב -  SAS:

* ב – SAS מערך הוא פשוט אוסף של עמודות בטבלה ולא אובייקט בפני עצמו.

* בניגוד לשפות תכנות אחרות, מערכים ב – SAS מתחילים ב – 1 ולא ב – 0.

* כל העמודות במערך חייבות להיות מאותו סוג כלומר נומריות או טקסטואליות. לא ניתן לערבב במערך אחד עמודות מסוגים שונים.

 

לפני שבועיים ראינו שלמעשה נקודה 2 נכונה רק חלקית – מערכים ב – SAS מתחילים ב – 1 בברירת המחדל אבל למעשה אנחנו יכולים לבקש מ – SAS להתחיל את מספר התאים במערך מכל מספר שהוא, כולל 0.

 

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

מבוסס על עמודות כלשהן.

 

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

data CARS; * No un-needed columns in our output table;
	set SASHELP.CARS end=last;
	array cyls{0:10} _TEMPORARY_ (11*0); * We also initilize the array with 0 in all the cells;

	if cylinders=. or cylinders>10 then cyls[0]+1; * Values in temporary arrays are also automatically retained between rows;
	else cyls[cylinders]+1;

	* Printing the results when we reach the last row in the table;
	if last then do; 
		do i=0 to hbound(cyls);
			put cyls[i]=;
		end;
	end;
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
  • 560 views
  • 2 likes
  • 1 in conversation