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