BookmarkSubscribeRSS Feed
Hagay
SAS Employee

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

 

מעבר להקלדה המתישה לפעמים אנחנו צריכים או רוצים שהפורמטים שלנו יהיו יותר דינמיים כך שאנחנו לא יודעים בעת כתיבת הקוד את כל הערכים האפשריים שנתקל בהם אי פעם.

 

האנשים הנחמדים ב - SAS פתרו לנו את שתי הבעיות הללו בכך ש – PROC FORMAT מאפשר לנו לייצר פורמט מטבלת נתונים. אומנם הטבלה צריכה להיות במבנה מסוים אבל בטבלאות אנחנו כבר מומחים.

 

האופציה הרלוונטית היא cntlin (קיצור של control in) והיא מקבלת את שם הטבלה שמכילה את הפורמט שלנו. בצורתה הפשוטה ביותר הטבלה הזו צריכה להכיל עמודה אחת בשם start שמכילה את הערך הערך אותו אנחנו רוצים תרגם, עמודה בשם label המכילה את הערך אליו אנחנו מתרגמים, כלומר מה שהפורמט יחזיר לנו ועמודה שלישית בשם fmtname שמכילה את שם הפורמט. קצת קוד להמחשה.

 

נניח ויש לנו טבלה אשר מכילה את התרגום של המגדר שאנחנו רוצים להפוך לפורמט. הטבלה נראית כך:

data DIM_GENDER;
	length
		Gender_CD	$1
		Gender_NM	$8;
	input gender_cd gender_nm;
datalines;
M זכר
F נקבה
;
run;

כדי להפוך אותה לטבלת מקור לפורמט אנחנו צריכים קצת לשחק איתה. אפשר לעשות את זה ב - data step או בעזרת PROC SQL אבל בכל מקרה לא משהו מסובך מידי:

data GENDER_FMT;
	set DIM_GENDER(rename=(gender_cd=start gender_nm=label));
	retain fmtname '$gender'; * Note the dollar sign before the format name. Used to tell SAS this format convert from string to string;
run;

השלב האחרון הוא להפוך את הטבלה שלנו לפורמט בעזרת PROC FORMAT:

proc format cntlin=GENDER_FMT;
run;

והוכחה שזה עובד:

proc freq data=SASHELP.CLASS;
	table sex;
	format sex $gender.;
run;

חגי