יום שבת, 21 ביולי 2012

התמזגות, התאחדות, התערבבות

ערכים חסרים (missing) אינם זרים למרבית משתמשי ה – SAS. ב – SAS ערך חסר בעמודה נומרית מיוצג ע"י נקודה ואילו ערך חסר בעמודת טקסט מיוצג ע"י מחרוזת ריקה ("") או מחרוזת המכילה רווח אחד (" "). SAS אפילו מגדילה לעשות ומאפשרת לנו להגדיר 28 סוגים של ערכים נומרים חסרים. למה זה טוב אתם שואלים? ובכן זה מאפשר לנו לציין בצורה פשוטה לא רק שהערך חסר אלא גם את הסיבה לכך. לדוגמא, אם אנחנו מנתחים נתוני סקר ניתן להבדיל בין 'המשתמש לא ענה בכלל', 'המשתמש בחר באפשרות "לא רלוונטי"' ו – "לא הצלחנו להבין מה המשתמש ענה".
הרעיון של "ערך חסר " מונח בבסיס תיאוריית בסיס הנתונים הרלציוני (טבלאי) וכל בסיס נתונים כלשהו מאפשר ייצוג העובדה שתא כלשהו בטבלה איננו מכיל כלום. לרוב בהקשר של בסיסי נתונים ערך חסר מכונה NULL.
לטיפול בערכים חסרים קיימות ב – SAS מספר פונקציות ייעודיות ואחת השימושיות והנחבאות שבהן היא COALESCE. הפונקציה הזו מקבלת פרמטר אחד או יותר ומחזירה את הראשון (משמאל לימין) שהוא לא חסר או NULL. לדוגמא:

data sample;
length n1 n2 8 c1 c2 $1;
input n1 n2 c1 $ c2 $;
infile datalines dsd delimiter=',';
datalines;
1,2,X,Y
.,3,,Z
.,.,,
;
run;

proc print data=sample;
title 'Dataset: SAMPLE';
run;

proc sql;
create table sample_sql as
select
n1,
n2,
c1,
c2,
coalesce(n1,n2,4) as n3,
coalesce(n1,n2) as n4,
coalesce(c1,c2,'T') as c3,
coalesce(c1,c2) as c4
from
sample;
quit;

proc print data=sample_sql;
title 'Dataset: SAMPLE_SQL';
run;

נקודה שצריך לשים לה לב היא שכאשר משתמשים בפונקציה זו בתוך PROC SQL היא יודעת לטפל בערכים נומרים וטקסטואלים כאחד אבל אם אנחנו רוצים להשתמש בה בתוך DATA Step אז היא יודעת לעבוד עם ערכים נומרים בלבד. עבור שדות טקסטואלים צריך לקרוא לאחותה COALESCEC – עם האות C (בשביל character) בסוף. לדוגמא:

data sample_datastep;
set sample;
length n3 n4 8 c3 c4 $1;
n3=coalesce(n1,n2,4);
n4=coalesce(n1,n2);
c3=coalescec(c1,c2,'T');
c4=coalescec(c1,c2);
run;

proc print data=sample_datastep;
title 'Dataset: SAMPLE_DATASTEP';
run;

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

אין תגובות:

הוסף רשומת תגובה