البرمجة الإحصائية, برمجة SAS

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


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

ضمن ترسانة دوال معالجة النصوص والسلاسل المحرفية (String Functions) التي تتيحها لغة SAS، تبرز دالة COMPRESS كواحدة من أكثر الأدوات كفاءة ومرونة وتنوعاً. لا تقتصر وظيفة هذه الدالة على مجرد حذف الفراغات البيضاء البسيطة كما يوحي اسمها للوهلة الأولى، بل تمتد لتشكل محركاً برمجياً متكاملاً قادراً على تصفية، وتعديل، واستخلاص، وتجريد النصوص بناءً على معايير محرفية دقيقة ومعاملات تعديل متطورة (Modifiers). يتيح التوظيف المتقن لهذه الدالة لعلماء البيانات ومحللي الإحصاء تنقية الجداول الضخمة بكفاءة حوسبية عالية، مع تقليل استهلاك الذاكرة وتفادي التعقيدات البرمجية الطويلة التي قد تنجم عن كتابة تعبيرات نمطية مركبة (Regular Expressions).

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

1. مقدمة شاملة حول دالة COMPRESS في لغة SAS وأهميتها في معالجة البيانات

1.1 مفهوم تنظيف البيانات النصية في بيئة SAS

يمثل تنظيف البيانات النصية (Text Data Cleansing) مرحلة تمهيدية لا غنى عنها في دورة حياة البيانات داخل بيئة SAS. في العديد من الدراسات الاجتماعية، والمسوحات الوبائية، والتحليلات التسويقية، يتم جمع المتغيرات الوصفية والاسمية عبر واجهات إدخال متعددة، مما يفتح الباب واسعاً أمام التباينات الناتجة عن الأخطاء البشرية أو التناقضات بين منصات تصدير البيانات. تتجلى هذه المشكلات في إدراج مسافات إضافية غير مرئية في بدايات السلاسل النصية أو نهاياتها، أو وجود فراغات مزدوجة بين الكلمات، أو اندماج محارف غير متوقعة مثل علامات الفواصل والشرطات داخل معرفات المشتركين. هذه التناقضات المظهرية تُعامل برمجياً داخل SAS كسلاسل مختلفة تماماً، فالمعرف “ID_101” يختلف تماماً عن “ID_101 ” أو “ID 101″، مما يؤدي إلى فشل فادح في عمليات الربط (Merging and Joining) بين الجداول عبر عبارة MERGE أو استعلامات PROC SQL.

تتضاعف أهمية الجودة النصية عند الانتقال إلى مرحلة النمذجة الإحصائية والتحليل المتقدم. في نماذج الانحدار اللوجستي أو التحليل العاملي للمتغيرات الفئوية، يؤدي وجود رمز واحد غير منضبط إلى توليد مستوى فئوي وهمي (Artifact Category)، مما يقوض درجات الحرية ويزيد من خطأ القياس، وقد يؤدي إلى انفصال شبه تام في البيانات (Quasi-complete separation). من هذا المنطلق، توفر لغة SAS منظومة متكاملة من الدوال السلسلية التي تتيح أتمتة المعالجة المسبقة، حيث تلعب دالة COMPRESS دور الخط الدفاعي الأول لإرساء معايير الجودة، وتحويل النصوص الفوضوية إلى مدخلات مهيكلة وموثوقة تتوافق مع المتطلبات الصارمة للخوارزميات التحليلية.

1.2 التعريف الوظيفي لدالة COMPRESS ودورها الأساسي

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

يكمن الفرق الجوهري بين التعديل اليدوي العشوائي والتنظيف المنهجي المؤتمت باستخدام COMPRESS في قدرة الدالة على معالجة ملايين السجلات في أجزاء من الثانية دون إحداث عبء حوسبي كبير على ناقل بيانات البرنامج (Program Data Vector – PDV). بدلاً من اللجوء إلى التكرارات الحلقية المعقدة (DO Loops) أو استدعاء تعبيرات النمط المنتظم عبر دوال PRXPARSE وPRXCHANGE، تتيح COMPRESS تنقية الحقول النصية عبر سطر برمجي واحد وبكفاءة معالجة منخفضة التكلفة، مما يجعلها الخيار القياسي والمعياري لمهندسي البيانات ومحللي الإحصاء على حد سواء.

1.3 السياقات التطبيقية لدالة COMPRESS في الأبحاث والتحليلات

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

كذلك تمثل الدالة أداة أساسية في تنظيف سجلات الرعاية الصحية والأبحاث السريرية (Clinical Trials Data Management – CDISC)، حيث تتضمن الملاحظات الطبية أحياناً قياسات ممتزجة باختصارات نصية ووحدات قياس مدخلة يدوياً مثل “120mmHg” أو “75.5 kg”. وباستخدام دالة COMPRESS بالتكامل مع وسائط التعديل المناسبة، يمكن استخلاص الأرقام وتنقيتها بدقة متناهية وفصلها عن النصوص الملحقة بها، مما يمهد الطريق لتحويلها إلى متغيرات عددية مستمرة جاهزة لحساب مقاييس النزعة المركزية والتشتت ونماذج تحليل التباين (ANOVA).

2. البنية النحوية الأساسية لدالة COMPRESS ومعاملاتها (Syntax & Parameters)

2.1 تحليل الصيغة العامة للدالة ومكوناتها الأساسية

تتسم البنية النحوية لدالة COMPRESS في بيئة SAS بالوضوح والمرونة، وتأخذ الصيغة المعيارية العامة التالية:

COMPRESS(source <, characters-to-remove> <, modifiers>)

تتألف هذه الصيغة من ثلاثة مكونات رئيسية يجب استيعاب وظيفة كل منها بدقة:

  • المعامل الأول (Source): السلسلة النصية المصدرية أو اسم المتغير النصي المراد معالجته. هذا المعامل إلزامي، ويمكن أن يكون متغيراً نصياً مخزناً مسبقاً، أو تعبيراً حرفياً محاطاً بعلامات تنصيص، أو ناتج دالة نصية أخرى.
  • المعامل الثاني الاختياري (Characters-to-remove): سلسلة محرفية تحدد قائمة الرموز والمحارف المطلوب حذفها تحديداً من النص المصدري. في حال إغفال هذا المعامل والمعامل الثالث، يكون السلوك الافتراضي هو حذف المسافات البيضاء فقط.
  • المعامل الثالث الاختياري (Modifiers): حرف أو مجموعة محارف مدمجة توجه السلوك الوظيفي للدالة وتحدد أصناف المحارف المستهدفة (مثل الأرقام، الحروف، علامات الترقيم) أو تعدل منطق المعالجة (مثل الإبقاء بدلاً من الحذف، أو تجاهل حالة الأحرف).

2.2 آلية استدعاء الدالة داخل خطوة DATA Step

يتم استدعاء دالة COMPRESS في سياق خطوة بناء البيانات (DATA Step) من خلال إسناد ناتجها إلى متغير نصي جديد أو إعادة كتابة المتغير القائم. من الضروري هنا إدراك كيفية تعامل SAS مع أطوال المتغيرات النصية (Variable Length Allocation). في خطوة البيانات، إذا تم إنشاء متغير جديد عبر دالة COMPRESS دون تحديد مسبق لطوله عبر عبارة LENGTH، فإن SAS يمنح المتغير الجديد طولاً افتراضياً مساوياً لطول المتغير المصدري المدخل في المعامل الأول.

لتجنب استهلاك غير مبرر للذاكرة التخزينية في مجموعات البيانات الضخمة، يُوصى دائماً بتعريف طول المتغير الهدف صراحة. على سبيل المثال، عند ضغط متغير يحتوي على رقم هواتف بطول 50 بايت لاستبعاد المسافات والرموز بحيث يصبح طوله الفعلي 10 بايت فقط، فإن تحديد LENGTH Clean_Phone $10; قبل تطبيق الدالة يضمن كفاءة استغلال الذاكرة المؤقتة وسرعة المعالجة على القرص الصلب وتفادي إهدار الموارد الحوسبية.

2.3 الفروق الدقيقة بين المعاملات الاختيارية والإلزامية

تتغير استجابة دالة COMPRESS جذرياً بناءً على المعاملات الممررة إليها. عندما تُستدعى الدالة بمعامل واحد فقط COMPRESS(Variable)، فإنها تستهدف حصراً المسافات والفراغات الفارغة، متجاهلة أي رموز أخرى. ولكن بمجرد تمرير المعامل الثاني COMPRESS(Variable, 'ABC')، فإن الدالة تلغي سلوكها الافتراضي المتعلق بالفراغات، وتركز حصرياً على حذف المحارف المحددة في المعامل الثاني (أي الأحرف A و B و C)، مما يعني أن المسافات ستبقى دون حذف إلا إذا تم تضمين مسافة صريحة داخل المعامل الثاني مثل ' ABC' أو استخدام معدل المسافات المناسب.

أما عند إضافة المعامل الثالث، فإن الدالة تكتسب قدرات ترشيح بالغة التطور. فإذا تم تمرير سلسلة فارغة في المعامل الثاني مع تحديد معدل في المعامل الثالث مثل COMPRESS(Variable, '', 'd')، فإن الدالة تفهم ذلك على أنه أمر بحذف صنف كامل من المحارف (الأرقام في هذا المثال) دون الحاجة إلى كتابة ‘0123456789’ يدوياً. يمثل هذا التمييز بين تمرير المحارف الحرفية وتمرير فئات المحارف عبر المعدلات أحد أهم مرتكزات البرمجة الاحترافية في SAS.

3. الاستخدام الافتراضي: إزالة جميع المسافات والفراغات البيضاء من النصوص

3.1 آلية عمل الدالة عند تمرير متغير نصي فقط

في بيئة SAS، تُخزن المتغيرات النصية ذات الأطوال الثابتة مع مساحات فارغة مكملة في نهاياتها (Trailing Blanks) لملء الطول المخصص للمتغير في قاموس البيانات. عند تطبيق دالة COMPRESS بتمرير المتغير النصي منفرداً COMPRESS(String)، تنفذ الدالة مسحاً شاملاً للسلسلة النصية عبر ناقل البيانات وتستأصل كافة أنواع الفراغات والمسافات البيضاء بغض النظر عن موقعها داخل السلسلة.

يشمل هذا الاستئصال المسافات البادئة (Leading blanks) التي تسبق أول حرف مرئي، والمسافات اللاحقة (Trailing blanks) التي تعقب آخر حرف، والمسافات البينية (Inter-word spaces) المفردة والمتعددة التي تفصل بين الكلمات أو الرموز. يتم ضغط النص بالكامل بحيث تلتحم المحارف المتبقية في كتلة واحدة متصلة. هذا السلوك الراديكالي يميز COMPRESS عن دوال التقليم والتشذيب الأخرى التي تكتفي بالتعامل مع أطراف النص فقط وتترك الفراغات الداخلية سليمة دون تغيير.

3.2 تطبيق برمجي مفصل على إزالة الفراغات

لتوضيح هذا السلوك عملياً، نستعرض خطوة بيانات نموذجية يتم فيها إدخال نصوص ملوثة بفراغات عشوائية في مواقع متعددة، متبوعة بتطبيق دالة COMPRESS واستعراض المخرجات عبر إجراء PROC PRINT:

في هذا التطبيق، نفترض وجود جدول بيانات تجريبي باسم Raw_Data يحتوي على متغير نصي يسمى Dirty_Text بقيمة تتضمن فراغات في البداية والوسط والنهاية مثل ' SAS Analytics System '. عند كتابة خطوة البيانات:

يتم إنشاء جدول جديد باسم Clean_Data، وتطبيق الدالة عبر التعبير البرمجي: Compressed_Text = COMPRESS(Dirty_Text);. عند طباعة النتيجة عبر PROC PRINT، نلاحظ أن القيمة الناتجة للمتغير Compressed_Text أصبحت 'SASAnalyticsSystem'، حيث تم التخلص من المسافات الثلاث الأولى، والمسافات الثلاث الفاصلة بين الكلمات، والمسافات اللاحقة بالكامل، مما يوضح الكفاءة التامة للدالة في توحيد الكتلة النصية وتجريدها من أي فواصل فضائية.

3.3 حالات الاستخدام الشائعة لإزالة الفراغات البيضاء

تتعدد التطبيقات العملية للاستخدام الافتراضي لدالة COMPRESS في معالجة البيانات، ومن أبرزها:

  • تنظيف أرقام الحسابات البنكية ومعرفات العملاء (IBAN & Account Numbers): حيث يعمد مدخلو البيانات غالباً إلى كتابة الأرقام الطويلة في مجموعات مفصولة بمسافات لتسهيل قراءتها، وتؤدي الدالة إلى دمجها في رقم تسلسلي متصل يطابق الصيغ المعيارية في الأنظمة المركزية.
  • توحيد الرموز الجغرافية والبريدية (Postal Codes): تتطلب العديد من خوارزميات الترميز الجغرافي (Geocoding) إدخال الرموز البريدية دون أي فراغات داخلية لضمان دقة تحديد المواقع على الخرائط الرقمية.
  • معالجة أسماء المتغيرات والأكواد البرمجية المولدة ديناميكياً: في برمجيات الماكرو المتقدمة (SAS Macro Facility)، تُستخدم الدالة لتنظيف القيم النصية قبل استخدامها كأسماء لمتغيرات أو جداول لمنع حدوث أخطاء نحوية ناتجة عن المسافات غير المقصودة في بيئة التنفيذ.

4. إزالة محارف ورموز مخصصة محددة (Removing Specific Characters)

4.1 تمرير قائمة المحارف المستهدفة كمعامل ثانٍ

تتيح لغة SAS للمبرمج تحديد محارف معينة يرغب في حذفها من النص من خلال إدراجها مباشرة كسلسلة نصية في المعامل الثاني للدالة. تأخذ الدالة في هذه الحالة الصيغة: COMPRESS(source, 'characters'). عند تفعيل هذا المعامل، يتوقف الحذف التلقائي للمسافات، وتبدأ الدالة في فحص كل محرف في السلسلة المصدرية، فإذا تطابق مع أي رمز من الرموز المذكورة في المعامل الثاني، يتم استبعاده فوراً من السلسلة الناتجة.

من الأهمية بمكان التأكيد على أن ترتيب الرموز داخل المعامل الثاني ليس له أي أثر على آلية الحذف، فالرمز '$#%' يؤدي النتيجة ذاتها تماماً مثل '%#$'. الدالة تتعامل مع هذا المعامل كمجموعة محارف مفردة (Set of characters) مستقلة وليست كنمط تركيبي متصل. كذلك يجب الانتباه إلى حساسية حالة الأحرف (Case Sensitivity) في هذا الاستخدام الافتراضي؛ فحذف الحرف ‘x’ الصغير لن يؤدي إلى حذف ‘X’ الكبير ما لم يتم تضمينهما معاً أو استخدام وسيطات التعديل الخاصة بالحالة.

4.2 أمثلة برمجية لإزالة علامات الترقيم والرموز الخاصة

لنفترض أننا نتعامل مع مجموعة بيانات تسويقية تحتوي على أسعار أو أرقام هواتف مشوبة برموز مالية وأقواس وعلامات خاصة مثل '$1,250.00 (USD)' أو '(+1)-800-555#0199'. لتنقية هذه السلاسل من الرموز غير المرغوب فيها، نقوم بصياغة خطوة بيانات مخصصة:

نقوم بتمرير قائمة الرموز المستهدفة في المعامل الثاني كالتالي: Clean_Price = COMPRESS(Price_Variable, '$,() USD');. في هذه الحالة، ستتولى الدالة حذف علامة الدولار، والفاصلة، والأقواس، وحروف الكلمة “USD”، بالإضافة إلى المسافات التي قمنا بتضمينها صراحة داخل المعامل الثاني، تاركة فقط الأرقام والنقطة العشرية: 1250.00. يُظهر هذا المثال كيف تمنحنا الدالة سيطرة دقيقة على المكونات النصية المسموح ببقائها وتلك المحكوم عليها بالاستبعاد.

4.3 التعامل مع المحارف المتكررة والأنماط المعقدة

تتميز دالة COMPRESS بقدرتها على معالجة المحارف المحددة بغض النظر عن وتيرة تكرارها أو موضع توزيعها داخل النص. فسواء كان الرمز المستهدف يظهر مرة واحدة أو يتكرر عشرات المرات متتالياً (مثل تكرار علامات النجوم ‘***’ أو الشرطات ‘—‘ المستخدمة كفواصل تنسيقية في الأنظمة القديمة)، فإن الدالة تزيلها جميعاً بالكامل في دورة معالجة واحدة وبكفاءة خطية زمنياً ذات تعقيد حسابي منخفض O(N).

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

5. استخدام وسيطات التعديل (Modifiers) للتحكم المتقدم في سلوك الدالة

5.1 مفهوم معدلات التعديل (Modifiers) في SAS ودورها

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

تتيح بيئة SAS كتابة عدة معدلات مجتمعة داخل المعامل الثالث في استدعاء واحد (مثل الجمع بين معدل الأرقام ومعدل علامات الترقيم ومعدل تجاهل حالة الأحرف)، مما يمكن المبرمج من تصميم عمليات تصفية مركبة ومعقدة بسطر كود واحد فائق الأناقة والسرعة التشغيلية.

5.2 جدول تصنيف أهم وسيطات التعديل الشائعة

يلخص الجدول التالي أبرز وسائط التعديل المعتمدة في دالة COMPRESS ودور كل منها بالتفصيل:

المعدل (Modifier) الوظيفة الأساسية وفئة المحارف الوصف التحليلي والتطبيقي
a / A الأحرف الأبجدية (Alphabetic) يستهدف جميع الحروف الهجائية اللاتينية الكبيرة (A-Z) والصغيرة (a-z).
d / D الأرقام الحسابية (Digits) يستهدف الأرقام العددية العشرية الأساسية من 0 إلى 9.
p / P علامات الترقيم (Punctuation) يستهدف كافة علامات الترقيم القياسية مثل (! ” # $ % & ‘ ( ) * + , – . / : ; < = > ? @ [ ] ^ _ ` { | } ~).
s / S المسافات والفراغات (Spaces) يستهدف المسافات الأفقية، والفواصل المجدولة (Tabs)، ومحارف الأسطر الجديدة (CR/LF).
c / C محارف التحكم (Control characters) يستهدف الرموز غير القابلة للطباعة وأكواد التحكم الثنائية في جدول ASCII.
i / I تجاهل حالة الأحرف (Ignore Case) يلغي حساسية حالة الأحرف عند البحث عن المحارف المحددة في المعامل الثاني.
k / K الإبقاء والحفظ (Keep) يعكس السلوك المنطقي للدالة للإبقاء على المحارف المستهدفة وحذف كل ما سواها.
l / L الأحرف الصغيرة (Lowercase) يستهدف حصراً الحروف الأبجدية الصغيرة (a-z).
u / U الأحرف الكبيرة (Uppercase) يستهدف حصراً الحروف الأبجدية الكبيرة (A-Z).
n / N الأحرف والأرقام (Digits & Underscore) يستهدف الحروف والأرقام بالإضافة إلى رمز الشرطة السفلية (_).

5.3 قواعد بناء ودمج وسائط التعديل في الكود البرمجي

عند بناء استدعاء متقدم لدالة COMPRESS يتضمن وسائط التعديل، يجب الالتزام بالقواعد النحوية التالية لضمان التنفيذ الصحيح:

  • إذا كنت ترغب في استخدام وسائط التعديل لاستهداف فئات محارف عامة (مثل الأرقام أو الحروف) دون تحديد قائمة محارف خاصة في المعامل الثاني، يجب تمرير سلسلة نصية فارغة كمعامل ثانٍ، مثل: COMPRESS(Text, '', 'd'). إغفال المعامل الثاني وكتابة COMPRESS(Text, 'd') سيؤدي إلى معاملة الحرف ‘d’ كمحرف مفرد مراد حذفه بدلاً من معاملته كمعدل للأرقام!
  • يمكن تجميع عدة معدلات داخل علامات تنصيص واحدة في المعامل الثالث بأي ترتيب، مثل 'adp' لحذف الأحرف والأرقام وعلامات الترقيم دفعة واحدة.
  • حالة كتابة وسيطات التعديل نفسها داخل علامات التنصيص غير حساسة؛ فكتابة 'kd' تعطي نفس النتيجة تماماً لكتابة 'KD' أو 'Kd'.

6. إزالة جميع الأحرف الأبجدية باستخدام المعدّل ‘a’ (Alphabetic Characters)

6.1 آلية استخدام المعدل ‘a’ لعزل النصوص عن الأرقام

يعمل وسيط التعديل 'a' (أو 'A') على توجيه دالة COMPRESS للتعرف الفوري والشامل على جميع الحروف الأبجدية ضمن الأبجدية اللاتينية بنوعيها الكبير والصغير (A-Z و a-z). عند تمرير هذا المعدل بالصيغة: COMPRESS(Source, '', 'a')، تقوم الدالة بمسح السلسلة النصية وحذف أي حرف هجائي، مع الإبقاء الكامل على الأرقام والمسافات وعلامات الترقيم والرموز الرياضية.

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

6.2 مثال عملي تطبيقي لاستخراج الأرقام بحذف الحروف

لتوضيح ذلك بمثال تطبيقي، لنفترض وجود جدول بيانات يحتوي على قياسات مخبرية أو سريرية تم إدخالها بطريقة غير قياسية، حيث امتزجت القيم العددية بالوحدات النصية، مثل: 'Result: 142.5 mg/dL' أو 'Score: 98 points'.

لتنظيف هذا المتغير واستخراج المكونات غير النصية، نكتب خطوة البيانات التالية:

نقوم بإنشاء متغير جديد يسمى Numeric_Portion باستخدام الدالة: Numeric_Portion = COMPRESS(Raw_Score, '', 'a');. عند تنفيذ البرنامج، نجد أن السلسلة الأولى تحولت إلى ': 142.5 /'، حيث حُذفت جميع الحروف (Result, mg, dL) وبقيت الأرقام والنقطة العشرية والنقطتان الرأسيتان والشرطة المائلة والمسافات. يوضح هذا الإجراء كيف يقوم المعدل 'a' بتجريد السلسلة من الغطاء اللغوي، مما يمهد لخطوات التصفية اللاحقة لحذف الرموز المتبقية واستخلاص الرقم المحض.

6.3 التطبيقات الميدانية لعزل البيانات غير النصية

يخدم المعدل 'a' العديد من التطبيقات الهامة في تحليلات الأعمال والعلوم الاجتماعية، بما في ذلك:

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

7. استبعاد وحذف القيم والأرقام العددية باستخدام المعدّل ‘d’ (Digits)

7.1 آلية عمل المعدل ‘d’ في استهداف الأرقام (0-9)

يقوم وسيط التعديل 'd' (أو 'D')، المشتق من كلمة Digits، بالتعرف على كافة المحارف الرقمية الأحادية التي تقع ضمن النطاق الحسابي من الصفر إلى التسعة (0، 1، 2، 3، 4، 5، 6، 7، 8، 9). عند استدعاء الدالة بالصيغة: COMPRESS(Source, '', 'd')، تستهدف الدالة هذه المحارف الرقمية حصراً وتستأصلها من النص أينما وُجدت، محافظةً في الوقت ذاته على كافة الحروف الأبجدية، والمسافات، وعلامات الترقيم، والرموز الخاصة.

تعتبر هذه الوظيفة جوهرية في معالجة المتغيرات الاسمية والنصية الحرة (Free-text Fields) التي قد تتلوث بأرقام عشوائية نتيجة أخطاء الطباعة أو دمج حقول مختلفة في حقل واحد أثناء عمليات تحويل قواعد البيانات القديمة.

7.2 تطبيق برمجي لإزالة الأرقام من أسماء المتغيرات والنصوص

في بيئات المسوح الميدانية، قد يقوم جامعو البيانات بإدخال أرقام تسلسلية داخل حقول الأسماء الخاصة بالمستجيبين، مثل: 'Ahmed 123 Khalid 45' أو 'Site_04_Station_A'. لتجريد الأسماء من هذه الأرقام الدخيلة، ننفذ خطوة البيانات التالية:

نُعرّف متغيراً جديداً باسم Clean_Name ونطبق الدالة كالتالي: Clean_Name = COMPRESS(Raw_Name, '', 'd');. ينتج عن تنفيذ هذا الكود تحويل القيمة الأولى إلى 'Ahmed Khalid '، حيث تم التخلص التام من الأرقام 1 و 2 و 3 و 4 و 5، مع بقاء الحروف والمسافات البينية. يمكن بعد ذلك دمج هذه الدالة مع دالة تقليص الفراغات للحصول على اسم نقي ومنضبط بالكامل.

7.3 حالات الاستخدام في الأبحاث واستطلاعات الرأي

تتضمن أبرز التطبيقات التحليلية لحذف الأرقام بالمعدل 'd' ما يلي:

  • تنظيف أسماء الأدوية والمركبات الكيميائية: عند الرغبة في إجراء تحليل تصنيفي للأسماء التجارية للأدوية دون التأثر بأرقام الجرعات المدمجة في الاسم مثل “Panadol 500mg”.
  • معالجة النصوص في بحوث التنقيب عن المشاعر (Sentiment Analysis): حيث يتطلب التحليل المعجمي أحياناً استبعاد التقييمات الرقمية العشوائية من فقرات التعليقات لتركيز محرك التحليل على الألفاظ الدلالية والصفات اللغوية.
  • توحيد المتغيرات التصنيفية الديموغرافية: استبعاد أرقام الفئات التي قد يلصقها بعض الباحثين بأسماء المهن أو المناطق الجغرافية لضمان تطابق التسميات الحرفية بين مختلف موجات المسح الميداني.

8. التعامل مع علامات الترقيم والمحارف غير القابلة للطباعة (Modifiers ‘p’ & ‘c’)

8.1 تنظيف النصوص من علامات الترقيم عبر المعدل ‘p’ (Punctuation)

تُعد علامات الترقيم من أكثر الشوائب التي تعيق عمليات المعالجة الآلية للغات الطبيعية (NLP) والتقطيع النصي (Tokenization) في SAS. يتيح وسيط التعديل 'p' (Punctuation) استهدافاً شاملاً لجميع علامات الترقيم والرموز الخاصة المعتمدة في معايير ASCII، بما في ذلك الفواصل، والنقاط، وعلامات التعجب، والاستفهام، والأقواس بكافة أشكالها، والشرطات، وعلامات الاقتباس.

بدلاً من بناء قائمة يدوية مرهقة قد تسقط منها بعض الرموز النادرة مثل الأقواس المعقوفة أو الفواصل المنقوطة، فإن تطبيق COMPRESS(Text, '', 'p') يضمن تطهير النص الكامل من أي رمز ترقيمي، مما يترك كلمات النص نقية ومتراصة، وهو أمر بالغ الأهمية قبل تمرير النصوص إلى إجراءات تحليل النصوص المتقدمة مثل PROC TEXTMINER أو إجراءات التحليل التكراري عبر PROC FREQ.

8.2 إزالة محارف التحكم والمحارف غير القابلة للطباعة عبر المعدل ‘c’ (Control Characters)

عند استيراد ملفات البيانات من أنظمة تشغيل غير متجانسة (مثل تصدير ملفات من بيئات Mainframe أو Unix إلى Windows) أو قراءة نصوص من صفحات الإنترنت وملفات CSV الخام، غالباً ما تتسرب إلى البيانات محارف تحكم مخفية (Control Characters). تشمل هذه المحارف إشارات نهاية السطر (Line Feeds – LF، Carriage Returns – CR)، وفواصل الأعمدة المجدولة (Horizontal & Vertical Tabs)، وإشارات الفراغ الصفري (Null characters).

هذه المحارف لا تظهر على شاشات العرض العادية، ولكنها تتسبب في أخطاء برمجية فادحة؛ فهي قد تؤدي إلى كسر غير متوقع في قراءة السجلات، أو فشل عمليات المطابقة الشرطية عبر IF Variable = 'Value'، أو تعطل استعلامات الدمج في PROC SQL. يمثل وسيط التعديل 'c' الأداة المثالية لاكتشاف هذه الفيروسات النصية المخفية وإبادتها، حيث يقوم بحذف كافة المحارف التي تقع قيمها الرمزية في النطاق غير القابل للطباعة، مما يضمن تدفقاً سلساً وخالياً من العوائق للبيانات عبر ناقل خطوة البيانات.

8.3 الدمج الفعال للمعدلات المتعددة لتحقيق أقصى درجات النقاء النصي

تصل كفاءة دالة COMPRESS إلى ذروتها عند دمج وسائط تعديل متعددة في عملية تنظيف مركبة. لنفترض أننا نريد تنقية حقل نصي من علامات الترقيم ومحارف التحكم المخفية والمسافات الزائدة دفعة واحدة لتحضيره لإنشاء مفتاح تشفير (Hash Key) فريد.

يمكن تحقيق ذلك بصياغة التعبير البرمجي: Pure_Key = COMPRESS(Raw_Field, '', 'pcs');. يدمج هذا السطر ثلاثة معدلات قوية:

  • المعدل 'p' لحذف علامات الترقيم.
  • المعدل 'c' لحذف محارف التحكم المخفية.
  • المعدل 's' لحذف كافة أشكال المسافات والفراغات البيضاء.

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

9. تقنيات الإبقاء بدلاً من الحذف: قوة استخدام معدل الحفظ (Modifier ‘k’)

9.1 فلسفة العمل العكسي عبر المعدل ‘k’ (Keep Characters)

في كثير من الأحيان، يواجه مبرمج SAS معضلة تتمثل في معرفة ما يجب “الإبقاء عليه” بدقة، مع صعوبة أو استحالة حصر كافة الشوائب والمحارف الغريبة التي قد تتسلل إلى النص وتستوجب الحذف. هنا تتجلى عبقرية وسيط التعديل 'k' (أو 'K')، المشتق من كلمة Keep.

يعمل المعدل 'k' على قلب المنطق التشغيلي لدالة COMPRESS رأساً على عقب؛ فبدلاً من اعتبار المعاملات المدخلة قائمة للمحارف المراد حذفها، تصبح قائمة حصرية للمحارف “المسموح ببقائها”، وتقوم الدالة بحذف وإبادة أي محرف آخر في السلسلة النصية لا ينتمي إلى هذه القائمة. يُقلل هذا الأسلوب العكسي من تعقيد الأكواد البرمجية ويجعلها محصنة ضد المفاجآت الإدخالية والرموز غير المتوقعة التي قد تفلت من قوائم الحذف التقليدية.

9.2 استخراج الأرقام فقط باستخدام التركيبة ‘kd’

تُعد تركيبة المعدلين 'kd' (Keep Digits) إحدى أكثر التقنيات استخداماً وشهرة في أوساط مبرمجي SAS المحترفين. تقوم هذه الصيغة بحذف كل شيء في السلسلة النصية باستثناء الأرقام الحسابية من 0 إلى 9.

إذا كانت لدينا سلسلة نصية تحتوي على خليط معقد من الحروف، وعلامات الترقيم، والمسافات، مثل رقم هاتف دولي مكتوب بصيغة عشوائية: 'Tel: +(966)-50-123-4567 [Ext: 88]'، فإن تطبيق الكود التالي:

Digits_Only = COMPRESS(Phone_String, '', 'kd');

سيؤدي مباشرة إلى استخلاص السلسلة الرقمية الصافية: '96650123456788'. حذفت الدالة تلقائياً كلمة Tel، وعلامة الزائد، والأقواس، والشرطات، والمسافات، وكلمة Ext، والأقواس المعقوفة، دون الحاجة إلى تحديد أي من هذه الرموز بالاسم في المعامل الثاني. هذا النمط بالغ الفعالية في توحيد المعرفات وسجلات الهواتف قبل إجراء المطابقات الإحصائية.

9.3 استخراج الحروف فقط باستخدام التركيبة ‘ka’ والتركيبات المتقدمة

بالتوازي مع استخراج الأرقام، تتيح تركيبة المعدلين 'ka' (Keep Alphabetic) استبقاء الحروف الهجائية اللاتينية فقط وحذف كافة الأرقام وعلامات الترقيم والرموز الخاصة. وإذا أردنا الحفاظ على الفراغات بين الكلمات حتى لا تلتحم الجمل، يمكننا ببساطة إضافة وسيط المسافات لتصبح التركيبة 'kas' (Keep Alphabetic and Spaces).

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

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

10.1 مقارنة دالة COMPRESS مع دالتي TRIM و STRIP

يخلط العديد من المبرمجين المبتدئين بين وظائف دوال المعالجة النصية المتقاربة في SAS، لا سيما دوال COMPRESS و TRIM و STRIP. يوضح التحليل المقارن التالي الفروق الجوهرية الدقيقة بين هذه الدوال:

الدالة النصية نطاق معالجة الفراغات والمسافات القدرة على معالجة الرموز والمعدلات
TRIM تزيل المسافات اللاحقة (Trailing blanks) فقط من نهاية السلسلة. لا تمس المسافات البادئة أو البينية إطلاقاً. تقتصر على الفراغات فقط، ولا تدعم إزالة الرموز المخصصة أو استخدام المعدلات.
STRIP تزيل كلاً من المسافات البادئة (Leading) واللاحقة (Trailing). لا تمس المسافات البينية الموجودة في منتصف النص. تقتصر على الفراغات الطرفية فقط، ولا تقبل معاملات لتحديد محارف أخرى أو وسائط تعديل.
COMPRESS تزيل كافة المسافات البادئة، واللاحقة، والوسطية البينية في الاستخدام الافتراضي. أداة شاملة لمعالجة أي محارف أو فئات محرفية، وتدعم وسائط التعديل المتقدمة والحفظ الانتقائي.

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

10.2 مقارنة دالة COMPRESS مع دالة COMPBL

تمثل دالة COMPBL (Compress Blanks) بديلاً ذكياً في معالجة المسافات؛ فوظيفتها الأساسية ليست حذف المسافات تماماً كما تفعل COMPRESS، بل “تقليص” أي تتابع لمسافات بيضاء متعددة (Multiple consecutive blanks) وتحويلها إلى مسافة بيضاء مفردة واحدة (Single blank)، مع الحفاظ على الفواصل الطبيعية بين الكلمات.

إذا كان لدينا نص مثل 'Data Analysis Techniques'، فإن تطبيق COMPBL ينتج عنه 'Data Analysis Techniques'، مما يجعله مقروءاً ومنضبطاً، في حين أن تطبيق COMPRESS الافتراضي سينتج عنه 'DataAnalysisTechniques'. بالتالي، يُفضل استخدام COMPBL لتحسين تنسيق الفقرات والجمل اللغوية، في حين تُفضل COMPRESS لبناء المعرفات وتجريد البيانات من الفواصل بالكامل أو لتنقية الرموز.

10.3 مصفوفة توضيحية لنتائج الدوال المختلفة على نفس السلسلة النصية

لتجسيد الفروق السابقة عملياً، يوضح الجدول التالي المخرجات الدقيقة الناتجة عن تطبيق دوال المعالجة النصية المختلفة على نفس السلسلة المصدرية التجريبية ذات المسافات المتنوعة:

السلسلة المصدرية والدالة المطبقة القيمة النصية الناتجة ملاحظات الأثر الهيكلي
القيمة الأصلية: ' SAS Base ' ' SAS Base ' 3 مسافات بادئة، 3 مسافات بينية، 3 مسافات لاحقة.
TRIM(Source) ' SAS Base' حُذفت المسافات اللاحقة فقط، وبقيت البادئة والبينية.
STRIP(Source) 'SAS Base' حُذفت المسافات البادئة واللاحقة، وبقيت المسافات البينية الثلاث.
COMPBL(Source) ' SAS Base ' قُلصت المسافات المتعددة في كل موضع إلى مسافة مفردة واحدة.
COMPRESS(Source) 'SASBase' أُزيلت كافة المسافات البادئة والبينية واللاحقة تماماً.

11. سيناريوهات تطبيقية وأمثلة عملية شاملة على مجموعات بيانات واقعية

11.1 السيناريو الأول: تنظيف وتوحيد معرفات المشاركين في دراسة بحثية

في دراسة وبائية تتبعية متعددة المراكز، وُجد أن معرفات المرضى (Subject IDs) قد أُدخلت بتنسيقات عشوائية نتيجة اختلاف بروتوكولات الإدخال في المستشفيات المشاركة؛ فبعضها كُتب مثل ' SUBJ-001/A ' وبعضها 'subj_002#B' وبعضها 'Subj 003 C'. المطلوب هو توحيد المعرفات لتتكون حصراً من اسم “SUBJ” متبوعاً بالأرقام والحرف النهائي الكبير دون أي فواصل أو شرطات أو مسافات.

لتحقيق هذا الهدف المعقد بكفاءة برمجية عالية، نكتب خطوة البيانات التالية في SAS:

نستخدم دالة COMPRESS مع وسيط الحفظ للأحرف والأرقام 'kna' (أو الجمع بين 'ka' و 'kd') متبوعة بدالة تحويل الحروف إلى الصيغة الكبيرة UPCASE:

Standard_ID = UPCASE(COMPRESS(Raw_ID, '', 'kna'));

يقوم هذا الكود البسيط بحذف كافة الشرطات، والشرطات المائلة، وعلامات الشباك، والمسافات، تاركاً فقط الحروف والأرقام، وتتولى دالة UPCASE توحيد حالة الأحرف، لتتحول السجلات الثلاثة بدقة إلى 'SUBJ001A' و 'SUBJ002B' و 'SUBJ003C'، مما يجعلها جاهزة فوراً لعمليات الدمج ومطابقة المتغيرات التابعة.

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

في قاعدة بيانات استشارات نفسية وسلوكية، يحتوي حقل الملاحظات السريرية Clinical_Notes على بيانات مدمجة تشمل زمن الجلسة بالدقائق ممتزجاً بنصوص وصفية متنوعة مثل 'Patient attended for 45 mins, cooperative' أو 'Session duration: 60minutes approx.' أو 'Completed in (30) MINS.'. يهدف الباحث إلى استخراج عدد الدقائق وتحويله إلى متغير كمي مستمر لحساب متوسط مدة الجلسات والانحراف المعياري.

ننفذ هذا السيناريو عبر خطوة البيانات الآتية التي تجمع بين الاستخلاص النصي والتحويل الرياضي:

أولاً: نستخلص الأرقام فقط باستخدام تركيبة الحفظ الرقمي: Duration_Char = COMPRESS(Clinical_Notes, '', 'kd');.
ثانياً: نحول النتيجة النصية إلى متغير رقمي حقيقي باستخدام دالة الإدخال التحويلي INPUT: Duration_Num = INPUT(Duration_Char, BEST8.);.
ينتج عن ذلك إنشاء متغير عددي نقي يحتوي على القيم 45 و 60 و 30 على التوالي، وهو ما يتيح تمريره مباشرة إلى إجراء PROC MEANS لحساب المؤشرات الإحصائية بدقة متناهية ودون أي أخطاء تحويلية (Invalid Data Warnings) في سجل النظام (SAS Log).

11.3 السيناريو الثالث: توحيد وتنسيق الأسماء المركبة والمسميات المهنية

في سجلات الموارد البشرية والمسوح المهنية، قد تتضمن حقول المسميات الوظيفية رموزاً عشوائية وألقاباً مسبوقة بعلامات ترقيم غير معيارية، مثل 'Senior Data Analyst / (Consultant) - Level 2'. لتنظيف هذا المسمى بحيث يتم استبعاد علامات الترقيم والرموز الخاصة مع الإبقاء على الكلمات والأرقام مفصولة بمسافات نظامية متناسقة، نستخدم استراتيجية تجمع بين دوال COMPRESS و COMPBL و STRIP.

نقوم أولاً بتطبيق COMPRESS لحذف علامات الترقيم المستهدفة: Step1 = COMPRESS(Job_Title, '/()-');.
ثم نطبق دالة COMPBL لتقليص المسافات المتبقية: Step2 = COMPBL(Step1);.
وأخيراً نطبق STRIP لإزالة أي فراغات طرفية: Final_Title = STRIP(Step2);.
تتحول السلسلة المشوهة بنجاح إلى المسمى المهني المنضبط: 'Senior Data Analyst Consultant Level 2'، مما يسهل عمليات الفهرسة والتصنيف الوظيفي عبر مختلف قطاعات المؤسسة.

12. أفضل الممارسات، تحسين الأداء، وتفادي الأخطاء الشائعة عند استخدام COMPRESS

12.1 تحسين كفاءة التنفيذ واستهلاك الذاكرة في مجموعات البيانات الضخمة (Big Data)

عند التعامل مع مجموعات بيانات ضخمة (Big Data) تتجاوز مئات الملايين من السجلات أو عشرات الجيجابايت، يصبح الأداء الحوسبي واستهلاك الذاكرة المعيار الأهم لتقييم جودة الكود البرمجي. لتحقيق أقصى كفاءة عند استخدام دالة COMPRESS، يجب اتباع الإرشادات الهندسية التالية:

  • التحديد الصريح لأطوال المتغيرات (Length Optimization): احرص دائماً على وضع عبارة LENGTH قبل استدعاء الدالة لتعريف الطول الفعلي المتوقع للمتغير الناتج. ترك SAS لتعيين الطول الافتراضي بناءً على المتغير المصدر يؤدي إلى تضخيم غير مبرر لحجم ملف البيانات على القرص وبطء عمليات القراءة والكتابة (I/O Bottlenecks).
  • تجنب استدعاء الدوال المتداخلة غير الضرورية داخل الحلقات: دمج العمليات النصية في استدعاء واحد لدالة COMPRESS باستخدام المعدلات المتعددة بدلاً من استدعاءات متتالية متعددة يقلل من دورات المعالجة داخل ناقل البيانات (PDV) بنسبة قد تصل إلى 40%.
  • الأداء في البيئات السحابية SAS Viya: في بيئة SAS Viya ومحرك الحوسبة السحابية الموزعة (CAS Engine)، تعمل دالة COMPRESS كدالة متعددة الخيوط (Multi-threaded) مدعومة بالكامل، مما يتيح توزيع معالجة السلاسل النصية على أنوية المعالجة المتعددة بالتوازي، شريطة تفادي استخدام دوال الماكرو المعقدة داخل تعبير التنظيف نفسه.

12.2 الأخطاء الشائعة في كتابة الأكواد وكيفية تفاديها

يقع العديد من المحللين في أخطاء برمجية شائعة عند استخدام دالة COMPRESS تؤدي إلى نتائج غير متوقعة أو تحذيرات في سجل التنفيذ. نستعرض أبرز هذه الأخطاء وسبل تفاديها:

  • خطأ نسيان المعامل الثاني عند استخدام وسائط التعديل: يُعد هذا الخطأ الأكثر شيوعاً على الإطلاق؛ حيث يقوم المبرمج بكتابة New_Var = COMPRESS(Old_Var, 'd'); ظناً منه أنه يحذف الأرقام، بينما الواقع البرمجي هو أنه يطلب من SAS حذف الحرف ‘d’ الصغير فقط! الصياغة الصحيحة تتطلب حتماً تمرير سلسلة فارغة في المعامل الثاني: COMPRESS(Old_Var, '', 'd').
  • إساءة استخدام معدل تجاهل الحالة ‘i’: استخدام المعدل 'i' يكون مجدياً فقط عند تمرير أحرف هجائية محددة في المعامل الثاني مثل COMPRESS(Text, 'abc', 'i') لحذف حروف A و B و C بصيغتيها الكبيرة والصغيرة. استخدامه مع الأرقام أو علامات الترقيم ليس له أي أثر وظيفي وقد يربك المبرمجين الآخرين الذين يراجعون الكود.
  • التعامل مع القيم المفقودة (Missing Values): إذا كانت قيمة المتغير النصي المصدر مفقودة (Missing Value / Blank)، فإن دالة COMPRESS تُرجع سلسلة فارغة مفقودة بأمان تام ودون إيقاف تنفيذ البرنامج أو إصدار أخطاء حرجة، مما يجعلها آمنة تماماً في خطوط الإنتاج المؤتمتة.

12.3 خلاصة وتوصيات نهائية لمحللي ومبرمجي SAS

تمثل دالة COMPRESS جوهرة برمجية حقيقية في لغة SAS تجمع بين بساطة البنية النحوية وعمق القدرات الوظيفية. إن إتقان استخدام هذه الدالة، وفهم أسرار وسائط التعديل المتنوعة، والتحول من التفكير التقليدي القائم على “الحذف اليدوي للرموز” إلى التفكير التحليلي القائم على “الحفظ الانتقائي للفئات المحرفية عبر المعدل ‘k'”، يمثل نقلة نوعية في كفاءة واحترافية محلل البيانات.

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

خاتمة شاملة (Conclusion)

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

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

References

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

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