BookmarkSubscribeRSS Feed
Hagay
SAS Employee

כאשר אנחנו מנתחים מידע אנחנו צריכים, לעיתים, לברר פרטים על המבנה של הנתונים עצמם. למשל, לזהות את כל הטבלאות בתיקיה מסוימת שמופיעה להם בשם המילה "FACT" או לאתר את כל העמודות הנומריות בטבלה שהשם שלהן מסתיים ב – "SUM". מידע שכזה על המבנה של הנתונים נקרא "מטה-נתונים" או metadata.

 

כמו כל דבר ב – SAS יש לנו מספר שיטות למצוא את האינפורמציה הזו אבל השיטה הנוחה ביותר, לטעמי, היא שימוש ב – DICTIONARY TABLES ("דיקצ'ינרי טאבלס" בעברית). מדובר באוסף מיוחד של טבלאות המכילות מגוון רחב של מידע על סביבת ה – SAS שלנו ועל הנתונים שיש לנו. הטבלאות הללו תמיד מעודכנות ומשקפות בדיוק את המצב הנוכחי כיוון שלמעשה, לא מדובר בטבלאות רגילות אלא באובייקטים דינמיים מיוחדים ש –  SAS מייצרת בכל פעם שפונים אליהם.

 

ה – dictionary table הראשונה נקראת TABLES וכצפוי היא מכילה רשימה של כל הטבלאות בכל ה – libname-ים המוגדרים ב – SAS. למשל, אם אנחנו רוצים למצוא את כל הטבלאות ב – sashelp שבשם שלהן מופיע prd נריץ את הקוד הבא:

 

proc sql noprint;
	create table PRD_TABLES as 
	select * 
	from dictionary.tables 
	where libname='SASHELP' and memname like '%PRD%';
quit;

 

מעבר לשמות הטבלאות קיבלנו מגוון נתונים עליהן כגון תאריך העדכון האחרון שלהן, כמות הרשומות בהן, האם מדובר ב – View או בטבלה ועוד. שימוש לב שהמידע המתקבל תלוי איפה יושבת הטבלה. עבור טבלאות שיושבות בבסיס נתונים חיצוני, למשל אורקל או SQL Server, חלק מהמידע, כגון מספר הרשומות או תאריך העדכון לא יהיה זמין.

 

אכן נראה פשוט ומובן אבל ישנן מספר נקודות שכדאי לשים אליהן לב כאשר עובדים עם ה – dictionary tables. הראשונה היא שלמרות שניתן להשתמש גם בדרכים אחרות כדי לקרוא מידע מהטבלאות הללו (למשל ע"י data step) מומלץ לגשת אליהן ע"י PROC SQL כמו שהוצג לעיל שכן דרך זו מאפשרת ל – SAS יישום יעיל יותר של הסינונים ויכולה לשפר משמעותית את זמני השליפה, במיוחד עם עובדים עם libnames שכוללים בתוכם מספר גדול מאוד של טבלאות (למשל libname לבסיס נתונים של Oracle המכיל אלפי טבלאות של מחסן הנתונים הארגוני). נקודה שניה היא שה – libname ושם הטבלה (מופיע בעמודה memname כלומר member name) תמיד מופיעים באותיות גדולות.

 

טבלת dictionary שימושית נוספת היא COLUMNS שמכילה את שמות כל העמודות בכל הטבלאות בכל ה – libnames ולכן חשוב שבעתיים לעשות שימוש בכל הסינונים שאנחנו יכולים כאשר אנחנו מבקשים ממנה קצת מטאדאטה:

 

proc sql noprint;
	create table NAME_COLUMNS as 
	select * 
	from dictionary.columns 
	where libname='SASHELP' and memname='PRICEDATA' 
		and upcase(name) like '%NAME' and type='char';
quit;

 

 

יש עוד מגוון טבלאות שכאלו, למשל טבלת dictionary בשם OPTIONS מכילה את ההגדרות הנוכחיות של ה – SAS איתה אנחנו עובדים, טבלת FORMATS מכילה רשימה של הפורמטים ואם אתם רוצים את הרשימה המלאה של כל טבלאות ה – dictionary הקיימות אך הגיוני למצוא אותה בטבלת DICTIONARIES:

proc sql noprint;
	create table DICTS as
	select * 
	from dictionary.dictionaries;
quit;

 

חגי