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

SAS: كيفية استخدام PROC FREQ حسب المجموعة


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

ومع تزايد تعقيد مجموعات البيانات الحديثة وتعدد مستويات القياس فيها، يغدو التحليل التجميعي الإجمالي غير كافٍ للإحاطة بالأنماط الدقيقة الكامنة وراء الفئات الفرعية للمجتمع الإحصائي. ومن هنا تبرز الحاجة الملحة إلى تقنيات التحليل حسب المجموعات (Subgroup Analysis)، والتي تتيح تشريح الظاهرة المدروسة عبر طبقات ديموغرافية، أو قطاعات تجريبية، أو وحدات تنظيمية منفصلة. إن استخدام عبارة BY بالتكامل مع إجراء PROC FREQ يمنح الباحثين قدرة استثنائية على تكرار خوارزميات الحساب التكراري بصورة مستقلة ومتوازية لكل مجموعة فرعية، مما يكشف عن التباينات الهيكلية ويحول دون الوقوع في أخطاء التفسير الناجمة عن خلط التأثيرات التفاعلية للبيانات المجمعة.

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

1. مقدمة شاملة حول إجراء PROC FREQ وأهميته في التحليل الإحصائي

1.1 مفهوم إجراء PROC FREQ في بيئة SAS

يمثل إجراء PROC FREQ (المشتق من مصطلح Frequency Procedure) الحجر الزاوية في منظومة التحليل الاستكشافي للبيانات داخل منصة SAS، حيث يتخصص هذا الإجراء الوظيفي في تفكيك وتحليل المتغيرات الفئوية المنفصلة (Discrete and Categorical Variables) وتوليد جداول التوزيع التكراري أحادية وثنائية ومتعددة الأبعاد. وعلى خلاف الإجراءات الإحصائية الموجهة نحو المتغيرات المتصلة، يعمل PROC FREQ على إحصاء عدد مرات ظهور كل مستوى من مستويات المتغير (Levels/Categories)، وحساب التكرارات النسبية والتراكمية التي تعكس الوزن النسبي لكل فئة ضمن إجمالي المجتمع المدروس، مما يجعله خطوة أولى محورية لا غنى عنها في مرحلة تنظيف البيانات وفحص جودتها قبل الانتقال إلى النمذجة المتقدمة.

تكمن الأهمية المنهجية لحساب التكرارات البسيطة (Absolute Frequencies) والنسب المئوية التراكمية (Cumulative Percentages) في تقديم وصف كمي دقيق لتوزيع المشاهدات، مما يتيح للباحث رصد الانحرافات التوزيعية، وتحديد الفئات النادرة (Sparse Categories)، والكشف عن القيم الشاذة أو الأخطاء الإدخالية في السجلات النصية والرمزية. وتبرز الفروق الجوهرية بين تلخيص البيانات المستمرة عبر إجراءات مثل PROC MEANS أو PROC UNIVARIATE وتلخيصها عبر PROC FREQ في أن الأول يركز على مقاييس النزعة المركزية والتشتت (كالمتوسط الحسابي والانحراف المعياري)، بينما يركز الثاني على البنية التكرارية والاحتمالية لاحتمالات الحدوث لكل فئة قائمة بذاتها، مما يوفر رؤى عميقة حول الأنماط التوزيعية النوعية للمتغيرات المستهدفة.

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

1.2 الحاجة إلى التحليل الإحصائي حسب المجموعات (Subgroup Analysis)

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

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

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

1.3 الهيكل العام لكتابة تعليمات PROC FREQ

تتميز لغة SAS ببنية برمجية معيارية ومنطقية تسهل كتابة الشيفرات وقراءتها، حيث يبدأ الهيكل الأساسي لإجراء PROC FREQ باستدعاء الكلمة المفتاحية PROC FREQ متبوعة بوسيطة تحديد مجموعة البيانات المدخلة عبر خيار DATA=dataset_name. في حال إغفال تحديد مجموعة البيانات، يعتمد محرك SAS تلقائياً على آخر مجموعة بيانات تم إنشاؤها أو تعديلها في جلسة العمل الحالية (المعروفة بـ &_LAST_&)، إلا أن الممارسات البرمجية الرصينة تقتضي التحديد الصريح لاسم الجدول لضمان دقة التتبع وتفادي الأخطاء التنفيذية غير المقصودة في بيئات العمل المعقدة.

يحتل الأمر TABLES موقع القلب النابض داخل كتلة إجراء PROC FREQ، حيث يُستخدم لتحديد المتغير أو المتغيرات الفئوية المطلوب استخراج جداول التكرار لها. تتيح عبارة TABLES مرونة فائقة في توليد جداول أحادية البعد عبر كتابة اسم المتغير مفرداً (مثل TABLES gender;)، أو جداول تقاطعية ثنائية ومتعددة الأبعاد باستخدام مؤثر الضرب المتقاطع (مثل TABLES treatment * outcome;). كما يمكن تضمين خيارات إحصائية وتنسيقية متعددة بعد كتابة علامة الشرطة المائلة (/)، مما يمنح المحلل تحكماً كاملاً في المقاييس الإحصائية المعروضة، وطرق عرض النسب، والاختبارات الفرضية المرتبطة بالجداول.

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

2. الصيغة البرمجية الأساسية لعبارة BY مع PROC FREQ

2.1 التفكيك النحوي (Syntax Breakdown) لعبارة BY

تُعد عبارة BY إحدى أقوى العبارات الهيكلية في لغة SAS، وموقعها الصحيح داخل كتلة إجراء PROC FREQ يكون بين عبارة البدء PROC FREQ DATA=...; وعبارة الإنهاء والتنفيذ RUN;. عند إدراج عبارة BY، فإنها تعمل كموجه إجرائي للمحرك الداخلي، وتأمر النظام بتقسيم تدفق البيانات إلى تدفقات فرعية مستقلة، بحيث يتم تنفيذ التحليل الإحصائي المحدد في عبارة TABLES بشكل منفصل ومعزول تماماً لكل مستوى من مستويات المتغير المذكور في عبارة BY، دون أي تداخل في الحسابات التكرارية بين تلك المستويات.

يتطلب الفهم الدقيق للبنية النحوية التمييز الواضح بين متغير التقسيم أو التجميع (Grouping Variable) المدرج تحت عبارة BY، ومتغير التحليل المستهدف (Analysis Variable) المدرج تحت عبارة TABLES. فعلى سبيل المثال، إذا كانت الشيفرة البرمجية مكتوبة بالصيغة: BY Clinic; TABLES Diagnosis;، فإن المتغير Clinic هو متغير التجميع الذي يقسم مجموعة البيانات إلى عيادات منفصلة، بينما المتغير Diagnosis هو متغير التحليل الذي سيتم حساب تكراراته ونسبه المئوية بشكل مستقل داخل كل عيادة، مما ينشئ مخرجات تحليلية منفصلة لكل موقع سريري على حدة.

تتجلى العلاقة التفاعلية بين عبارة BY وعبارة TABLES في أن عبارة BY تؤثر مباشرة على نطاق مجتمع الدراسة (Population Base) الذي تُحسب النسب المئوية بالنسبة إليه؛ فبدلاً من حساب النسبة المئوية للتشخيص استناداً إلى إجمالي المرضى في جميع العيادات، يؤدي وجود عبارة BY إلى جعل المقام الحسابي للنسبة المئوية مساوياً لإجمالي مرضى العيادة المحددة فقط (مجموع تكرارات المجموعة الفرعية = 100%). هذا التأثير الإجرائي ينعكس أيضاً على واجهة المخرجات؛ حيث يولد نظام SAS عنواناً فرعياً تلقائياً يُعرف بسطر التجميع (BY-line) يفصل بين جداول المجموعات المختلفة بوضوح تام.

2.2 الفرق بين متغير التجميع ومتغير التكرار

من الناحية المنهجية والإجرائية، يمثل متغير التجميع (Grouping/BY Variable) المعيار التصنيفي الذي تُفرز وتُقسّم بناءً عليه مصفوفة البيانات الكلية إلى كتل معالجة فرعية، وتتمثل وظيفته الأساسية في ضبط حدود المجموعات التي سيتم إجراء العمليات الحسابية داخل نطاقها المغلق. في المقابل، يمثل متغير التكرار (Frequency/Analysis Variable) الخاصية أو السمة الفئوية المراد قياس وتوصيف توزيعها الاحتمالي ورصد أنماط ظهور مستوياتها داخل كل مجموعة فرعية حددها متغير التجميع.

يدعم نظام SAS استخدام كلا النمطين البيانيين: المتغيرات النصية (Character Variables) والمتغيرات العددية (Numeric Variables) كمتغيرات تجميع أو متغيرات تكرار، ولكن مع مراعاة بعض القواعد الصارمة. ففي المتغيرات النصية، يعتمد محرك SAS على القيم الحرفية الدقيقة بما في ذلك حساسية حالة الأحرف والمسافات البيضاء للفصل بين الفئات، بينما في المتغيرات العددية، يمكن للمحرك التعامل مع الأرقام الصحيحة أو العشرية، مع إمكانية تطبيق التنسيقات (Formats) لتجميع القيم العددية في فئات وصفية قبل تمريرها للتحليل.

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

2.3 آلية معالجة المحرك البرمجي لـ SAS لبيانات BY Groups

لفهم كيفية تعامل محرك SAS الداخلي مع معالجة البيانات المقسمة بعبارة BY، يجب إدراك مفهوم “المعالجة المتسلسلة للمجموعات” (Sequential Group Processing). عند تشغيل الإجراء، يقرأ المحرك السجلات واحداً تلو الآخر عبر مؤشر الذاكرة المؤقتة المعروف بناقل البيانات البرمجي (Program Data Vector – PDV). ومع كل سجل جديد، يقارن المحرك قيمة متغير التجميع في السجل الحالي مع قيمته في السجل السابق لتحديد ما إذا كان السجل يمثل بداية مجموعة جديدة أو استمراراً للمجموعة الحالية.

تتم إدارة هذه العملية داخلياً عبر متغيرين مؤقتين تولدهما البيئة تلقائياً هما FIRST.variable و LAST.variable. عند مصادفة السجل الأول لمجموعة جديدة (حيث تكون قيمة FIRST.byvar = 1)، يقوم محرك SAS تلقائياً بتصفير وإعادة تعيين كافة عدادات التكرار ومجمعات النسب المئوية في الذاكرة المؤقتة المخصصة لإجراء PROC FREQ. بعد ذلك، يستمر الإجراء في تجميع وحساب التكرارات طالما كانت السجلات تنتمي لنفس المجموعة، حتى يصل إلى السجل الأخير منها (حيث تكون قيمة LAST.byvar = 1)، فيقوم بطباعة الجدول التكراري الكامل لتلك المجموعة وإفراغ الذاكرة المؤقتة تمهيداً للمجموعة التالية.

تتميز هذه الآلية بكفاءة بالغة في إدارة موارد النظام ومساحة الذاكرة العشوائية (RAM)؛ فبدلاً من تحميل وتجميع الجداول التكرارية لكافة المجموعات الفرعية في مصفوفة ضخمة واحدة داخل الذاكرة، يتعامل النظام مع مجموعة فرعية واحدة في كل لحظة زمنية. كما يتولى نظام تسليم المخرجات في SAS توليد عناوين المجموعات الفرعية تلقائياً في شاشة النتائج عبر ما يسمى بترويسة BY-line، والتي تعرض اسم متغير التجميع وقيمته الحالية أعلى كل جدول تكراري، مما يمنح التقارير وضوحاً وتنظيماً فائقين.

3. المتطلب القبلي الإلزامي: فرز البيانات باستخدام PROC SORT

3.1 اشتراطات الترتيب المسبق لعبارة BY

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

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

ERROR: Data set WORK.MYDATA is not sorted in ascending sequence. The current BY group has BY-variable = …

هذا الخطأ الحاسم (BY-line Error) يمنع توليد الجداول التكرارية ويوقف تنفيذ الخطوات البرمجية اللاحقة المعتمدة عليها، مما يبرز أهمية التحقق المسبق من جاهزية البيانات وهيكلها الترتيبي.

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

3.2 الصيغة البرمجية لتنفيذ إجراء PROC SORT

يُعد إجراء PROC SORT الأداة المعيارية المخصصة لإعادة هيكلة وترتيب السجلات داخل مجموعات بيانات SAS. تتكون البنية النحوية الأساسية لهذا الإجراء من استدعاء الأمر متبوعاً بتحديد مجموعة البيانات المصدر المراد فرزها عبر وسيطة DATA=، ثم كتابة عبارة BY التي يُحدد فيها متغير أو متغيرات الفرز، وتنتهي الكتلة البرمجية بعبارة RUN;، كما في الصيغة التوضيحية التالية:

PROC SORT DATA=work.input_dataset OUT=work.sorted_dataset;
    BY Grouping_Variable;
RUN;

بشكل افتراضي، يقوم إجراء PROC SORT بترتيب البيانات وفقاً لترتيب تصاعدي (Ascending Order)؛ حيث تأتي القيم الصغرى قبل الكبرى عددياً، والحروف الأولى أبجدياً (A إلى Z) قبل اللاحقة. وإذا رغب المحلل في فرز البيانات ترتيباً تنازلياً، يتعين عليه إدراج الكلمة المفتاحية DESCENDING مباشرة قبل اسم المتغير المستهدف داخل عبارة BY (مثل BY DESCENDING Grouping_Variable;). ومن الممارسات البرمجية بالغة الأهمية استخدام خيار OUT= لتخزين البيانات المرتبة في مجموعة بيانات جديدة ومستقلة، مما يحمي الملف الأصلي من الكتابة الفوقية (Overwriting) ويتيح العودة إليه في حال حدوث أي خطأ إجرائي.

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

3.3 التحقق من ترتيب البيانات قبل تشغيل PROC FREQ

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

بالإضافة إلى التحقق الوصفي عبر PROC CONTENTS، يُستحسن استعراض عينة بصرية سريعة من السجلات المرتبة باستخدام إجراء PROC PRINT مقترناً بخيار تحديد عدد المشاهدات (OBS=20). يتيح هذا الفحص العيني للمحلل التأكد من كيفية تعامل إجراء الفرز مع القيم المفقودة (Missing Values)؛ إذ يضع محرك SAS القيم العددية المفقودة (الممثلة بنقطة .) والقيم النصية المفقودة (الممثلة بفراغ) في مقدمة الترتيب التصاعدي قبل أصغر قيمة فعلية، وهو ما يقتضي انتباه الباحث حتى لا تؤثر هذه السجلات الفارغة على منطق التحليل اللاحق.

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

4. التطبيق العملي خطوة بخطوة: بناء نموذج البيانات وتشغيل التحليل

4.1 إنشاء مجموعة البيانات التجريبية (Data Step)

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

تتضمن الشيفرة البرمجية التالية تعريف ثلاثة متغيرات أساسية: المتغير النصي Team الذي يمثل اسم الفريق (متغير التجميع)، والمتغير النصي Position الذي يمثل مركز لعب اللاعب كحارس أو مهاجم (متغير التحليل التكراري)، والمتغير العددي Points الذي يسجل عدد النقاط الإجمالية للاعب. نستخدم علامة الدولار ($) بعد أسماء المتغيرات النصية في عبارة INPUT لإعلام مترجم SAS بنوعها البياني، مع تغذية البيانات مباشرة عبر عبارة DATALINES; (أو CARDS;):

/* إنشاء مجموعة البيانات التجريبية للاعبي كرة السلة */
DATA basketball_data;
    INPUT Team $ Position $ Points;
    DATALINES;
A Guard 15
A Guard 22
A Forward 18
A Forward 12
A Forward 25
A Guard 19
B Guard 30
B Forward 14
B Guard 28
B Guard 10
B Forward 20
B Forward 16
;
RUN;

عقب تشغيل هذه الكتلة البرمجية، تتشكل مجموعة بيانات مؤقتة باسم basketball_data في مكتبة WORK تحتوي على 12 مشهداً موزعة بالتساوي بين الفريقين A و B، وتشمل توزيعات متباينة لمراكز اللعب. يمثل هذا النموذج المعياري بيئة مثالية لاختبار خوارزميات التكرار المجمعة، حيث يتيح للباحث التحقق اليدوي المباشر من صحة النتائج التكرارية الصادرة ومقارنتها بالمدخلات الأصلية بدقة متناهية.

PROC FREQ by group in SAS
PROC FREQ by group in SAS

4.2 كتابة وتنفيذ شيفرة PROC FREQ المجمعة

بعد تجهيز مصفوفة البيانات الأولية، تتطلب المعايير المنهجية لـ SAS البدء بخطوة الفرز الإلزامية لترتيب السجلات وفقاً لمتغير الفريق Team لضمان استجابة المحرك البرمجي لعبارة BY بسلاسة. يتم تمرير الجدول الناتج من الفرز مباشرة إلى إجراء PROC FREQ، مع تحديد متغير المركز Position في عبارة TABLES للحصول على التوزيع التكراري لمراكز اللاعبين داخل كل فريق بشكل مستقل.

توضح الشيفرة البرمجية الكاملة التالية تسلسل العمليات من الفرز إلى التحليل التكراري، مع توثيق كل مرحلة بالتعليقات التفسيرية لضمان قابلية القراءة وإعادة الاستخدام:

/* الخطوة الأولى: فرز البيانات حسب متغير التجميع Team */
PROC SORT DATA=basketball_data OUT=sorted_basketball;
    BY Team;
RUN;

/* الخطوة الثانية: تشغيل إجراء التكرارات PROC FREQ حسب كل فريق */
PROC FREQ DATA=sorted_basketball;
    BY Team;
    TABLES Position;
RUN;

عند إرسال هذه الشيفرة إلى محرك المعالجة، يقوم الإجراء بفصل مخرجات الفريق Team = A تماماً عن مخرجات الفريق Team = B. يتم بناء جدول تكراري مستقل لكل فريق يحتوي على توزيع المراكز (Guard و Forward) الخاص بلاعبي ذلك الفريق فقط، مع حساب النسب المئوية والتكرارات التراكمية بناءً على الحجم الكلي لعينة ذلك الفريق (وهو 6 لاعبين لكل فريق)، مما يعكس الأنماط التكتيكية والتشكيلية لكل فريق بمعزل تام عن الآخر دون حدوث أي خلط في الحسابات التكرارية المشتركة.

4.3 التحقق من صحة التنفيذ وفحص سجل العمليات (SAS Log)

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

يقدم السجل معلومات تفصيلية دقيقة حول عدد المشاهدات المقروءة والمكتوبة في كل خطوة؛ حيث يوضح أن خطوة PROC SORT قرأت 12 مشهداً وأخرجت 12 مشهداً مرتباً، تلتها خطوة PROC FREQ التي قامت بمعالجة مجموعتين فرعيتين مستقلتين (Team A و Team B) تتضمن كل منهما 6 مشاهدات. كما يعرض السجل إحصاءات استهلاك الموارد مثل زمن وحدة المعالجة المركزية (CPU Time) والزمن الحقيقي المنقضي (Real Time)، مما يؤكد كفاءة وسرعة التنفيذ.

تكتمل عملية التحقق بمطابقة التكرارات الجزئية الظاهرة في الجداول الإحصائية للمخرجات مع السجلات اليدوية؛ فإذا أظهر جدول الفريق A وجود 3 حراس (Guards) و 3 مهاجمين (Forwards)، بينما أظهر الفريق B وجود 3 حراس و 3 مهاجمين أيضاً، فإن هذه الأرقام تتطابق تماماً مع بيانات الدخل في خطوة DATA Step الأصلية. هذا التطابق يؤكد سلامة تنفيذ الشيفرة وخلوها من أي تحيزات بيانية أو أخطاء معالجة خفية.

5. قراءة وتفسير المخرجات الإحصائية للتكرارات المجمعة

5.1 تحليل أعمدة جدول التكرارات الإحصائي

تولد واجهة مخرجات SAS عند تشغيل إجراء PROC FREQ جدولاً معيارياً غنياً بالمؤشرات الوصفية يتألف من أربعة أعمدة إحصائية رئيسية لكل فئة من فئات المتغير قيد التحليل. لفهم وتفسير هذه المخرجات الأكاديمية بدقة، يجب تفكيك الدلالة الرياضية والإحصائية لكل عمود على النحو الموضح في الهيكل التالي:

  • التكرار المطلق (Frequency): يمثل العدد الفعلي البسيط للمشاهدات أو السجلات التي تنتمي لفئة معينة داخل المجموعة الفرعية الحالية؛ وهو مقياس عددي خام يعكس كثافة التواجد المباشر للفئة دون نسبها للمجموع الكلي.
  • النسبة المئوية (Percent): تمثل الوزن النسبي للفئة محسوباً كحاصل قسمة تكرار الفئة على إجمالي تكرارات المجموعة الفرعية مضروباً في 100. في وجود عبارة BY، يكون مجموع النسب المئوية لكافة فئات المتغير مساوياً لـ 100% داخل كل جدول منفصل.
  • التكرار التراكمي (Cumulative Frequency): يمثل المجموع التراكمي التصاعدي لتكرارات الفئة الحالية مضافاً إليها تكرارات كافة الفئات التي تسبقها في ترتيب الجدول؛ ويصل هذا الرقم في الصف الأخير إلى حجم العينة الكلي للمجموعة الفرعية.
  • النسبة المئوية التراكمية (Cumulative Percent): تمثل النسبة المئوية المتجمعة صعوداً من الفئة الأولى حتى الفئة الحالية؛ وهي تفيد في معرفة النسبة الإجمالية للحالات التي تقع عند مستوى معين أو أدنى منه، وتصل حتماً إلى 100.00% عند الصف النهائي للجدول.

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

5.2 مقارنة المجموعات الفرعية وتفسير الفروق التوزيعية

عند استعراض جداول التكرار المجمعة لكل من الفريقين الرياضيين في مثالنا العملي، يظهر بوضوح كيف تتيح مخرجات عبارة BY المقارنة البينية السريعة للأنماط التوزيعية. ففي جدول Team = A، نجد أن التكرارات تتوزع بواقع 3 لاعبين في مركز الهجوم (50%) و3 لاعبين في مركز الحراسة (50%). وفي المقابل، يكشف جدول Team = B عن توزيع متطابق في التكرارات المطلقة لمراكز اللعب ولكن مع فروق دقيقة قد تظهر في متغيرات أخرى كالنقاط أو المتغيرات التابعة الأخرى في دراسات أكثر تعقيداً.

تتيح المقارنة المنهجية بين الجداول تقييم التوازن العددي وتوزيع المشاهدات عبر الخلايا المختلفة؛ فلو افترضنا أن أحد الفرق يمتلك 5 حراس ومهاجماً واحداً فقط (83.3% مقابل 16.7%)، فإن هذا التباين التوزيعي الصارخ يمنح المحلل مؤشراً فورياً على وجود نمط تكتيكي أو مشكلة نقص في مراكز معينة داخل تلك المجموعة الفرعية مقارنة بنظيراتها المتوازنة، وهو نوع الاستنتاجات التي لا يمكن استخلاصها أبداً من جدول مجمع يدمج كافة اللاعبين في رقم إجمالي واحد.

كما تساعد هذه الجداول في تحديد الفئات السائدة (Dominant Categories) والفئات النادرة (Sparse/Rare Categories) داخل كل قطاع سكاني أو تجريبي؛ حيث إن اكتشاف فئة نادرة داخل مجموعة فرعية معينة ينبه المحلل إلى ضرورة توخي الحذر عند تطبيق اختبارات الفروق المعلمية أو الاستدلالية المتقدمة التي تشترط حداً أدنى من التكرارات المتوقعة في كل خلية لتفادي التقديرات الإحصائية المتحيزة.

5.3 حساب المؤشرات الإحصائية الوصفية المرتبطة بالجداول

لا تتوقف القراءة الأكاديمية للمخرجات عند مجرد استعراض الأرقام الجاهزة، بل تمتد إلى التحقق اليدوي الرياضي من صحة النسب النسبية (Relative Proportions) للتأكد من اتساق القياسات الإحصائية. يُحسب التناسب النسبي للفئة $i$ داخل المجموعة $j$ بالمعادلة البسيطة:

Pij = (nij / Nj) × 100

حيث يمثل $n_{ij}$ تكرار الفئة داخل المجموعة، بينما يمثل $N_j$ الحجم الكلي للمجموعة الفرعية $j$. إن إجراء هذا الحساب يدعم موثوقية النتائج ويضمن فهم الباحث للآلية التي يبني بها برنامج SAS جداوله التكرارية.

تسهم هذه المؤشرات الوصفية في استنباط دلالات التباين بين المجموعات وتقييم مدى كفاية أحجام العينات (Sample Size Adequacy) في كل فئة فرعية. وفي السياق الأكاديمي والتقارير المحكمة، تُصاغ هذه النتائج بلغة علمية إحصائية رصينة؛ كأن يُذكر: “أظهر التحليل التكراري الطبقي لمراكز اللاعبين تساوياً تاماً في نسب التوزيع بين الحراس والمهاجمين داخل الفريقين (50.0% لكل مركز، n=3 لكل فئة ضمن حجم عينة فرعي N=6)، مما يشير إلى تماثل البنية التشكيلية للفرق قيد المقارنة عند هذا المستوى الإحصائي.”

6. تخصيص المخرجات والتحكم في الجداول عبر خيارات عبارة TABLES

6.1 إخفاء الأعمدة غير المرغوب فيها (NOPERCENT, NOCUM)

في كثير من التقارير التنفيذية والأوراق العلمية المنشورة، قد لا يحتاج الباحث إلى كافة الأعمدة الإحصائية الافتراضية التي يولدها إجراء PROC FREQ؛ إذ قد يؤدي عرض التكرارات التراكمية لمتغيرات اسمية غير ترتيبية (Nominal Variables) كفصائل الدم أو الجنسية إلى تشويش بصري لا طائل تحته من الناحية الإحصائية. يوفر إجراء PROC FREQ مجموعة من الخيارات التحكمية التي تُكتب بعد علامة الشرطة المائلة (/) في عبارة TABLES لتقليص وتبسيط هيكل الجداول التكرارية.

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

يمكن دمج هذين الخيارين معاً في أمر واحد للحصول على جداول فائقة الاختصار تعرض التكرار العددي فقط، كما يتضح في الصيغة التالية:

PROC FREQ DATA=sorted_basketball;
    BY Team;
    TABLES Position / NOCUM NOPERCENT;
RUN;

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

6.2 إعادة ترتيب الفئات باستخدام خيار ORDER=

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

يوضح الجدول التالي الخيارات المعيارية المتاحة لتحديد ترتيب الفئات وتطبيقاتها المنهجية:

الخيار البرمجي آلية الترتيب الاستخدام الأكاديمي الأمثل
ORDER=FREQ تنازلياً حسب التكرار الأكبر تحليل باريتو وتحديد الفئات الأكثر شيوعاً أو خطورة فوراً
ORDER=FORMATTED أبجدياً حسب التسمية المنسقة (الافتراضي) المتغيرات الاسمية المشفرة ذات التسميات التوضيحية المنظمة
ORDER=DATA حسب أسبقية الورود في ملف البيانات المتغيرات الرتبية المدخلة بتسلسل منطقي مسبق (مثل: منخفض، متوسط، مرتفع)
ORDER=INTERNAL حسب القيم الخام الأصلية غير المنسقة التحكم بالترتيب الرقمي الدقيق للأكواد قبل تطبيق التنسيق النصي

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

6.3 التحكم في التنسيقات وعرض التسميات (Labels and Formats)

لإضفاء الطابع الاحترافي والأكاديمي على مخرجات PROC FREQ، تتيح بيئة SAS ربط المتغيرات بتسميات وصفية طويلة (Variable Labels) وتنسيقات قيم مخصصة (Value Formats) عبر إجراء PROC FORMAT. يُعد هذا النهج من أفضل الممارسات المتبعة في إعداد التقارير؛ حيث يسمح بتخزين البيانات في شكل أكواد رقمية أو نصية مقتضبة داخل قواعد البيانات لتوفير المساحة وسرعة المعالجة، مع عرضها بتسميات لغوية كاملة وشديدة الوضوح عند توليد الجداول التكرارية.

يمكن للمحلل إنشاء التنسيق المخصص ودمجه داخل إجراء التكرار عبر الشيفرة التالية:

/* تعريف التنسيقات الوصفية للرموز */
PROC FORMAT;
    VALUE $posfmt ‘Guard’=’حارس الفريق المدافع’
                  ‘Forward’=’مهاجم الفريق المتقدم’;
RUN;

/* تشغيل الإجراء مع تطبيق التنسيق والتسميات */
PROC FREQ DATA=sorted_basketball;
    BY Team;
    TABLES Position;
    FORMAT Position $posfmt.;
    LABEL Position=’المركز التكتيكي للاعب’ Team=’المجموعة الرياضية’;
RUN;

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

7. التعامل مع القيم المفقودة (Missing Values) عبر المجموعات

7.1 السلوك الافتراضي لـ PROC FREQ مع القيم المفقودة

تُمثل معالجة البيانات المفقودة (Missing Data Management) تحدياً منهجياً بالغ الحساسية في التحليل الإحصائي؛ إذ إن سوء التعامل معها قد يؤدي إلى تشويه التوزيعات التكرارية وتقدير نسب مئوية غير دقيقة. يتمثل السلوك الافتراضي لإجراء PROC FREQ في استبعاد المشاهدات التي تحتوي على قيم مفقودة في متغير التحليل (Analysis Variable) من حسابات النسب المئوية، والنسب التراكمية، وكافة الاختبارات الإحصائية الاستدلالية المرتبطة بالجداول.

على الرغم من استبعادها من الحسابات النسبية، لا يتجاهل SAS هذه القيم تماماً؛ بل يقوم بعرض إجمالي عدد المشاهدات المفقودة في سطر إحصائي منفصل ومستقل أسفل الجدول التكراري يحمل عنوان Frequency Missing = X. يؤدي هذا الاستبعاد الافتراضي إلى خفض حجم العينة الفعال (Effective Sample Size) الذي يُحسب على أساسه مجموع النسب المئوية، بحيث يصبح مقام النسبة المئوية مساوياً لعدد الحالات المكتملة فقط (Complete Cases) داخل المجموعة الفرعية المحددة.

من الضروري التمييز بدقة بين وجود القيمة المفقودة في متغير التحليل ووجودها في متغير التجميع (BY Variable)؛ فإذا احتوى متغير التجميع على قيمة مفقودة، فإن إجراء PROC FREQ يعامل القيمة المفقودة كمجموعة تجميعية قائمة بذاتها ويولد لها جدولاً تكرارياً منفصلاً في مقدمة المخرجات (إذا كانت البيانات مرتبة تصاعدياً)، ما لم يقم المحلل بتصفية واستبعاد هذه السجلات مسبقاً قبل خطوة الفرز والتحليل التكراري.

7.2 تضمين القيم المفقودة في الحسابات عبر خيارات MISSPRINT و MISSING

يوفر نظام SAS خيارات برمجية متقدمة داخل عبارة TABLES للتحكم في كيفية إدراج ومعالجة القيم المفقودة داخل بنية الجداول التكرارية بما يلائم الأهداف البحثية للمحلل:

  • خيار MISSPRINT: يوجه هذا الخيار محرك SAS إلى إدراج القيمة المفقودة كصف مستقل داخل الجدول التكراري وعرض تكرارها المطلق، مع استبعادها تماماً من حساب النسب المئوية والتكرارات التراكمية. يفيد هذا الخيار في إظهار الحجم العددي للمشاهدات المفقودة ضمن الجدول دون التأثير على التوزيع النسبي للفئات المكتملة.
  • خيار MISSING: يُعد هذا الخيار الأكثر حساسية وتأثيراً من الناحية الإحصائية؛ حيث يأمر النظام بمعاملة القيمة المفقودة كفئة صالحة ومستقلة تماماً (Valid Category)، ويتم إدراج تكرارها داخل المقام الإجمالي لحساب النسب المئوية والتراكمية، وتدخل في كافة العمليات الحسابية المرتبطة بالجداول.

يكتسب خيار MISSING أهمية منهجية حاسمة في دراسات استطلاعات الرأي والمسوح الاجتماعية؛ حيث يُعد امتناع المبحوث عن الإجابة (Non-response) أو إجابته بـ “لا أعلم” معلومة بحد ذاتها تعكس سلوكاً معيناً يجب قياس نسبته المئوية من إجمالي العينة المستهدفة. كما يُعد أداة محورية في التجارب السريرية لحساب معدلات تسرب المرضى (Drop-out Rates) ومقارنتها بدقة بين المجموعات العلاجية المختلفة.

توضح الشيفرة التالية التطبيق المقارن لكلا الخيارين:

/* إدراج القيم المفقودة وحساب نسبها المئوية ضمن المجموعات */
PROC FREQ DATA=sorted_basketball;
    BY Team;
    TABLES Position / MISSING;
RUN;

7.3 معالجة مشكلة المجموعات الفرعية المفقودة بالكامل

تنشأ في بعض قواعد البيانات الميدانية مشكلات هيكلية معقدة عند وجود سجلات تتضمن قيماً مفقودة في متغير التجميع (BY Variable) ذاته. إذا تُركت هذه السجلات دون معالجة، سيقوم إجراء PROC SORT بفرزها في مقدمة الملف، وسيقوم إجراء PROC FREQ بتوليد جدول تكراري كامل لمجموعة “مجهولة الهوية” (تظهر بترويسة فارغة Team = .)، وهو ما قد يسبب إرباكاً إحصائياً وتفسيرياً في التقارير النهائية للمشروع.

لتفادي هذا الخلل، يُنصح بتطبيق استراتيجيات التصفية المسبقة للبيانات قبل الوصول إلى مرحلة التحليل التكراري؛ ويمكن تحقيق ذلك إما باستخدام عبارة التصفية الشرطية WHERE Team IS NOT MISSING; أو WHERE Team > ' '; داخل خطوة الفرز أو داخل إجراء PROC FREQ مباشرة، أو باستخدام خيار التصفية في خطوة DATA Step. يوضح الكود التالي كيفية عزل البيانات المفقودة بكفاءة:

/* تصفية البيانات المفقودة في متغير التجميع قبل الفرز */
PROC SORT DATA=basketball_data(WHERE=(Team IS NOT MISSING)) OUT=clean_basketball;
    BY Team;
RUN;

من الناحية الأكاديمية الصارمة، يجب على الباحث توثيق حجم ونسبة البيانات المفقودة التي تم استبعادها من متغيرات التجميع في منهجية البحث، وتقييم ما إذا كان هذا الفقدان عشوائياً تماماً (Missing Completely at Random – MCAR) أم أنه يرتبط بنمط منهجي قد يدخل تحيزاً إحصائياً (Selection Bias) على تقديرات المجموعات المتبقية، مما يعزز الشفافية العلمية والمصداقية البحثية للدراسة.

8. تصدير النتائج وحفظ جداول التكرارات في مجموعات بيانات جديدة

8.1 إنشاء مجموعات بيانات المخرجات عبر خيار OUT=

لا تقتصر متطلبات العمل التحليلي على استعراض الجداول التكرارية في واجهة العرض البصري (Viewer)، بل تمتد في معظم مسارات العمل البرمجية المتقدمة إلى الحاجة لتخزين تلك النتائج في جداول ومجموعات بيانات SAS مستقلة لاستخدامها في مراحل معالجة لاحقة أو دمجها مع مؤشرات إحصائية أخرى. يوفر إجراء PROC FREQ آلية برمجية مباشرة لإنشاء هذه الجداول عبر خيار OUT= الملحق بعبارة TABLES.

عند تحديد خيار OUT=dataset_name، يقوم محرك الإجراء بتوليد جدول بيانات منظم يحتوي على أعمدة تمثل متغير التجميع، ومتغير التحليل، وعمود التكرار المطلق تحت اسم افتراضي هو COUNT، وعمود النسبة المئوية تحت اسم PERCENT. توضح الشيفرة التالية كيفية استخراج جدول التكرارات وحفظه:

/* حفظ مخرجات التكرار حسب المجموعة في مجموعة بيانات جديدة */
PROC FREQ DATA=sorted_basketball NOPRINT;
    BY Team;
    TABLES Position / OUT=freq_summary_data OUTREP;
RUN;

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

8.2 تخصيص وتصدير التقارير عبر نظام ODS (Output Delivery System)

يمثل نظام تسليم المخرجات ODS (Output Delivery System) أحد أعظم الابتكارات التقنية في بيئة SAS، حيث يفصل بين خوارزميات الحساب الإحصائي وطرق تنسيق وعرض النتائج، متيحاً للمحللين تصدير جداول PROC FREQ المجمعة إلى طيف واسع من الصيغ والامتدادات الاحترافية مثل Excel و PDF و HTML بجودة طباعية ونشرية فائقة دون أي جهد برمجي إضافي.

يتيح استخدام أمر ODS OUTPUT اعتراض الجداول الإحصائية الدقيقة التي يولدها الإجراء وتخزينها كجداول بيانات SAS مهيكلة، بينما يتيح استخدام وجهات مثل ODS EXCEL تصدير جداول التكرارات لكل مجموعة فرعية في أوراق عمل (Worksheets) منفصلة أو مدمجة داخل مصنف إكسل منسق وجاهز للتداول المؤسسي. توضح الشيفرة التالية كيفية تصدير تقرير تكرارات منسق إلى ملف إكسل احترافي:

/* تصدير جداول التكرارات المجمعة إلى ملف Excel خارجي */
ODS EXCEL FILE=”C:SAS_ReportsTeam_Frequency_Report.xlsx”
    OPTIONS(SHEET_NAME=’مخرجات الفرق’ EMBED_TITLES_ONCE=’ON’);

TITLE “التقرير الإحصائي للتوزيع التكراري لمراكز اللاعبين حسب الفريق”;

PROC FREQ DATA=sorted_basketball;
    BY Team;
    TABLES Position;
RUN;

ODS EXCEL CLOSE;
TITLE; /* إلغاء العنوان لضبط الجلسة البرمجية */

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

8.3 معالجة وإعادة هيكلة جدول المخرجات البرمجي

غالباً ما تتطلب خطوات التحليل والنمذجة اللاحقة إعادة تشكيل وهندسة مصفوفة البيانات الناتجة من إجراء PROC FREQ؛ حيث يتم إنتاج الجدول الناتج من خيار OUT= بنسق طولي (Long Format) يتضمن صفاً مستقلاً لكل مستوى من مستويات متغير التحليل داخل كل مجموعة. وقد تقتضي متطلبات بناء لوحات المؤشرات (Dashboards) أو التحليلات المقارنة تحويل هذا النسق إلى نسق عرضي (Wide Format) تظهر فيه فئات التحليل كأعمدة مستقلة لكل مجموعة تجميعية.

يُستخدم إجراء التحويل الهيكلي PROC TRANSPOSE لإعادة تدوير وهندسة هذه الجداول بسلاسة، كما هو موضح في الشيفرة التالية:

/* إعادة تدوير جدول التكرارات من النسق الطولي إلى النسق العرضي */
PROC TRANSPOSE DATA=freq_summary_data OUT=wide_frequency_data(DROP=_NAME_);
    BY Team;
    ID Position;
    VAR COUNT;
RUN;

يُنتج هذا التحويل جدولاً مبسطاً يحتوي على عمود يمثل الفريق (Team)، يليه عمود يمثل عدد الحراس (Guard)، وعمود يمثل عدد المهاجمين (Forward). يمثل هذا الهيكل العرضي المدخل المثالي لإجراءات التصور البياني المتقدمة مثل PROC SGPLOT لإنشاء الرسوم البيانية الشريطية المجمعة (Clustered Bar Charts)، والتي تحول الأرقام التكرارية الصماء إلى أشكال بصرية بيانية تسهل الاستيعاب الفوري للفروق التوزيعية بين المجموعات.

9. مقارنة منهجية: عبارة BY مقابل الجداول التبادلية متعددة الأبعاد (Cross-tabulations)

9.1 التحليل المتقاطع الثنائي (Two-Way Tables: var1 * var2)

يُمثل التحليل المتقاطع الثنائي أو ما يُعرف بجداول التوافق التبادلي (Cross-tabulations) الأسلوب البديل الأكثر شيوعاً لدراسة التوزيعات التكرارية المشتركة بين متغيرين فئويين في إجراء PROC FREQ. يتم استدعاء هذا التحليل بكتابة مؤثر الضرب المتقاطع بين المتغيرين في عبارة TABLES بالصيغة: TABLES var1 * var2; دون الحاجة إلى استخدام عبارة BY أو فرز البيانات مسبقاً.

تولد الجداول المتقاطعة مصفوفة مدمجة ثنائية الأبعاد تتوزع فيها مستويات المتغير الأول عبر الصفوف (Rows) ومستويات المتغير الثاني عبر الأعمدة (Columns). وتتضمن كل خلية داخل هذه المصفوفة أربعة أرقام إحصائية بالغة الأهمية: التكرار المشترك البسيط (Cell Frequency)، والنسبة المئوية من الإجمالي الكلي للجدول (Percent)، والنسبة المئوية داخل الصف الواحد (Row Percent)، والنسبة المئوية داخل العمود الواحد (Column Percent)، مما يوفر رؤية شمولية فورية لطبيعة التفاعل المشترك بين المتغيرين.

على الرغم من القوة الاستكشافية الهائلة للجداول المتقاطعة، إلا أنها تواجه حدوداً منهجية وبصرية واضحة عندما يتضخم عدد الفئات والمستويات في أحد المتغيرين أو كليهما؛ إذ يؤدي تقاطع متغير يضم 20 فئة مع متغير يضم 15 فئة إلى توليد مصفوفة تحتوي على 300 خلية يصعب على القارئ استيعابها بصرياً، وهنا يبرز التحليل الطبقي عبر عبارة BY كحل منهجي بديل لتفكيك هذه التعقيدات إلى جداول جزئية مركزة وسهلة القراءة.

9.2 أوجه التشابه والاختلاف الجوهرية بين الأسلوبين

لفهم الفروق التقنية والإحصائية الدقيقة بين استخدام عبارة BY واستخدام الجداول المتقاطعة (Cross-tabulations)، يوضح الجدول الأكاديمي المقارن التالي أبرز أبعاد التباين بين المنهجين داخل بيئة SAS:

وجه المقارنة عبارة التجميع (BY Statement) الجداول المتقاطعة (Cross-tab: A * B)
متطلب الفرز المسبق إلزامي تماماً باستخدام PROC SORT غير مطلوب؛ تتم المعالجة مباشرة
هيكل المخرجات جداول منفصلة ومستقلة لكل مجموعة فرعية مصفوفة مدمجة أحادية تجمع كافة الفئات
كفاءة إدارة الذاكرة عالية جداً؛ تعالج مجموعة تلو الأخرى تتطلب حجز مصفوفة كاملة في الذاكرة
النسب المئوية المحسوبة نسبة الفئة من إجمالي المجموعة الفرعية فقط نسب الصف، نسب العمود، والنسبة الإجمالية
الاختبارات الإحصائية اختبار أحادي يطبق داخل كل مجموعة على حدة اختبارات الاستقلالية والترافق (كاي تربيع، فيشر)

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

9.3 معايير الاختيار المنهجي بين استخدام BY أو Cross-tabulation

يتعين على المحلل الإحصائي الاستناد إلى معايير منهجية واضحة عند المفاضلة بين الاعتماد على عبارة BY أو الجداول التبادلية المتقاطعة:

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

كما يرتبط القرار بطبيعة سلاسل المعالجة الآلية (Automated Pipelines) اللاحقة؛ فالجداول المتقاطعة توفر رؤية شاملة وسريعة لباحث البيانات في مرحلة الاستكشاف الأولي، بينما توفر عبارة BY كتل بيانات متجانسة ومجزأة يسهل تمريرها إلى نماذج التنبؤ والخوارزميات الطبقية المتقدمة، مما يحقق أعلى درجات الكفاءة في إدارة مشاريع البيانات المعقدة.

10. تطبيقات متقدمة: التحليل متعدد المستويات والمتغيرات المتعددة

10.1 استخدام متغيرات تجميع متعددة في عبارة BY

تتجاوز قدرات لغة SAS حدود التجميع البسيط أحادي المتغير لتتيح إجراء تحليلات تكرارية هرمية متعددة المستويات عبر تضمين عدة متغيرات تجميعية داخل عبارة BY بالصيغة: BY Var1 Var2 Var3;. يتيح هذا النمط المتقدم تشريح البيانات عبر طبقات متداخلة (Nested Subgroups) بدقة متناهية، مثل دراسة تكرارات المراكز التكتيكية للاعبين مصنفة حسب الدولة، ثم حسب المدينة، ثم حسب الفريق.

يتطلب هذا التحليل الهرمي تطبيق فرز متعدد متطابق تماماً في خطوة PROC SORT التمهيدية؛ حيث يجب كتابة المتغيرات بنفس الترتيب التسلسلي في كلا الإجرائين لضمان انتظام مسار القراءة المتتابعة في الذاكرة. توضح الشيفرة التالية التطبيق العملي للتجميع الهرمي الثنائي:

/* فرز البيانات وفق مستويين تجميعيين: المؤتمر الرياضي ثم الفريق */
PROC SORT DATA=league_data OUT=sorted_league;
    BY Conference Team;
RUN;

/* تشغيل التكرارات الهرمية متعددة المستويات */
PROC FREQ DATA=sorted_league;
    BY Conference Team;
    TABLES Position;
RUN;

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

10.2 تحليل متغيرات تكرار متعددة في عبارة TABLES في وجود BY

تتيح عبارة TABLES في إجراء PROC FREQ مرونة استثنائية لتحليل عدة متغيرات فئوية في خطوة برمجية واحدة متزامنة مع وجود عبارة BY، وذلك عبر سرد المتغيرات مفصولة بمسافات بسيطة: TABLES VarA VarB VarC;. يؤدي هذا الأمر إلى توليد جداول تكرارية أحادية مستقلة لكل متغير من هذه المتغيرات داخل كل مجموعة فرعية حددتها عبارة BY دون الحاجة إلى تكرار كتل الأوامر البرمجية.

كما تدعم لغة SAS استخدام الأقواس الرياضية لتطبيق خيارات التنسيق المتقدمة أو توليد مصفوفات الجداول التبادلية المتعددة بكفاءة برمجية مقتضبة، كما يتضح في الشيفرة التالية:

/* تحليل متغيرات متعددة دفعة واحدة لكل فريق */
PROC FREQ DATA=sorted_basketball;
    BY Team;
    TABLES (Position Experience Status) / NOCUM;
RUN;

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

10.3 إجراء الاختبارات الإحصائية الاستدلالية لكل مجموعة فرعية

لا يقتصر إجراء PROC FREQ المقترن بعبارة BY على الوصف التكراري البسيط، بل يمتد ليشكل منصة قوية لتنفيذ الاختبارات الإحصائية الاستدلالية (Inferential Statistics) ومقاييس الارتباط بشكل مستقل لكل مجموعة فرعية عند استدعاء الجداول الثنائية داخل مجموعات BY، عبر تضمين خيارات استدلالية متقدمة مثل CHISQ لاختبار كاي تربيع للاستقلالية، وخيار EXACT لاختبار فيشر الدقيق.

توضح الشيفرة التالية كيفية حساب اختبار كاي تربيع ومعاملات الارتباط لكل فريق على حدة لدراسة العلاقة بين مركز اللاعب والحالة البدنية:

/* إجراء اختبارات الاستقلالية ومقاييس التوافق لكل مجموعة فرعية */
PROC FREQ DATA=sorted_basketball;
    BY Team;
    TABLES Position * FitnessStatus / CHISQ EXACT MEASURES;
RUN;

عند تشغيل هذه الشيفرة، يحسب محرك SAS قيمة إحصاء كاي تربيع ($\chi^2$)، ودرجات الحرية (Degrees of Freedom)، والقيمة الاحتمالية المرافقة ($p\text{-value}$) لكل فريق بشكل معزول ومستقل. وفي حال كانت أحجام العينات داخل الخلايا صغيرة جداً (أقل من 5 مشاهدات)، يُصدر خيار EXACT قيمة اختبار فيشر الدقيق (Fisher’s Exact Test) لتوفير استدلال إحصائي دقيق خالٍ من التقريبات المعلمية. كما يوفر خيار MEASURES معاملات قوة الرابطة مثل معامل فاي ($phi$) ومعامل كرامر (Cramer’s V)، مما يتيح للمحلل مقارنة قوة ودلالة العلاقات الإحصائية بين مختلف المجموعات التجريبية بدقة متناهية.

11. الأخطاء البرمجية الشائعة واستكشاف المشكلات وإصلاحها (Troubleshooting)

11.1 أخطاء عدم تطابق الترتيب (Data set is not sorted in ascending sequence)

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

لتشخيص وإصلاح هذه المشكلة الجذرية، يتعين على المحلل اتباع مسار الاستكشاف القياسي التالي:

  1. فحص سجل العمليات (SAS Log) بدقة وتحديد القيمة المحددة التي توقف عندها المحرك وأصدر عندها رسالة BY-line Error.
  2. التأكد من مطابقة أسماء وترتيب المتغيرات المدرجة في عبارة BY داخل كتلة PROC FREQ مع نظيراتها في خطوة PROC SORT السابقة حرفياً.
  3. في حال استخدام الفرز التنازلي، يجب التأكد من تضمين الكلمة المفتاحية DESCENDING في كلا الإجرائين؛ إذ إن كتابة BY DESCENDING Team; في الفرز يقتضي بالضرورة كتابة BY DESCENDING Team; في PROC FREQ أيضاً لضمان التوافق التام.

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

11.2 مشكلات حساسية حالة الأحرف والمسافات البيضاء في المتغيرات النصية

تتميز لغة SAS بالحساسية الدقيقة لحالة الأحرف اللاتينية (Case Sensitivity) عند معالجة ومقارنة المتغيرات النصية، بالإضافة إلى تأثرها الشديد بوجود المسافات البيضاء البادئة أو اللاحقة غير المرئية (Leading/Trailing Blanks). تؤدي هذه السمات إلى نشوء مشكلات هيكلية خفية تؤثر سلباً على جودة التحليل التكراري؛ حيث قد يعامل المحرك النصوص المتطابقة لغوياً مثل 'Guard' و 'guard' و 'Guard ' كثلاث فئات تجميعية منفصلة تماماً، مما يولد جداول تكرارية مشوهة ومكررة.

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

/* تنظيف وتوحيد المتغيرات النصية وإزالة المسافات الزائدة */
DATA clean_basketball_data;
    SET basketball_data;
    /* توحيد حالة الأحرف لتصبح كبيرة وإزالة الفراغات */
    Team = STRIP(UPCASE(Team));
    Position = STRIP(PROPCASE(Position));
RUN;

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

11.3 معالجة أخطاء تنسيق المخرجات وتجاوز حدود الذاكرة

عند تطبيق إجراء PROC FREQ المقترن بعبارة BY على مجموعات بيانات ضخمة تتضمن آلاف المجموعات الفرعية أو متغيرات ذات تعددية تصنيفية فائقة (High Cardinality Variables)، قد يواجه المحلل مشكلات تتعلق بتجاوز حدود الذاكرة العشوائية (Out-of-Memory Errors) أو بطء وتجمد واجهة المخرجات نتيجة محاولة النظام رسم وتوليد آلاف الجداول المرئية دفعة واحدة في عارض النتائج.

للتغلب على هذه الاختناقات الأدائية، يُنصح باتباع أفضل الممارسات التقنية التالية:

  • تفعيل خيار NOPRINT في سطر أمر PROC FREQ لإلغاء المخرجات البصرية بالكامل وتوجيه النتائج مباشرة إلى جداول بيانات عبر خيار OUT= أو جداول ODS، وهو ما يوفر أكثر من 80% من زمن المعالجة واستهلاك الذاكرة.
  • إغلاق وجهات المخرجات غير الضرورية مؤقتاً قبل تشغيل الكتل الكبيرة عبر أوامر ODS HTML CLOSE; و ODS LISTING CLOSE;، ثم إعادة فتحها بعد اكتمال الحسابات التكرارية.
  • التأكد من صحة مسارات الملفات وأذونات الكتابة عند استخدام وجهات التصدير المباشر كملفات Excel و PDF لتفادي أخطاء تعارض القفل وتوقف الإجراء التلقائي.

تضمن هذه التدابير الهندسية استقرار جلسات العمل التحليلية في SAS وحماية البيئة البرمجية من الانهيار عند معالجة المشاريع البيانية الضخمة.

12. أفضل الممارسات البرمجية وتوصيات كتابة كود SAS احترافي

12.1 كتابة شيفرات نظيفة وقابلة للقراءة وإعادة الاستخدام

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

من أفضل الممارسات المعتمدة بناء كتل برمجية قياسية تجمع بين PROC SORT و PROC FREQ بشكل متسق ومتتابع دون تشتيت وسيط، مع اعتماد تسميات معيارية واضحة لمجموعات البيانات المؤقتة والنهائية تعكس محتواها بدقة (مثل استخدام بادئات raw_ للبيانات الخام، و sort_ للبيانات المرتبة، و out_ لجداول النتائج). هذا الانضباط يسهل تتبع مسار تدفق البيانات عبر سلاسل التحليل الطويلة ويقلل من احتمالات الخطأ الإجرائي.

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

12.2 أتمتة التحليلات التكرارية باستخدام لغة الماكرو (SAS Macros)

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

توضح الشيفرة المتقدمة التالية كيفية بناء ماكرو احترافي يؤتمت عمليتي الفرز وحساب التكرارات المجمعة وتصدير الجدول لأي مجموعة بيانات وأي متغيرات يحددها المستخدم في سطر برمجي واحد:

/* بناء ماكرو لأتمتة التحليل التكراري حسب المجموعة */
%MACRO RunGroupFreq(indata=, byvar=, freqvar=, outdata=);
    /* خطوة الفرز الديناميكي */
    PROC SORT DATA=&indata. OUT=temp_sorted;
        BY &byvar.;
    RUN;

    /* خطوة حساب التكرارات وحفظ النتائج */
    PROC FREQ DATA=temp_sorted NOPRINT;
        BY &byvar.;
        TABLES &freqvar. / OUT=&outdata. NOCUM;
    RUN;

    /* حذف الجدول المؤقت */
    PROC DELETE DATA=temp_sorted; RUN;
%MEND RunGroupFreq;

/* استدعاء الماكرو لتنفيذ التحليل بديناميكية كاملة */
%RunGroupFreq(indata=basketball_data, byvar=Team, freqvar=Position, outdata=final_team_freq);

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

12.3 دليل ملخص وقائمة تدقيق سريعة للمحلل الإحصائي

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

  • جاهزية البيانات والفرز: هل تم تشغيل إجراء PROC SORT على مجموعة البيانات وفق نفس متغيرات عبارة BY وترتيبها؟ وهل تم التحقق من خلو السجل من أخطاء الترتيب؟
  • فحص ونظافة المتغيرات: هل تم توحيد حالة الأحرف وإزالة المسافات البيضاء الزائدة من المتغيرات النصية باستخدام دوال مثل UPCASE و STRIP؟
  • التعامل مع القيم المفقودة: هل تم تحديد خيار التعامل المناسب مع البيانات المفقودة (مثل MISSING أو التصفية بعبارة WHERE) لضمان دقة النسب المئوية؟
  • تخصيص الجداول: هل تم تطبيق الخيارات المطلوبة في عبارة TABLES (مثل NOCUM أو ORDER=FREQ) لتحسين وضوح ومقروئية التقرير؟
  • تصدير النتائج: هل تم تحديد خيارات الإخراج المناسبة (OUT= أو واجهات ODS) لحفظ النتائج للاستخدامات اللاحقة بكفاءة وأمان؟

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

خاتمة

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

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

References

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

looti, M. (2026, سبتمبر 2). SAS: كيفية استخدام PROC FREQ حسب المجموعة. عرب سايكلوجي. https://arabpsychology.com/sas-how-to-use-proc-freq-by-group/
looti, Mohammed. “SAS: كيفية استخدام PROC FREQ حسب المجموعة.” عرب سايكلوجي, 2 سبتمبر 2026, https://arabpsychology.com/sas-how-to-use-proc-freq-by-group/.
looti, Mohammed. “SAS: كيفية استخدام PROC FREQ حسب المجموعة.” عرب سايكلوجي. سبتمبر 2, 2026. https://arabpsychology.com/sas-how-to-use-proc-freq-by-group/.