برمجة SAS, تحليل البيانات

كيفية استخدام دالة SCAN في SAS (مع أمثلة)


تُعد معالجة السلاسل النصية وضبط هياكل البيانات الحرفية أحد الأعمدة الجوهرية في هندسة البيانات والتحليل الإحصائي المتقدم؛ إذ تُمثل البيانات غير المهيكلة أو شبه المهيكلة نسبة عظمى من المدخلات الرقمية في المؤسسات الحديثة. وتبرز بيئة البرمجة الإحصائية SAS (Statistical Analysis System) كمنظومة رائدة توفر ترسانة متكاملة من الدوال المتخصصة في التعامل مع النصوص، وتفكيك الكتل البيانية المعقدة، وتحويلها إلى متغيرات تحليلية قابلة للنمذجة والقياس. ومن بين هذه الأدوات البرمجية، تتربع دالة SCAN على قمة دوال الفرز والتجزئة النصية بفضل مرونتها الفائقة وقدرتها على استخلاص المقاطع الفرعية من النصوص بالاعتماد على محددات مكانية أو فواصل بنيوية.

يتطلب التعامل مع البيانات الواقعية، مثل الأسماء المركبة، والعناوين الجغرافية، والرموز التشخيصية الطبية، وسجلات العمليات المالية، أدوات برمجية تتجاوز الاقتطاع الثابت المعتمد على أرقام الخانات الموضعية المجردة. وتأتي دالة SCAN لتلبي هذا الاحتياج من خلال قراءة النصوص كسلسلة من “الكلمات” أو “الوحدات الدلالية” (Tokens) المفصولة بفواصل محددة، مما يتيح للمحلل استرجاع الكلمة المطلوبة بدقة متناهية بغض النظر عن تباين أطوال النصوص الفردية داخل عمود البيانات الواحد. ويوفر هذا النهج مرونة تشغيلية واستقراراً برمجياً يحمي خطوط معالجة البيانات (Data Pipelines) من أخطاء الإزاحة النصية الشائعة.

يهدف هذا الدليل الشامل والمفصل إلى تقديم دراسة معمقة وتطبيقية لدالة SCAN في بيئة SAS، بدءاً من تفكيك بنيتها التركيبية ومعاملاتها الإلزامية والاختيارية، مروراً بآليات إدارة الفواصل والمؤشرات الموجبة والسالبة، وصولاً إلى استراتيجيات إدارة الذاكرة، والتكامل مع لغة الماكرو، واستعراض أفضل الممارسات المتبعة في بيئات الإنتاج الضخمة. وسيتناول المقال الجوانب النظرية والتطبيقية بأسلوب أكاديمي دقيق مدعوماً بالأمثلة التوضيحية والتحليلات المقارنة مع دوال المعالجة النصية الأخرى.

1. مقدمة شاملة لدالة SCAN في لغة البرمجة الإحصائية SAS

1.1 مفهوم دالة SCAN ودورها في تنقية البيانات النصية

تُعرف دالة SCAN في منظومة SAS البرمجية بأنها دالة معيارية متخصصة في تجزئة النصوص وتفكيك السلاسل الحرفية المركبة إلى مكوناتها الأساسية اعتماداً على فواصل محددة، وهي عملية حوسبية تُعرف تقنياً بمصطلح String Tokenization. تعمل الدالة عبر مسح السلسلة النصية المدخلة، وتحديد مواقع الفواصل الافتراضية أو المخصصة، ثم استخراج الكلمة أو المقطع الذي يقع في ترتيب عددي معين يحدده المبرمج. وتكتسب هذه العملية أهمية قصوى في مراحل هندسة وإعداد البيانات (Data Preparation)؛ حيث نادراً ما تصل البيانات الخام بصيغ متطابقة أو منسقة كلياً.

تتجلى الأهمية الاستراتيجية لدالة SCAN في مسار تنظيف البيانات (Data Cleaning)، حيث تسهم في تحويل المدخلات النصية المزدحمة إلى أعمدة مستقلة ومنظمة؛ مما يمهد لبناء جداول بيانات قياسية تخضع لشروط النموذج العلائقي. وعلى النقيض من عمليات المعالجة اليدوية التي تتطلب جهداً بشرياً مضنياً وتكون عرضة للأخطاء الفادحة، تتيح الأتمتة عبر دالة SCAN معالجة ملايين السجلات في ثوانٍ معدودة وبدقة متناهية. إن الانتقال من المعالجة التقليدية إلى المعالجة المؤتمتة باستخدام دوال SAS يعزز كفاءة التحليل الإحصائي، ويقلل التباين في جودة البيانات المستخرجة، ويوفر بيئة عمل تتسم بالموثوقية وقابلية التكرار البرمجي.

1.2 المجالات التحليلية والتطبيقية لدالة SCAN

تتعدد التطبيقات العملية لدالة SCAN عبر شتى القطاعات الحيوية التي تعتمد على تحليلات SAS المتقدمة. ففي قطاع الرعاية الصحية والتحليلات السريرية الخاضعة لمعايير منظمة الأغذية والأدوية الأمريكية (FDA)، تُستخدم الدالة لتفكيك رموز التصنيف الدولي للأمراض (ICD-10) المركبة، وفصل الجرعات الدوائية عن وحدات القياس المرتبطة بها في السجلات الطبية الإلكترونية. كما تبرز الدالة كعنصر جوهري في معالجة السجلات الجغرافية، مثل تفكيك العناوين البريدية لاستخراج أسماء الشوارع، والمدن، والرموز البريدية المدمجة في حقل نصي واحد دون فواصل ثابتة الطول.

علاوة على ذلك، تلعب دالة SCAN دوراً محورياً في هندسة المعرفات الرقمية المركبة في القطاع المصرفي؛ حيث تُجزأ أرقام الحسابات البنكية الدولية (IBAN) أو سجلات المعاملات المشفرة لاستخراج أكواد الفروع ورموز العمليات. وتتكامل هذه الدالة بسلاسة مطلقة داخل خطوات بناء البيانات DATA Step، كما يمكن استدعاؤها ضمن الإجراءات الإحصائية المختلفة مثل PROC SQL وPROC REPORT، مما يجعلها أداة مرنة حاضرة في كافة مفاصل التحليل والاستخلاص البياني.

2. البنية التركيبية (Syntax) والمعاملات الأساسية لدالة SCAN

SCAN function in SAS
SCAN function in SAS

2.1 الصيغة العامة والمعاملات الإلزامية

تعتمد دالة SCAN في بيئة SAS على صيغة رياضية وبرمجية محددة تتكون من معاملات إجبارية تحدد مسار المعالجة، وأخرى اختيارية تضبط سلوك الفرز والتقسيم. وتُصاغ الدالة بصورتها القياسية على النحو التالي: نكتب اسم الدالة متبوعاً بقوسين يحتويان على المعاملات مفصولة بفواصل، وتتمثل في السلسلة النصية المراد معالجتها أولاً، ثم الموضع العددي للكلمة المستهدفة ثانياً، يليهما محددات الفواصل والخصائص الإضافية كمعاملات تكميلية.

المعامل الأول هو السلسلة النصية (String / Text Expression)، ويمثل المتغير الحرفي أو التعبير النصي الثابت الذي يراد تفكيكه والبحث بداخله. يمكن أن يكون هذا المعامل اسماً لمتغير موجود مسبقاً في جدول البيانات، أو نصاً صريحاً موضوعاً بين علامات تنصيص مفردة أو مزدوجة، أو ناتج دالة نصية أخرى متداخلة. أما المعامل الثاني الإلزامي فهو ترتيب الكلمة (Count / Nth Word)، وهو رقم صحيح يحدد موقع الكلمة المطلوبة بدقة داخل السلسلة؛ حيث تشير القيمة واحد إلى الكلمة الأولى، والقيمة اثنان إلى الكلمة الثانية، وهكذا دواليك باتجاه تقدمي من اليسار إلى اليمين.

2.2 المعاملات الاختيارية ومحددات الفواصل (Delimiters)

إلى جانب المعاملات الإلزامية، تتيح دالة SCAN استخدام المعامل الثالث الذي يُعنى بتحديد الفواصل المخصصة (Custom Delimiters). إذا لم يقم المبرمج بتحديد هذا المعامل، فإن SAS تعتمد على قائمة الفواصل الافتراضية للنظام. ويتيح هذا المعامل إدخال رمز واحد أو مجموعة متتالية من الرموز (مثل النقطتين الرأسيتين، أو الشُرط المائلة، أو علامات الترقيم الخاصة) لتعتمدها الدالة كحدود فاصلة بين الكلمات.

أما المعامل الرابع، والذي تم تضمينه في الإصدارات الحديثة لمنظومة SAS (بدءاً من SAS 9)، فهو معامل التعديل والخصائص (Modifiers). يُستخدم هذا المعامل للتحكم في كيفية قراءة الفواصل والسلاسل النصية؛ ومن أبرز هذه المعدلات الحرف i لتجاهل حالة الأحرف الإنجليزية (Case Insensitivity)، والحرف r لمعاملة الرموز المحددة كفواصل حرفية دون دمج، والحرف t لاقتطاع المسافات البادئة واللاحقة من النتيجة المستخرجة. وفي حال غياب هذه المعاملات الاختيارية، تتبع الدالة السلوك المعياري الافتراضي الذي يعامل أي تكرار متتالي للفواصل الافتراضية كفاصل فردي واحد، مما يضمن تدفقاً سلساً للبيانات دون توليد قيم فارغة غير مرغوب فيها.

3. آلية عمل محددات النصوص (Delimiters) الافتراضية والخاصة

3.1 المحددات الافتراضية المعتمدة في بيئة SAS

عند استدعاء دالة SCAN دون تمرير المعامل الثالث الخاص بالفواصل، تقوم بيئة SAS تلقائياً بتطبيق جدول المحددات الافتراضية المعياري. يشمل هذا الجدول مجموعة واسعة من رموز الترقيم والفراغات الأكثر استخداماً في النصوص اللاتينية والمعالجات الإحصائية، ومن أبرزها: المسافة الفارغة (Blank Space)، والنقطة (Period)، والفاصلة العادية (Comma)، والأقواس الدائرية والمربعة، وعلامات التعجب والاستفهام، والشرطات الأفقية والمائلة، والرموز الحسابية مثل علامة الجمع والطرح والضرب والمساواة.

تتميز آلية المعالجة الافتراضية بقدرتها الذكية على التعامل مع الفواصل المتتالية (Consecutive Delimiters)؛ فعند وجود مسافات متعددة أو فواصل متكررة وراء بعضها البعض، تقوم الدالة بدمجها ضمنياً واعتبارها فاصلاً واحداً فقط، مما يمنع احتساب الفراغات البينية ككلمات خالية أو مفقودة. ومع ذلك، يجب على محلل البيانات الانتباه إلى الفروق الدقيقة في جداول الرموز وترميز المحارف عبر بيئات التشغيل المختلفة؛ إذ قد تختلف قراءة بعض الرموز غير المطبوعة (Non-printable characters) بين بيئات تشغيل خوادم Linux/UNIX وبيئات محطات عمل Windows، مما يقتضي اختبار الكود بدقة عند نقل مسارات التحليل بين أنظمة تشغيل متباينة.

3.2 تخصيص الفواصل للبيانات غير النمطية

في كثير من السيناريوهات التحليلية المعقدة، تتضمن البيانات مدخلات غير تقليدية تتطلب تجاوز المحددات الافتراضية وتعيين فواصل مخصصة بدقة متناهية. على سبيل المثال، قد تحتوي سجلات مسارات الويب أو أسماء الملفات على الشُرط المائلة أو الفواصل المنقوطة أو الشرطات السفلية، وفي هذه الحالة يتم تمرير هذه الرموز المحددة نصياً ضمن المعامل الثالث للدالة لضمان عدم تجزئة النص عند المسافات الفارغة التي قد تكون جزءاً أصيلاً من اسم الكيان.

تتيح الدالة تمرير سلسلة تحتوي على عدة فواصل مخصصة في آنٍ واحد، كأن نحدد الفاصلة والشرطة والنقطتين الرأسيتين معاً. وعندما تتداخل الفواصل داخل السلسلة الواحدة، تُطبق SAS مبدأ الأولوية الموضعية؛ حيث يُعتبر أي رمز من الرموز المحددة بمثابة نقطة انقطاع فورية تفصل بين الكلمة الحالية والكلمة اللاحقة. يمنح هذا السلوك المبرمجين تحكماً مطلقاً في هندسة النصوص المعقدة، ويتيح تفكيك الهياكل المتشابكة مثل سلاسل الترميز الجيني أو سلاسل لغة JSON البسيطة دون الحاجة إلى اللجوء لمكتبات خارجية.

4. الطريقة الأولى: استخراج الكلمة النونية (Nth Word) من سلسلة نصية

4.1 استخراج الكلمة الأولى والكلمات الوسطى بالقيم الموجبة

يُعد استخدام الفهارس الرقمية الموجبة (Positive Indexes) الطريقة المعيارية والأكثر شيوعاً عند استدعاء دالة SCAN لاستخراج الكلمات من بداية النص باتجاه نهايته. عندما تكون قيمة المعامل الثاني عدداً صحيحاً موجباً (مثل 1، 2، 3)، تبدأ الدالة بفحص السلسلة النصية انطلاقاً من أقصى اليسار، وتقوم بحساب الكلمات المتتالية بناءً على حدود الفواصل المكتشفة، حتى تصل إلى الترتيب المطلوب وتقتطع النص المحصور بين فاصلين.

على سبيل المثال، عند وجود متغير يحتوي على جملة وصفية للمنتج، فإن تمرير القيمة 1 يستخرج الكلمة الافتتاحية للمنتج، في حين يتيح تمرير القيمة 2 استخراج الكلمة الثانية التي قد تمثل النوع أو الموديل. وتضمن هذه الآلية البرمجية دقة الاستخراج طالما أن البنية الهيكلية للنص تتبع نسقاً موحداً من حيث ترتيب الحقول. وبعد تنفيذ أمر الاستخراج، يقوم محرك SAS بتخزين النتيجة في متغير حرفي جديد يتم التحقق من سلامته عبر طباعة النتائج وفحص مصفوفة القيم الناتجة بدقة للتأكد من عدم حدوث إزاحة في ترتيب الكلمات المستخلصة.

4.2 دراسة حالات تفكيك الأسماء الثلاثية والرباعية

تُمثل معالجة أسماء الأفراد وتفكيكها أحد أكثر التحديات شيوعاً في قواعد بيانات الموارد البشرية والأنظمة الإدارية وسجلات العملاء. في حالة الأسماء الكاملة المدونة في حقل واحد، مثل اسم ثلاثي أو رباعي، يمكن تطبيق دالة SCAN لاستخلاص الاسم الأول واسم الأب واسم الجد واللقب بدقة عالية عبر تخصيص معاملات موجبة متسلسلة لكل حقل جديد.

تتضح قوة الدالة عند مواجهة الأسماء المركبة أو تباين المسافات الزائدة بين الأسماء؛ إذ تتجاوز الدالة المسافات المتكررة دون التأثير على صحة الترتيب العددي المستهدف. فإذا احتوى السجل على مسافتين أو ثلاث مسافات فارغة بين الاسم الأول واسم العائلة نتيجة خطأ في الإدخال اليدوي، فإن دالة SCAN تتجاهل هذا التكرار وتصل مباشرة إلى الكلمة المستهدفة دون تشويه المخرجات. كما يمكن دمج مخرجات الدالة مع معايير الجودة لتوحيد تنسيق الحروف ورفع مستوى اتساق البيانات ومطابقتها للمعايير القياسية العالمية لإدارة البيانات الرئيسة (Master Data Management).

5. الطريقة الثانية: استخراج الكلمات بترتيب عكسي والكلمة الأخيرة

5.1 استخدام الفهارس السالبة (Negative Count Values)

من المزايا الاستثنائية التي تنفرد بها دالة SCAN في لغة SAS إمكانية استخدام الأعداد الصحيحة السالبة في المعامل الثاني المسؤول عن ترتيب الكلمة. عندما يتم تمرير قيمة سالبة، مثل -1 أو -2، يتغير السلوك التشغيلي للدالة بشكل جذري؛ حيث ينقلب اتجاه المسح البرمجي ليبدأ من أقصى اليمين (نهاية السلسلة النصية) متجهاً نحو أقصى اليسار (بداية السلسلة النصية)، مع الحفاظ على القراءة الداخلية للحروف في الكلمة المستخرجة بالترتيب الطبيعي دون عكسها.

يكتسب هذا المفهوم أهمية بالغة عند التعامل مع مجموعات بيانات تتسم بتفاوت واختلاف أطوال السلاسل النصية وتباين عدد كلماتها من سجل لآخر داخل نفس المتغير. فإذا كان لدينا حقل نصي يحتوي على نصوص تتراوح بين ثلاث كلمات وعشر كلمات، ويقتضي الهدف التحليلي استخراج الكلمة الأخيرة أو قبل الأخيرة دائماً، فإن استخدام المؤشرات الموجبة يصبح غير مجدٍ ويتطلب عمليات حسابية مسبقة. بينما يتيح المؤشر السالب الوصول الفوري والمباشر إلى المقاطع الختامية في خطوة برمجية واحدة وأنيقة دون الحاجة لمعرفة عدد الكلمات الإجمالي في كل سجل.

5.2 استخراج اللقب أو الكلمة الختامية تلقائياً

تُعد القيمة -1 المعيار الذهبي المعتمد لاسترجاع الكلمة الأخيرة أو اسم العائلة من السلاسل النصية المركبة؛ حيث تضمن هذه القيمة استخلاص العنصر الأخير بغض النظر عما إذا كان الاسم ثنائياً أو ثلاثياً أو سداسياً. ويمتد هذا التطبيق بكفاءة متناهية إلى مجالات هندسة البيانات لاستخراج امتدادات الملفات من المسارات الرقمية الطويلة؛ فعند تمرير النقطة كفاصل مخصص مع المؤشر -1، يتم عزل امتداد الملف (مثل CSV أو PDF أو SAS7BDAT) بدقة متناهية.

عند إجراء مقارنة فنية بين استخراج الكلمة الأخيرة باستخدام دالة SCAN والمقاربة التقليدية التي تعتمد على دمج دالتي LENGTH و SUBSTR مع دوال البحث عن الفراغات، يتضح التفوق الكاسح لدالة SCAN. تتطلب الطرق التقليدية حساب الطول الإجمالي للنص، ثم البحث عن آخر موضع للمسافة الفارغة عبر حلقة تكرارية أو دوال فرز معقدة، ثم اقتطاع النص الجزئي، وهي عملية تستهلك موارد المعالجة وتزيد من احتمالية الأخطاء المنطقية. في المقابل، تنجز دالة SCAN بالمؤشر السالب هذه المهمة بأداء حوسبي أمثل وبسطر برمجي واحد فائق الوضوح.

6. الطريقة الثالثة: استخراج وتوزيع كلمات متعددة إلى متغيرات مستقلة

6.1 بناء متغيرات منفصلة لكل عنصر نصي في السلسلة

في العديد من مهام تكامل البيانات والتحويل الهيكلي، يُطلب من مهندس البيانات تفكيك حقل نصي متكامل وتوزيع كافة عناصره إلى أعمدة مستقلة بالتوازي ضمن نفس خطوة DATA Step. يمكن تحقيق ذلك بكفاءة عبر استدعاء دالة SCAN عدة مرات في سياق العبارات البرمجية المتتالية، وتخصيص مؤشر موضعي مستقل لكل متغير جديد يراد إنشاؤه داخل جدول البيانات المستهدف.

تتيح هذه الهيكلة استخراج الكلمة الأولى والثانية والثالثة في خطوة تنفيذية متزامنة، مع تسمية المتغيرات الجديدة بأسماء دلالية واضحة تعكس محتواها التحليلي، مثل تسمية الأعمدة الناتجة بالاسم الأول، واسم الأب، واسم العائلة. ويضمن هذا التنظيم سهولة الربط بين الجداول، ويسهل تطبيق عمليات الفلترة والاستعلام الإحصائي اللاحق. كما يساهم التفكيك المنهجي في إبراز العلاقات البينية بين المتغيرات، مما يرفع من جودة النماذج التنبؤية التي تعتمد على هذه السمات المستخرجة.

6.2 استخدام المصفوفات (Arrays) وأدوات التكرار (Loops) مع دالة SCAN

عندما تكون السلاسل النصية طويلة جداً أو تحتوي على عدد غير محدد مسبقاً من العناصر، يصبح الاستدعاء الفردي المتكرر لكل متغير أمراً غير عملي ومضيعاً للوقت ومخالفاً لمبادئ الكود النظيف. هنا يبرز التكامل المتقدم بين دالة SCAN ومصفوفات SAS الحرفية (Character Arrays) وحلقات التكرار DO Loops لأتمتة عملية التجزئة بصورة ديناميكية شاملة وكاملة دون تكرار سطور الكود.

يتم تعريف مصفوفة حرفية ذات أبعاد تتسع للحد الأقصى المتوقع من الكلمات، ثم تُبنى حلقة تكرارية تقوم بزيادة المؤشر العددي تدريجياً وتمريره كمعامل ثانٍ لدالة SCAN في كل دورة تكرار. تقوم الدالة بإسناد كل كلمة مستخرجة إلى العنصر المقابل في مصفوفة المتغيرات، وعندما تنتهي الكلمات في النص وترجع الدالة قيمة فارغة، يمكن كسر الحلقة التكرارية برمجياً عبر عبارة LEAVE. يحقق هذا النهج ترشيداً استثنائياً في استهلاك الذاكرة، ويسرع زمن التنفيذ الحسابي عند معالجة الملايين من السجلات ذات النصوص الطويلة والمتباينة.

7. أمثلة تطبيقية برمجية مفصلة باستخدام مجموعات بيانات واقعية

7.1 بناء مجموعة البيانات التجريبية (DATA Step)

لتوضيح الآليات البرمجية لدالة SCAN بصورة عملية، نقوم بإنشاء جدول بيانات تجريبي يحاكي سيناريوهات واقعية تتضمن حقولاً نصية غير متجانسة وسجلات مبيعات أو بيانات ديموغرافية عبر عبارة DATALINES في خطوة DATA Step. يحتوي هذا الجدول على متغيرات نصية مركبة تشتمل على الأسماء الكاملة للموظفين مع فواصل مسافية، وعناوين الفروع مفصولة بشرطات مائلة، ورموز المعاملات المحاسبية المفصولة بنقاط وفواصل منقوطة.

يتم تصميم البيانات الاختبارية بعناية فائقة لتشمل حالات حافة متنوعة، مثل السجلات التي تحتوي على مسافات بيضاء متعددة ومتكررة بين الكلمات، والسجلات ذات الأطوال المتفاوتة (أسماء ثنائية وأخرى رباعية)، إضافة إلى سجلات تتضمن قيماً مفقودة جزئياً. وبعد كتابة خطوة بناء البيانات، يتم التحقق من سلامة البنية التحتية للجدول باستخدام الإجراء الاستعراضي PROC PRINT لطباعة السجلات الخام والتأكد من جاهزيتها لاستقبال عمليات المعالجة والتحويل النصي اللاحقة.

7.2 تنفيذ كود الاستخراج الأحادي واستعراض النتائج

في هذه المرحلة، يتم تطبيق كود استخراج أحادي يهدف إلى عزل حقل معين بدقة، كاستخراج الاسم الأوسط أو كود الفرع من المتغير النصي المركب. يتم استدعاء دالة SCAN داخل خطوة DATA Step وتوجيه المخرجات إلى عمود جديد مخصص للنتائج، مع ضبط الفواصل لتتلاءم مع طبيعة المحددات الموجودة في كل حقل على حدة.

عقب تنفيذ الكود، تتجه الخطوة التالية نحو فحص سجل التشغيل المرجعي SAS Log، وهو إجراء بالغ الأهمية في بيئات العمل الاحترافية للتأكد من عدم توليد رسائل تحذيرية تتعلق بعدم تطابق أنواع البيانات أو اقتطاع النصوص. ويُظهر السجل عدد السجلات التي تمت قراءتها وكتابتها، وزمن المعالجة الفعلي بالمللي ثانية، مما يؤكد كفاءة الاستدعاء البرمجي. وتُوثق المخرجات النهائية عبر جداول تقارير إحصائية منظمة تبرز دقة عزل الكلمات المستهدفة مقارنة بالحقول الأصلية.

7.3 تنفيذ كود الاستخراج المتعدد وتحليل الأداء

يتناول هذا السيناريو تنفيذ تفكيك شامل للسلاسل النصية المتشابكة عبر توزيع كافة مكوناتها إلى مصفوفة من المتغيرات الفرعية في خطوة معالجة واحدة. يتم تفكيك رمز المعاملة المالية المعقد الذي يحتوي على كود الدولة، وتاريخ الحركة، ورقم الفرع، والرمز التعريفي للموظف، إلى أربعة أعمدة جديدة ومنفصلة باستخدام فواصل مخصصة تتضمن الشُرط والنقاط المزدوجة.

تتم مراجعة المخرجات عبر إجراءات الوصف الإحصائي مثل PROC CONTENTS للتأكد من اتساق الخصائص الهيكلية وطول ونوع المتغيرات المستحدثة. ويتم تحليل السلوك البرمجي للدالة عند مواجهة سجلات تحتوي على عدد عناصر أقل من المتغيرات المستهدفة؛ حيث يُلاحظ أن SAS تملأ المتغيرات الفائضة بقيم فارغة (Missing Character Values) دون التسبب في إيقاف البرنامج أو حدوث أخطاء تشغيلية غير معالجة، مما يبرهن على متانة واستقرار الدالة في التعامل مع التباينات البيانية.

8. التحكم في أطوال المتغيرات وإدارة الذاكرة عبر دالة LENGTH و SCAN

8.1 السلوك الافتراضي لحجم المتغير الناتج عن دالة SCAN

أحد الجوانب التقنية الحرجة التي يغفل عنها كثير من المبرمجين هو السلوك التلقائي لمحرك SAS في تحديد طول المتغيرات النصية المشتقة حديثاً عبر دالة SCAN. عندما يتم إنشاء متغير نصي جديد بواسطة دالة SCAN دون تحديد مسبق لطوله في بيئة DATA Step، تخصص SAS حجماً افتراضياً قدره 200 بايت (200 Bytes) لهذا المتغير الجديد، بغض النظر عن الطول الفعلي للكلمة المستخرجة سواء كانت حرفين أو عشرة أحرف.

يترتب على هذا السلوك الافتراضي تداعيات وخيمة على كفاءة إدارة موارد الخوادم ومساحات التخزين، لا سيما عند معالجة جداول البيانات الضخمة التي تحتوي على مئات الملايين من السجلات. فإذا قام المحلل بإنشاء خمسة متغيرات جديدة باستخدام دالة SCAN، فسيتم حجز 1000 بايت لكل سجل على حدة في الذاكرة ومساحة القرص الصلب. ويؤدي هذا التخصيص غير المنضبط إلى تضخم هائل في حجم ملف البيانات النهائي (Data Bloat)، ويبطئ عمليات الإدخال والإخراج (I/O Operations)، مما ينعكس سلباً على الأداء الكلي لمنظومة التحليل.

8.2 استخدام عبارة LENGTH لتحديد الحجم الأمثل للمتغيرات

لتفادي مخاطر الهدر التخزيني ورفع كفاءة المعالجة إلى حدودها القصوى، يُعد استخدام عبارة LENGTH الإرشادية ممارسة برمجية إلزامية يجب تطبيقها قبل استدعاء دالة SCAN داخل خطوة DATA Step. تتيح عبارة LENGTH للمبرمج حجز المساحة التخزينية الدقيقة والملائمة لطبيعة الكلمة المستخرجة (كأن يتم تحديد 20 بايت للاسم الأول و10 بايت للرمز البريدي)، مما يلغي العمل بالحجم الافتراضي البالغ 200 بايت.

يتطلب تحديد الحجم الأمثل دراسة إحصائية مسبقة لأطوال الكلمات المتوقعة لتجنب مشكلة اقتطاع النصوص (Data Truncation)، والتي تحدث إذا تم تحديد طول أقل من الحجم الحقيقي للكلمة المستخلصة، مما يؤدي إلى ضياع الحروف الزائدة. وتُظهر الدراسات التحليلية المقارنة أن تحسين أطوال المتغيرات النصية باستخدام عبارة LENGTH يؤدي إلى تقليص حجم ملفات جداول البيانات على القرص الصلب بنسب تتجاوز 70% في كثير من الحالات، فضلاً عن تسريع زمن القراءة والمعالجة في الذاكرة العشوائية بصورة ملحوظة.

9. مقارنة متعمقة بين دالة SCAN ودوال المعالجة النصية الأخرى في SAS

9.1 مقارنة بين دالة SCAN ودالة SUBSTR

تُمثل دالتا SCAN و SUBSTR الركيزتين الأساسيتين لمعالجة النصوص في بيئة SAS، إلا أن لكل منهما فلسفة تشغيلية مختلفة تماماً تملي سياق استخدامها. تعتمد دالة SUBSTR على التحديد الموضعي الدقيق للأحرف؛ حيث تتطلب معرفة مسبقة برقم خانة البداية الدقيق (Character Position) وعدد الخانات المراد اقتطاعها، مما يجعلها مثالية للبيانات النصية ذات الهيكل الثابت والصارم (Fixed-width Data) مثل الرموز الشريطية الموحدة وتواريخ الأنظمة القديمة.

في المقابل، تعتمد دالة SCAN على الاقتطاع الموجه بالفواصل والحدود الدلالية (Delimiter-based Tokenization)، حيث لا تشترط معرفة موضع بداية الكلمة أو طولها الإجمالي، بل تبحث ديناميكياً عن الفواصل الفاصلة بين الكلمات. وفيما يخص الأداء الحسابي، تتفوق دالة SUBSTR بفارق طفيف جداً في سرعة المعالجة المباشرة عند ثبات المواضع نظراً لعدم حاجتها لفحص الرموز المحيطة، بينما تكتسح دالة SCAN المشهد عندما تكون النصوص متغيرة الأطوال وغير متجانسة الفواصل، حيث توفر مرونة برمجية يستحيل تحقيقها عبر SUBSTR بمفردها.

9.2 مقارنة بين دالة SCAN ودوال INDEX و FIND و SCANX

تعمل دوال البحث مثل INDEX و FIND على رصد وتحديد الموقع العددي (الموضع) لحرف أو كلمة فرعية معينة داخل السلسلة النصية، وإرجاع رقم الخانة التي يبدأ عندها ذلك النص، دون أن تقوم بعملية الاقتطاع بذاتها. ويكتمل التكامل البرمجي بين هذه الدوال ودالة SCAN عند الحاجة إلى التحقق من وجود نمط نصي معين أولاً قبل الشروع في استخراج الكلمات المحيطة به، مما يشكل بنية شرطية محكمة للتعامل مع النصوص الشاذة.

أما دوال التعبيرات النمطية مثل حزمة دوال PRX (Perl Regular Expressions)، كدالتي PRXPARSE و PRXMATCH، فتعد البديل الأكثر تقدماً وقوة لدالة SCAN عندما تصبح قواعد الفرز شديدة التعقيد والتداخل، كالبحث عن أنماط عناوين البريد الإلكتروني أو التراكيب النصية التي لا تعتمد على فواصل محددة. ومع ذلك، تظل دالة SCAN الخيار الأفضل والأكثر تفضيلاً في الاستخدامات اليومية نظراً لبساطة صيغتها وسرعة تنفيذها العالية وانخفاض الحمل الحسابي المترتب عليها مقارنة بمحركات معالجة التعبيرات النمطية المعقدة.

10. التعامل مع القيم المفقودة والحالات الخاصة والأخطاء الشائعة

10.1 سلوك الدالة عند تجاوز عدد الكلمات الفعلي في النص

من السيناريوهات الشائعة في معالجة البيانات النصية استدعاء كلمة ذات ترتيب عددي يفوق إجمالي عدد الكلمات الموجودة فعلياً في السلسلة النصية؛ كأن يطلب الكود استخراج الكلمة الخامسة من نص لا يحتوي إلا على ثلاث كلمات فقط. تتميز دالة SCAN في هذا الموقف بالاستقرار والصلابة التشغيلية، حيث لا تتسبب في انهيار البرنامج أو إصدار أخطاء حرجة توقف خطوة البيانات، بل تُرجع سلسلة نصية فارغة (Blank/Missing String) بطول كامل المتغير.

على الرغم من أمان هذا السلوك التلقائي، فإنه يفرض على المبرمج اتخاذ تدابير وقائية لضمان سلامة العمليات التحليلية اللاحقة. ويتحقق ذلك من خلال تضمين شروط منطقية عبر عبارات IF-THEN أو باستخدام دالة MISSING للتحقق من أن القيمة المسترجعة ليست فارغة قبل إدراجها في حسابات أو عمليات ربط لاحقة. ويحول هذا التحقق الوقائي دون تلوث مجموعات البيانات بالقيم المفقودة الخفية التي قد تؤثر على دقة المؤشرات الإحصائية العامة.

10.2 معالجة المسافات البيضاء والرموز غير المرئية

تشكل المسافات البيضاء الشاذة والرموز غير المرئية، مثل محارف الجدولة (Tabs) ومحارف الأسطر الجديدة (Carriage Returns / Line Feeds)، أحد أكبر مصادر التلوث في البيانات النصية المستوردة من ملفات خارجية مثل ملفات النصوص الخام أو قواعد البيانات غير المترابطة. ولمعالجة هذه الشوائب بكفاءة، يُنصح بدمج دالة SCAN مع دوال التنظيف الحرفي مثل STRIP و TRIM و COMPBL.

تعمل دالة COMPBL على تقليص المسافات المتعددة داخل النص إلى مسافة مفردة واحدة، بينما تعمل دالة STRIP على إزالة كافة الفراغات البادئة واللاحقة من الكلمة المستخرجة بواسطة SCAN لضمان تطابقها التام مع القيود المرجعية. كما يجب الانتباه إلى ملفات النصوص الدولية التي تتبع تشفير UTF-8 متعدّد البايت للأحرف العربية وغير اللاتينية؛ حيث تتطلب معالجة هذه الحروف استخدام دوال التشفير الوطنية المقابلة مثل KSCAN في بيئات SAS القديمة لضمان عدم اقتطاع أجزاء من بايتات الحرف الواحد، في حين تدعم إصدارات SAS الحديثة هذه الخصائص تلقائياً.

11. تقنيات متقدمة: دالة SCAN داخل لغة الماكرو (Macro Language)

11.1 استخدام الدالة التناظرية %SCAN في بيئة SAS Macro Facility

توفر بيئة SAS أداة ماكرو تناظرية موازية للدالة الأصلية تُعرف باسم %SCAN، وتعمل ضمن معالج لغة الماكرو (Macro Preprocessor). يكمن الفارق الجوهري بين الدالتين في التوقيت والطبقة التنفيذية؛ إذ تُنفذ دالة %SCAN النصية أثناء مرحلة الترجمة البرمجية (Compilation Phase) وقبل بدء تنفيذ خطوة DATA Step، مما يتيح توليد الأكواد وتعديل أسماء المتغيرات وقوائم المعاملات بشكل ديناميكي كامل قبل قراءة البيانات ذاتها.

تُستخدم الدالة الماكرو %SCAN بصورة مكثفة في تجزئة متغيرات الماكرو العامة والخاصة التي تحتوي على سلاسل مفصولة بقوائم، كقوائم أسماء التحاليل الإحصائية أو أسماء الجداول المراد تكرار المعالجة عليها. وتخضع دالة %SCAN لقواعد فصل الماكرو القياسية؛ حيث تفصل النصوص بناءً على فواصل افتراضية تماثل الدالة الأصلية، ولكنها تتعامل مع الكيانات كنصوص ماكرو مجردة دون التقيد بهياكل أعمدة جداول البيانات، مما يمنح المطورين قدرة فائقة على التحكم في تدفق الأكواد البرمجية المؤتمتة.

11.2 تطوير وحدات ماكرو قابلة لإعادة الاستخدام لمعالجة السلاسل النصية

يُمثل تطوير وحدات ماكرو مخصصة (Custom Macro Modules) قمة النضج البرمجي في بيئة SAS؛ حيث يمكن تصميم ماكرو يعتمد على دالة %SCAN لتوزيع قائمة عشوائية من المتغيرات وتوليد استدعاءات إحصائية آلية عبر حلقة %DO التكرارية. يقوم هذا الماكرو بقراءة المتغير الماكرو وتفكيكه عنصراً تلو الآخر، وتنفيذ الإجراءات الإحصائية (مثل PROC MEANS أو PROC FREQ) على كل عنصر بشكل منفصل ومؤتمت بالكامل.

عند تطوير وإدارة هذه الوحدات المتقدمة في بيئات المعالجة المجمعة (Batch Processing Environments)، يصبح من الضروري تفعيل خيارات الاستكشاف وتصحيح الأخطاء مثل OPTIONS MPRINT SYMBOLGEN MLOGIC. تتيح هذه الخيارات للمطور تتبع كيفية قيام دالة %SCAN بحل السلاسل النصية وفك رموز المتغيرات خطوة بخطوة في سجل SAS Log، مما يسهل رصد الانحرافات المنطقية، ومعالجة النصوص الفارغة، وتأكيد موثوقية الأكواد قبل نشرها في بيئات التحليل الإنتاجية التنافسية.

12. أفضل الممارسات والمعايير البرمجية لرفع كفاءة الأداء البرمجي

12.1 كتابة كود SAS نظيف، موثق، وقابل للصيانة

يتطلب الحفاظ على معايير الجودة في المشاريع البرمجية الكبيرة اتباع ممارسات هندسية صارمة عند استخدام دالة SCAN. يبدأ ذلك من التوثيق الشامل داخل الكود عبر إضافة تعليقات برمجية تشرح الغرض من استخراج كل كلمة، والسبب الكامن وراء اختيار فواصل مخصصة معينة دون غيرها. كما يجب اعتماد أسماء دلالية واضحة للمتغيرات المشتقة، وتجنب التسميات العشوائية، بما يعزز مقروئية الكود وسهولة صيانته بواسطة فرق العمل التحليلية المتعددة.

علاوة على ذلك، يجب هيكلة خطوات DATA Step بصورة منطقية تمنع تكرار استدعاء دالة SCAN لنفس الكلمة والمحددات داخل أكثر من تعبير، وتفضيل حفظ القيمة المستخرجة في متغير مؤقت إذا كانت ستُستخدم في حسابات متعددة. كما يُنصح بإجراء اختبارات التوافق الهيكلي للبيانات عبر عينات اختبارية محدودة للتحقق من استقرار سلوك الفواصل قبل إطلاق خط المعالجة الكامل على مجموعات البيانات المؤسسية الضخمة.

12.2 إرشادات التحسين للأداء عند معالجة البيانات الضخمة (Big Data)

عند الانتقال إلى معالجة البيانات فائقة الضخامة (Big Data Analytics) التي تضم مليارات السجلات، تلعب كل دورة معالجة حوسبية دوراً حاسماً في تقليص التكاليف والزمن التشغيلي. لتحقيق أقصى درجات الكفاءة، يجب التخلص من المتغيرات النصية غير الضرورية فور الانتهاء من استخراج القيم المطلوبة منها عبر استخدام عبارتي KEEP و DROP، مما يقلل من حجم متجه البيانات المسجل في الذاكرة (Program Data Vector – PDV).

بالإضافة إلى ذلك، يُستحسن تفعيل خيارات المعالجة متعددة الخيوط والتحكم في حجم التخزين المؤقت لقراءة البيانات من خلال ضبط معلمات BUFSIZE و BUFNO في خيارات النظام، مما يضمن تحميل الكتل البيانية بكفاءة عالية إلى الذاكرة لتغذية دالة SCAN بأقل عدد ممكن من عمليات القراءة الفيزيائية من القرص. ويوضح الجدول التالي قائمة مراجعة استرشادية مكثفة لأفضل الممارسات المتبعة:

المجال البرمجي الممارسة الموصى بها الأثر التشغيلي
إدارة الذاكرة تعريف أطوال المتغيرات عبر عبارة LENGTH قبل دالة SCAN منع حجز الطول الافتراضي (200 بايت) وتقليص حجم الجدول بنسبة تتجاوز 70%
استخراج النهايات استخدام الفهارس السالبة (-1) لاستخراج الكلمة الأخيرة تجنب الحلقات التكرارية ودوال حساب الطول المعقدة وتسريع التنفيذ
تنظيف المدخلات دمج دالتي COMPBL و STRIP مع دالة SCAN إزالة الفراغات غير المرئية وتفادي أخطاء تطابق النصوص اللاحقة
أتمتة العمليات دمج دالة SCAN مع المصفوفات الحرفية وحلقات DO التكرارية تحويل النصوص الطويلة ديناميكياً وتقليل تكرار الأسطر البرمجية

الخاتمة

تُمثل دالة SCAN في لغة SAS حجر زاوية لا غنى عنه في ترسانة أدوات معالجة وهندسة البيانات النصية؛ إذ تجمع بين البساطة التركيبية والمرونة البرمجية الفائقة لتفكيك السلاسل الحرفية المعقدة وتنقيتها بكفاءة عالية. ومن خلال فهم آليات عمل الفهارس الموجبة والسالبة، وضبط الفواصل الافتراضية والمخصصة، واستخدام أدوات الماكرو والمصفوفات، يستطيع محللو البيانات ومهندسو الإحصاء بناء مسارات معالجة مؤتمتة تتسم بالقوة والموثوقية والقدرة على التعامل مع أضخم قواعد البيانات دون التضحية بموارد الذاكرة أو سرعة المعالجة.

المراجع (References)

  • SAS Institute Inc. (2020). SAS® 9.4 Functions and CALL Routines: Reference, Fifth Edition. Cary, NC: SAS Institute Inc. https://support.sas.com/documentation/cdl/en/lefunctionsref/69762/HTML/default/viewer.htm
  • Cody, R. (2018). Cody’s Data Cleaning Techniques Using SAS, Third Edition. Cary, NC: SAS Institute Inc.
  • Delwiche, L. D., & Slaughter, S. J. (2019). The Little SAS Book: A Primer, Sixth Edition. Cary, NC: SAS Institute Inc.
  • Burlew, M. M. (2014). SAS® Macro Programming Made Easy, Third Edition. Cary, NC: SAS Institute Inc.
  • Horstman, D. W. (2017). Methods of Character String Manipulation in SAS®. Proceedings of the SAS Global Forum 2017 Conference. Cary, NC: SAS Institute Inc.

اقتباس هذا المقال

looti, M. (2026, سبتمبر 2). كيفية استخدام دالة SCAN في SAS (مع أمثلة). عرب سايكلوجي. https://arabpsychology.com/how-to-use-scan-function-in-sas-with-examples/
looti, Mohammed. “كيفية استخدام دالة SCAN في SAS (مع أمثلة).” عرب سايكلوجي, 2 سبتمبر 2026, https://arabpsychology.com/how-to-use-scan-function-in-sas-with-examples/.
looti, Mohammed. “كيفية استخدام دالة SCAN في SAS (مع أمثلة).” عرب سايكلوجي. سبتمبر 2, 2026. https://arabpsychology.com/how-to-use-scan-function-in-sas-with-examples/.