שלום,
כאשר אנחנו משתמשים במנוע ה – Data Step של SAS לעבד טבלת נתונים אנחנו עובדים בכל פעם רק על רשומה אחת מהטבלה. בשבריר הזמן שחולף בין שמירת הרשומה שהרגע סיימנו לעבד אותה לטבלת הפלט (הטבלה שמופיעה לאחר המילה data) וקריאת הרשומה הבאה בתור מטבלת הקלט (הטבלה שמופיעה לאחר המילה set) המערכת מנקה את שולחן העבודה כך שכל רשומה תזכה למלוא תשומת הלב לה היא ראויה.
אולם לעיתים אנחנו דווקא כן צריכים לזכור מה קרה ברשומות קודמות כדי לבצע את החישובים הנדרשים עבור הרשומה הנוכחית. בדיוק לשם כך SAS סיפקה לנו את הפונקציה LAG. במקרים שכאלו יש, כמובן, חשיבות לסדר של הרשומות ולכן אנחנו קודם רוצים למיין את הטבלה בסדר הנדרש:
proc sort data=sashelp.class out=class_sorted;
by weight;
run;
אם אנחנו רוצים לחשב ממוצע נע של הרשומה הנוכחית והרשומה הקודמת:
data CLASS_LAG1;
set CLASS_SORTED;
P_Height=lag(height);
Avg_Height=mean(height,p_height);
run;
כמובן שאנחנו לא מוגבלים רק לרשומה הקודמת. אנחנו יכולים לבקש מ – SAS להסתכל אחורה כמה שאנחנו צריכים. שימו לב שמספר הרשומות אחורה הוא לא פרמטר לפונקציה LAG אלא ממש חלק מהשם שלה. לשם קיצור ניתן לכתוב LAG1 ללא ה – "1" אבל עבור כל מספר אחר אנחנו צריכים לכתוב אותו במפורש:
data CLASS_LAG2;
set CLASS_SORTED;
Height1=lag1(height);*LAG1=LAG;
Height2=lag2(height);
Height3=lag3(height);
run;
אני בטוח ש - 95.68% (בערך) מהקוראים שואלים עכשיו את עצמם האם יש מגבלה כלשהי למספר הרשומות אחורה שאנחנו יכולים לבקש מ – SAS אז התשובה היא שאין מגבלה מובנית. המגבלה היחידה היא כמות הזיכרון (RAM) הזמין על המחשב שלנו וכיום לא אמורה להיות לנו בעיה גם לבקש lag346968 אם זה מה שאנחנו צריכים.
אכן זה נושא קצת מורכב אבל עדיין לא סיימנו עם הבאLAGאן הזה. ננוח קצת ונמשיך בשבוע הבא.
חגי