בפלטפורמה החדשה של SAS הנקראת SAS Viya קידוד בררת המחדל הינו UTF8. הרעיון בגדול הוא לאפשר תמיכה בכל השפות האפשריות זו זמנית. גם בגרסה 9.4 ניתן לעבוד בקידוד UTF8 למעוניינים בכך.
השאלה המתבקשת הינה מה המשמעות של מעבר לכתיבת קוד בקידוד UTF8?
ובכן, עבור השפה העברית (וכמובן זה נכון גם לשפות אחרות) המשמעות היא שהמחרוזות שאנו שומרים בתוך קבצי SAS יהיו ארוכות יותר כי נדרשים יותר בתים (bytes) לצורך קידוד האותיות. אם בקידוד ASCII "רגיל" כמו HEBREW נדרש בית אחד לייצוג באותיות בעברית הרי שב UTF8 נדרשים שני בתים.
המשמעות המיידית היא שיש להיזהר עם פונקציות שמטפלות במחרוזות ולוודא שהפונקציות שאנו משתמשים בהן מודעות לעובדה זו. לדוגמה מה קורה אם ננסה להריץ את הפונקציה הבאה:
data _null_;
text = "בוקר טוב";
fletter = substr(text,1,1);
put fletter=;
run;
במקרה זה כוונתנו היא למצוא את האות הראשונה של המחרוזת "בוקר טוב" אולם כפי שציינתי מקודם האות "ב" תופסת שני בתים ולא בית אחד ואז השאלה היא האם הפונקציה substr מודעת לזה או לא. התשובה המפתיעה היא דווקא "לא" והפונקציה תחזיר חצי אות שזה פשוט ג'יבריש.
הפתרון הוא לעבור ולהשתמש בפונקציות שהן מודעות לנושא ויש סדרה שלמה של פונקציות כאלה שנקראות "פונקציות k" מהסיבה הפשוטה שהן מתחילות באות "k" כגון ksubstr, klength וכד'.
למידע נוסף ראו את המאמר החשוב הבא: https://support.sas.com/resources/papers/proceedings18/1902-2018.pdf
יש לשים לב שלאור העובדה שאותיות בעברית דורשות שני בתים ולא בית אחד זה אומר שבמעבר ל UTF8 יש להכפיל אורכים של שדות בקוד וגם יש לטפל בקבצי SAS קיימים שמוסבים ל UTF8 על ידי הכפלת אורכי שדות ה CHAR בקבצים. למזלנו יש לנו כלי נוסף שיכול לעזור לנו בהסבת קבצי SAS והוא מנוע ה CVP ואופציית ה encoding= בפקודת ה Libname. להלן דוגמה של קוד המסב קובץ SAS לקידוד UTF8 תוך כדי הכפלת אורכי השדות:
libname src cvp "<path>" cvpmultiplier=2;
libname oututf8 "<path>" encoding=utf8;
data oututf8.<table>;
set src.<table>;
run;
אייל