BookmarkSubscribeRSS Feed
Hagay
SAS Employee

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

SAS_Version.JPG

אחרי שבדקנו ויש לנו לפחות את גירסא 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 ניתן למצוא בעמוד הזה.

 

חגי

SAS Innovate 2025: Call for Content

Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!

Submit your idea!

Discussion stats
  • 0 replies
  • 307 views
  • 2 likes
  • 1 in conversation