לפני חמישה שבועות דיברנו קצת על פונקציות גיבוב – hashing – ב – SAS והראנו דוגמא לשימוש בפונקציה MD5 שהיא אחת מהיותר ותיקות בתחום הזה.
אם במקרה אתם משתמשים ב – SAS בגירסא 9.4M6 או חדשה יותר אז המתכנתים החרוצים של SAS הוסיפו לנו מגוון רחב של אלגוריתמים ופונקציות hash נוספות שיכול להיות ויהיו לנו שימושיות.
אני מניח שהשאלה הראשונה היא "איך יודעים איזו גירסת SAS יש לי?". ובכן, יש כמה אפשרויות ביניהן משתנה המאקרו המובנה SYSVLONG (או SYSVLONG4) שמראה לנו את זה:
%put &=SYSVLONG;
* In the log we get this: SYSVLONG=9.04.01M6P111518;
* Note the M6 = Maintenance version 6;
או ה – proc הלא מתועד (מרגישים אמיצים?) proc product_status שמחזיר לנו בלוג, בין השאר, את זה:
proc product_status;
run;
אחרי שבדקנו ויש לנו לפחות את גירסא 9.4M6 הגיע הזמן לראות כמה דוגמאות.
הפונקציה HASHING מאפשרת לנו ליצר hash של מחרוזת כלשהי במגוון אלגוריתמים, כולל החבר שלנו MD5 ולקבל את התוצאה ישירות בייצוג הקסאדצימלי (לא יודעים על מה אני מדבר? הסברים פה )
data _null_;
length
My_Hash_MD5
My_Hash_SHA256 $64;
my_hash_md5=hashing('md5', 'my very long string');
put my_hash_md5=;
my_hash_sha256=hashing('sha256', 'my very long string');
put my_hash_sha256=;
run;
לעיתים אנחנו רוצים להשוות בין שני קבצים לראות האם הם זהים בדיוק. דרך פשוטה לבצע את זה היא ע"י הפונקציה HASHING_FILE:
proc export
data=SASHELP.CLASS
label
outfile="%sysfunc(pathname(work))\class1.csv"
dbms=csv
replace; * Note the LABEL option;
run;
proc export
data=SASHELP.CLASS
outfile="%sysfunc(pathname(work))\class2.csv"
dbms=csv
replace;
run;
data _null_;
length
File_Hash1
File_Hash2 $32;
File_Hash1=hashing_file('md5', "%sysfunc(pathname(work))\class1.csv");
put File_Hash1=;
File_Hash2=hashing_file('md5', "%sysfunc(pathname(work))\class2.csv");
put File_Hash2=;
if File_Hash1=File_Hash2 then put "*** The files are identical ***";
else put "*** The files are different! ***";
run;
רשימה מלאה של כל הפונקציה ב – SAS שקשורות לנושא ה – hashing ניתן למצוא בעמוד הזה.
חגי