BookmarkSubscribeRSS Feed
EyalGonen
Lapis Lazuli | Level 10

שלום לכולם

 

ברצוני לעדכן את משתמשי סאס בישראל על האפשרויות שעומדות לרשותכם לעבודה עם תאריכים עבריים/יהודיים בסאס

 

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

 

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

hdate

hebdate

הראשון מציג את התאריך הלועזי בעברית ואילו השני מציג את התאריך הלועזי לפי לוח השנה העברי.

 

sample_hebdate_code.png

 

הרעיון המרכזי של הבלוג הזה עלה בראשי לאחר שקראתי את המאמר הבא מכנס סאס שנערך באולרנדו ארה"ב: http://support.sas.com/resources/papers/proceedings12/040-2012.pdf
 
הרעיון מבוסס על הקוד במאמר ומראה כיצד ניתן לבנות לוח שנה עברי ואז להשתמש בפונקציות פנימיות של סאס תוך שימוש בלוח השנה הזה.
 
להלן הקוד ודוגמה לשימוש (הקוד כטקסט יופיע בסוף הבלוג לנוחיותכם):

 

find_next_heb_month.PNG

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

 

 

הקוד

אזהרה: הקוד לא נבדק בצורה יסודית ולכן אין להשתמש בו כפי שהוא בסביבת ייצור ללא בדיקות נוספות


/* first run code from http://www.sascommunity.org/mwiki/images/d/da/Hebrew_islamic_dates.sas */

data jmonths;
   do year = 2000 to 2100;
      do i = 1 to 12;
         yi = ifn(7<=i<=12,1,0);
         begin = hebrew_to_sd(year+3760+yi,i,1);
         end = begin + hebrew_month_days(year+3760+yi,i) - 1;
         season = ifn(i+6<=12,i+6,mod(i+6,13)+1);
         output;
      end;
   end;
   keep begin end season;
   format begin end ddmmyy10.;
run;
 
options intervalds=(JewishMonths=jmonths);

/* sample usage  - find the next rosh hodesh */

data _null_;
   njm = intnx("JewishMonths",today(),1);
   put njm= ddmmyy10.;
run;
 
/* sample usage  - how many jewish months till the end of the year */

data _null_;
   njm = intck("JewishMonths",today(),mdy(12,31,year(today())));
   put njm=;
run;
 
6 REPLIES 6
Shmuel
Garnet | Level 18

אני משתמש  כגמלאי ולהנאתי, ב SAS-UE  תחת וונידוס 10.

כשהפעלתי פורמטים jdate, hdate התקבלו תווים בלתי קריאים.

זיהיתי את הצירוף ההקסדדצימאלי ויצרתי טבלת תרגום - מצ"ב - ומותאמת לצורכי תרגום התאריכים העבריים (לא כולל כל התווים). התרגום מחייב לולאה ליצירת שדה מתורגם שהוא גדול עד פי 2 משדה המקור שכן כל תו עברי מתורגם ליצירוף של שני בתים.

 

גם לאחר התרגום הסתבר שצריך להפוך כוון מ LTR ל- RTL לקריאה.

הפורמט $revers אינו פועל נכון בשימוש בקוד המורכב מ 2 בתים ( TWO-BYTES UTF), ונאלצתי ליצור לולאה להיפוך הטקסט.

 

נא ראה גם פוסט:

https://communities.sas.com/t5/SAS-Programming/How-to-force-order-of-nums-and-2-bytes-utf-string/m-p... 

האם option bidi=yes אמור לפתור בעייה זו? אנסה ואבחן בעצמי ויידע תחת אותו קישור.

 

ובאותו הקשר - דומני שהיה פורמט לשימוש תחת וונידוס לציין תצוגה לוגית או ויזואלית. האם תוכל להזכיר לי את שמות הפורמטים.

EyalGonen
Lapis Lazuli | Level 10

שלום שמואל,

 

אני בודק את הנושא ואעדכן. לדעתי הפורמטים הללו עובדים תקין רק ב single byte encoding ולא ב UTF8

אני מניח שב SAS UE אתה עובד עם encoding=UTF8 

האם תוכל לאשר?

Shmuel
Garnet | Level 18

נכון, SAS UE מדמה עבודה ב לינוקס (?) והקוד העברי, כברירת מחדל, הוא UTF8

EyalGonen
Lapis Lazuli | Level 10

הפורמטים עובדים תקין כאשר סאס עולה בקידוד עברי "רגיל" של WHEBREW

משום מה הם אינם עובדים תקין בקידוד UTF8

זה משהו שאצטרך לבדוק פנימית ולעדכן

הרוב המכריע של הלקוחות בישראל עובדים בקידוד WHEBREW הקוד אמור לעבוד תקין אצלם 😉

 

Shmuel
Garnet | Level 18

אני מניח שמרבית משתמשי SAS משתמשים בגרסה בהתקנה מקומית ולא ב SAS UE.

כפי שהזכרתי, השימוש ב SAS UE פועל ב virtual machine כנראה עם לינוקס

ולכן העברית בקוד UTF8.

EyalGonen
Lapis Lazuli | Level 10

קידוד UTF8 אינו ייחודי ללינוקס, הוא קיים גם ב SAS על Windows.

בלי קשר זה אמור לעבוד גם עם קידוד UTF8 ולכן אבדוק את זה. תודה שהבאת את זה לתשומת לבי.

 

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
  • 6 replies
  • 1454 views
  • 3 likes
  • 2 in conversation