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

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

دليل أكاديمي شامل يوضح كيفية استخدام إجراء PROC COMPARE في SAS لمقارنة مجموعات البيانات وتحليل الفروق مع أمثلة تطبيقية وتفسير دقيق للمخرجات.

تاريخ النشر

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

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

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

1. مقدمة عامة حول إجراء PROC COMPARE في بيئة SAS الإحصائية

1.1 أهمية مطابقة ومقارنة مجموعات البيانات في التحليل الإحصائي

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

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

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

1.2 التعريف بإجراء PROC COMPARE ووظائفه الأساسية

يُعد إجراء PROC COMPARE أحد الإجراءات الجوهرية المتخصصة في نظام SAS، حيث تم تصميمه خصيصاً لمقارنة محتويات وهياكل مجموعتي بيانات مختلفتين بصورة آلية وشاملة. يعمل الإجراء كأداة تدقيق متطورة تتجاوز الفحص السطحي للبيانات، إذ يقوم بتشريح مجموعتي البيانات على ثلاثة مستويات رئيسية: مستوى البيانات الوصفية (Metadata)، ومستوى سمات المتغيرات (Variable Attributes)، ومستوى القيم المسجلة في كل خلية (Data Values).

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

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

1.3 الفوائد التقنية لاستخدام PROC COMPARE في التدقيق ومراقبة الجودة

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

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

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

2. البنية النحوية الأساسية (Syntax) لإجراء PROC COMPARE

2.1 الصيغة المعيارية وتحديد مجموعتي البيانات الأساسية والمقارنة

تتميز البنية النحوية لإجراء PROC COMPARE في SAS بالبساطة والوضوح في صورتها الأساسية، مع إمكانية التوسع فيها باستخدام خيارات وعبارات متعددة للتحكم في سلوك المقارنة. تبدأ المعالجة باستدعاء الإجراء يليه تحديد مجموعتي البيانات المعنيتين بالعملية، وتنتهي كتلة التعليمات دائماً بالعبارة التوجيهية RUN; لضمان تنفيذ الإجراء في معالج البيانات.

يعتمد الإجراء على وسيطين أساسيين لتحديد المدخلات: الوسيط الأول هو BASE=، ويُستخدم لتحديد مجموعة البيانات المرجعية أو المعيارية التي تُمثل “الحقيقة المطلقة” (Ground Truth) أو النسخة المعتمدة مسبقاً. أما الوسيط الثاني فهو COMPARE= (أو اختصاراً COMP=)، ويُستخدم لتحديد مجموعة البيانات المراد اختبارها والتحقق من مدى مطابقتها للنسخة المرجعية. وتظهر الصيغة الأساسية في الكود التالي:

PROC COMPARE BASE=library.base_dataset COMPARE=library.compare_dataset; RUN;

في حال تم استدعاء الإجراء مع تحديد وسيط BASE= فقط دون تحديد وسيط COMPARE=، فإن SAS يقوم تلقائياً بمقارنة مجموعة البيانات المحددة في BASE= مع آخر مجموعة بيانات تم إنشاؤها في جلسة العمل (والتي يُشار إليها ضمنياً بالمتغير _LAST_)، وهو سلوك افتراضي يجب الانتباه إليه لتجنب إجراء مقارنات غير مقصودة.

2.2 الخيارات العامة للتحكم في آلية الفحص والمقارنة

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

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

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

2.3 الفروق الجوهرية بين مجموعة BASE ومجموعة COMPARE

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

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

في بعض سيناريوهات التدقيق المتقدمة، يُوصى بعكس مواضع المجموعتين وإجراء مقارنة ثنائية الاتجاه (Two-Way Validation)؛ أي جعل مجموعة COMPARE هي BASE في تنفيذ ثانٍ، وذلك للتأكد من عدم حجب أي تفاصيل ناتجة عن الترتيب الهيكلي، وللتحقق من أن التغييرات في النسب المئوية للفروق لا تتأثر بصغر أو كبر قيم المقام المستخدم في حساب الفروق النسبية.

3. بناء سيناريو تطبيقي عملي: إنشاء مجموعات البيانات وإجراء المقارنة

3.1 إنشاء مجموعة البيانات المرجعية الأولى (Data1)

لتوضيح الآليات الدقيقة لعمل PROC COMPARE، سنقوم ببناء سيناريو تطبيقي يعتمد على إنشاء مجموعتي بيانات تحاكيان نتائج أداء فرق رياضية في دوري إحصائي. تتضمن المجموعة المرجعية الأولى، والتي سنطلق عليها اسم Data1، ثلاثة متغيرات رئيسية تمثل اسم الفريق (Team) كمتغير نصي، والنقاط المسجلة (Points) كمتغير رقمي، وعدد المتابعات (Rebounds) كمتغير رقمي إضافي.

يتم إنشاء هذه المجموعة المرجعية باستخدام خطوة DATA step مع استخدام أمر DATALINES لإدخال خمس مشاهدات تعبر عن الأداء المعتمد والموثق للفرق الخمسة. يوضح الكود التالي كيفية تعريف المتغيرات وتخصيص أنواعها وإدخال البيانات المرجعية بدقة:

DATA Data1; INPUT Team $ Points Rebounds; DATALINES;
A 25 10
B 30 12
C 15 8
D 20 11
E 28 9
; RUN;

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

3.2 إنشاء مجموعة البيانات الثانية للاختبار (Data2)

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

بالإضافة إلى النقص الهيكلي، سنقوم بإجراء تعديلات في قيم النقاط المسجلة؛ حيث سيتم تعديل نقاط الفريق C لتصبح 18 بدلاً من 15، ونقاط الفريق E لتصبح 27 بدلاً من 28، مع الإبقاء على نقاط باقي الفرق دون تغيير. كما سيتم استدعاء إجراء PROC PRINT لمعاينة محتويات كلا الجدولين قبل البدء في المقارنة، كما يوضح الكود التالي:

DATA Data2; INPUT Team $ Points; DATALINES;
A 25
B 30
C 18
D 20
E 27
; RUN;
PROC PRINT DATA=Data1; TITLE 'مجموعة البيانات المرجعية Data1'; RUN;
PROC PRINT DATA=Data2; TITLE 'مجموعة بيانات المقارنة Data2'; RUN;

يمكّننا هذا التصميم التجريبي من اختبار حساسية إجراء PROC COMPARE في التعرف المتزامن على التغيرات في بنية الأعمدة والاختلافات في القيم الرقمية للأسطر.

3.3 تنفيذ كود PROC COMPARE الأساسي على المجموعتين

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

PROC COMPARE BASE=Data1 COMPARE=Data2; RUN;

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

تتدفق النتائج مباشرة إلى نافذة عرض النتائج (Results Viewer / ODS Output)، حيث يتم تنظيم التقرير في ثلاثة جداول رئيسية متتالية: جدول ملخص مجموعات البيانات (Data Set Summary)، وجدول ملخص المتغيرات والسمات (Variables Summary)، وجدول الفروق التفصيلية في القيم والمشاهدات (Value Comparison Results). وسنقوم في الأقسام التالية بتحليل وتفسير كل جدول من هذه الجداول بدقة إحصائية متناهية.

4. تحليل وتفسير مخرجات الجدول الأول: ملخص مجموعات البيانات (Data Set Summary)

4.1 مقارنة عدد المتغيرات (NVar) وحجم العينة (NObs)

يمثل الجدول الأول في تقرير PROC COMPARE، والمعنون باسم Data Set Summary، نظرة بانورامية عليا على الخصائص البنيوية والحجمية لمجموعتي البيانات محل الفحص. يركز هذا القسم من التقرير على مؤشرين أساسيين: عدد المتغيرات المسجلة في كل مجموعة ويرمز له بالرمز NVar، وإجمالي عدد المشاهدات أو السجلات ويرمز له بالرمز NObs.

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

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

4.2 فحص البيانات الوصفية والسمات البنيوية (Metadata Attributes)

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

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

كما يُبرز التقرير تسميات مجموعات البيانات (Data Set Labels) ورموز الحماية في حال وجودها، مما يوفر للمدقق سجلاً شاملاً يؤكد هوية الملفات المتطابقة أو المتباينة من الناحية النظامية قبل الانتقال إلى تفاصيل المتغيرات.

4.3 تقييم حالة التوافق العام بين المجموعتين

يختتم الجدول الأول تقييمه بتقديم ملخص نوعي لحالة التوافق الشامل بين مجموعتي البيانات، حيث يصدر رسائل تشخيصية واضحة تلفت الانتباه إلى أي شذوذ هيكلي تم اكتشافه. في السيناريو الخاص بنا، يُصدر الإجراء تنبيهاً صريحاً يوضح أن المجموعتين تحتويان على عدد غير متساوٍ من المتغيرات، مما يضع البيانات في تصنيف “مجموعات بيانات غير متطابقة هيكلياً” (Structurally Non-conforming Datasets).

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

إذا كانت المجموعتان متطابقتين تماماً في كافة الأبعاد والبيانات الوصفية والقيم، فإن الإجراء يطبع رسالة مميزة تفيد بأن: “No differences were found between the datasets“، وهو الإعلان النهائي الذي يثبت سلامة وجودة التطابق التام دون الحاجة للخوض في تفاصيل الجداول التالية.

5. تحليل وتفسير مخرجات الجدول الثاني: ملخص المتغيرات والسمات (Variables Summary)

5.1 تصنيف المتغيرات المشتركة والمتغيرات المنفردة

يقدم الجدول الثاني في التقرير، والمعنون باسم Variables Summary، تحليلاً مصنفاً لطبيعة تواجد المتغيرات وتوزيعها بين مجموعتي البيانات. يقسم الإجراء المتغيرات إلى ثلاث فئات رئيسية: المتغيرات المشتركة المتواجدة في كلا المجموعتين، والمتغيرات الموجودة فقط في مجموعة البيانات المرجعية BASE ومفقودة من مجموعة المقارنة، والمتغيرات الموجودة حصرياً في مجموعة المقارنة COMPARE ومفقودة من المرجع.

في تطبيقنا العملي، يوضح الجدول أن المتغيرين Team وPoints يندرجان تحت قائمة المتغيرات المشتركة (Common Variables)، مما يتيح للإجراء مقارنة قيمهما المشتركة مباشرة. في المقابل، يدرج التقرير المتغير Rebounds ضمن فئة المتغيرات المتواجدة فقط في Data1، موضحاً أنه استُبعد تلقائياً من مقارنة القيم لعدم وجود عمود مقابل له في Data2.

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

5.2 فحص تطابق أنواع البيانات والأطوال (Type & Length)

يعد فحص توافق سمات المتغيرات المشتركة من أهم المهام التي ينفذها PROC COMPARE في هذا الجدول؛ حيث يقوم بمقارنة نوع كل متغير (سواء كان نصياً Character ويرمز له بالرمز C، أو رقمياً Numeric ويرمز له بالرمز N)، بالإضافة إلى مقارنة الطول التخزيني المخصص للمتغير بالبايت (Length)، وقوالب العرض (Formats) والتسميات الوصفية (Labels).

إذا تطابق نوع المتغير بين المجموعتين (كالرقمي Points والنصي Team في مثالنا)، يُدرج الإجراء المتغير كعنصر متوافق في السمات. أما إذا وُجد اختلاف في النوع، كأن يكون المتغير رقمياً في BASE وتم استيراده كمتغير نصي في COMPARE بسبب وجود قيم خاصة مثل الحروف، فإن الإجراء يُصدر تحذيراً شديد الخطورة في السجل ويوضح في الجدول تعذر مقارنة قيم هذا المتغير ما لم يتم توحيد نوعه مسبقاً.

كذلك تبرز أهمية فحص أطوال السلاسل النصية؛ فإذا كان طول متغير Team في المرجع 10 بايت بينما طوله في المقارنة 5 بايت، يظهر تنبيه باحتمالية حدوث اقتطاع للنصوص (Data Truncation) في الأسماء الطويلة، مما يتيح للمبرمج تصحيح تعريفات المتغيرات قبل وقوع أخطاء في التطابق.

5.3 مؤشرات التباين الإحصائي الإجمالي للمتغيرات المشتركة

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

في نموذجنا التطبيقي، يُظهر الجدول أن المتغير النصي Team حقق تطابقاً بنسبة 100%، حيث كانت جميع القيم الخمس متطابقة حرفياً بين المجموعتين دون أي اختلاف. في المقابل، يُظهر المتغير الرقمي Points وجود 3 قيم متطابقة وقيمتين غير متطابقتين (Unequal Values = 2)، مما يمثل نسبة تباين تعادل 40% من إجمالي المشاهدات.

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

6. تحليل وتفسير مخرجات الجدول الثالث: الفروق التفصيلية في القيم والمشاهدات

6.1 تتبع الفروق سطر بسطر بناءً على رقم المشاهدة (Observation Number)

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

عند فحص نتائج المتغير Points في السيناريو العملي، يسرد التقرير الفروق التفصيلية وفقاً لرقم المشاهدة (Observation Number). يُظهر التقرير أن المشاهدة رقم 3 تختلف فيها القيمة؛ حيث تسجل في مجموعة Base القيمة 15 بينما تسجل في مجموعة Compare القيمة 18. كما يُظهر أن المشاهدة رقم 5 تختلف فيها القيمة أيضاً؛ حيث تسجل في Base القيمة 28 بينما تسجل في Compare القيمة 27.

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

6.2 حساب الفروق الحسابية والنسبية للبيانات الكمية

لا يكتفي الإجراء بسرد القيم المتباينة فحسب، بل يقوم تلقائياً بإجراء حسابات رياضية دقيقة تشمل حساب الفرق المطلق والفرق النسبي المئوي لكل قيمة مختلفة في المتغيرات الرقمية. يتم حساب الفرق الرياضي الصافي عبر المعادلة المعيارية: Diff = Compare - Base، في حين يُحسب الفرق النسبي المئوي عبر قسمة الفرق الصافي على القيمة المرجعية في Base وضرب الناتج في 100: %Diff = ((Compare - Base) / Base) * 100.

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

  • المشاهدة رقم 3: القيمة في Base = 15، القيمة في Compare = 18. الفرق الحسابي الصافي (Diff) = +3.0000، والنسبة المئوية للفرق (%Diff) = +20.0000%.
  • المشاهدة رقم 5: القيمة في Base = 28، القيمة في Compare = 27. الفرق الحسابي الصافي (Diff) = -1.0000، والنسبة المئوية للفرق (%Diff) = -3.5714%.

تساعد هذه الحسابات الكمية في التمييز بين الأخطاء الجوهرية الناتجة عن أخطاء إدخال فادحة (مثل كتابة 150 بدلاً من 15 بفرق 900%)، وبين الانحرافات الطفيفة الناتجة عن تعديلات طفيفة أو تقريب حسابي، مما يمنح متخذ القرار رؤية موضوعية حول مدى خطورة التباين المكتشف وتأثيره المحتمل على التحليلات اللاحقة.

6.3 التعامل مع القيم المفقودة (Missing Values) في المقارنة التفصيلية

يمتلك إجراء PROC COMPARE منهجية صارمة ودقيقة في التعامل مع القيم المفقودة (Missing Values) للتمييز بين الفقدان الحقيقي للبيانات والقيم الصفرية. في لغة SAS، تُمثل القيمة المفقودة الرقمية بنقطة (.) أو بأحد رموز الفقدان الخاصة (Special Missing Values مثل .A إلى .Z و._)، بينما تُمثل القيمة المفقودة النصية بمسافة فارغة (' ').

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

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

7. استخدام عبارة ID لربط المشاهدات بمفاتيح فريدة بدلاً من ترتيب الأسطر

7.1 أهمية عبارة ID وتفادي مخاطر المقارنة القائمة على رقم الملاحظة

تعتمد المقارنة الافتراضية في PROC COMPARE على الترتيب الفيزيائي للمشاهدات (Observation Number Matching)، وهو أسلوب ينطوي على مخاطر جسيمة إذا كانت البيانات غير مرتبة بنفس النمط الدقيق في كلا الملفين. فلو تم فرز إحدى المجموعتين تصاعدياً والأخرى تنازلياً، أو إذا تم إدراج سطر جديد في بداية إحدى المجموعتين، فإن المقارنة الافتراضية ستؤدي إلى مقارنة سجلات غير متوافقة تماماً، مما يولد تقريراً وهمياً يزعم وجود فروق بنسبة 100% في كافة المشاهدات المتتالية.

لحل هذه المعضلة وتوفير مطابقة منطقية حقيقية، تُستخدم عبارة ID statement لتحديد متغير أو أكثر يمثل “المفتاح الفريد” (Primary Key / Unique Identifier) لكل مشاهدة، مثل رقم تعريف المريض (Patient ID)، أو الرمز التعريفي للموظف، أو اسم الفريق في مثالنا التطبيقي. وبمجرد تفعيل هذه العبارة، يقوم الإجراء بالبحث عن السجلات التي تتطابق في قيمة مفتاح الربط ومقارنة محتوياتها ببعضها بغض النظر عن ترتيب ظهور السطر في الملف.

تسهم عبارة ID أيضاً في تحسين مقروئية التقارير الناتجة بشكل لافت؛ فعوضاً عن الإشارة إلى الفروق بالأرقام المجردة للأسطر مثل “Observation 3″، يطبع الإجراء قيمة المفتاح التعريفي بوضوح، مثل Team = C، مما يتيح للمحلل التعرف الفوري على السجل المعني دون الحاجة للبحث في أرقام الأسطر.

7.2 متطلبات إعداد البيانات قبل استخدام عبارة ID

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

يتم فرز المجموعتين باستدعاء إجراء PROC SORT على كلا الملفين بشكل مستقل باستخدام نفس ترتيب المتغيرات في عبارة BY. ويوضح الكود التالي كيفية إعداد وفرز البيانات تحضيراً لعملية المطابقة عبر المفاتيح:

PROC SORT DATA=Data1; BY Team; RUN;
PROC SORT DATA=Data2; BY Team; RUN;

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

7.3 أمثلة تطبيقية لاستخدام ID في مقارنة السجلات غير المتطابقة في الترتيب

لتطبيق مفهوم المطابقة بالمفاتيح عملياً، نفترض أن ترتيب الفرق في مجموعة Data2 تم تغييره عشوائياً بحيث يظهر الفريق E في السطر الأول والفريق A في السطر الأخير. بتطبيق عبارة ID، يقوم SAS بمطابقة سجل كل فريق بدقة اعتماداً على اسمه بدلاً من موضعه الفيزيائي، كما يوضح الكود التالي:

PROC COMPARE BASE=Data1 COMPARE=Data2;
    ID Team;
RUN;

إذا احتوت مجموعة البيانات Data2 على فريق جديد غير موجود إطلاقاً في Data1 (مثل الفريق F)، أو إذا غاب أحد الفرق الأصلية عن Data2، يقوم الإجراء بإنشاء قسم خاص في التقرير يُعرف باسم Observation Summary يوضح السجلات التي تتطابق في المفتاح وتلك التي تنفرد بها إحدى المجموعتين، مسجلاً رسائل مثل Observation in COMPARE but not in BASE.

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

8. تخصيص نطاق المقارنة باستخدام العبارات VAR و WITH

8.1 استخدام العبارة VAR لعزل متغيرات محددة

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

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

PROC COMPARE BASE=Data1 COMPARE=Data2;
    VAR Points;
RUN;

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

8.2 استخدام العبارة WITH لمقارنة متغيرات ذات أسماء متباينة

تنشأ في التطبيقات العملية حالات شائعة تتضمن مقارنة متغيرات تحمل نفس المفهوم الإحصائي ولكنها سُميت بأسماء مختلفة في كلا الملفين؛ كأن يُسمى متغير الدخل السنوي Income في المجموعة المرجعية ويُسمى Annual_Salary في مجموعة المقارنة، أو أن يُسمى متغير النقاط Points في Base وScore في Compare.

في الوضع الافتراضي، يفترض PROC COMPARE تطابق أسماء المتغيرات بين المجموعتين، وإذا اختلف الاسم سيعتبرهما متغيرين منفصلين تماماً. للتغلب على هذه المشكلة، تُستخدم عبارة WITH statement بالاقتران مع عبارة VAR، حيث تقوم بمطابقة المتغيرات المدرجة في عبارة VAR (والتي تمثل أعمدة BASE) مع المتغيرات المقابلة لها ترتيباً في عبارة WITH (والتي تمثل أعمدة COMPARE).

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

PROC COMPARE BASE=Data1 COMPARE=Data2;
    VAR Points;
    WITH Score;
RUN;

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

8.3 الدمج المتقدم بين VAR و WITH و ID في استعلام موحد

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

يوضح المثال البرمجي التالي سيناريو متكاملاً يتم فيه مطابقة المشاهدات باستخدام المتغير التعريفي Team، مع قصر المقارنة الموضوعية على متغير النقاط فقط ومطابقته مع متغير Score من الملف الثاني:

PROC COMPARE BASE=Data1 COMPARE=Data2;
    ID Team;
    VAR Points;
    WITH Score;
RUN;

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

9. التحكم في معايير الدقة الرياضية وخيارات التسامح مع الفروق (Tolerances)

9.1 تحديد معيار المقارنة باستخدام خيار CRITERION=

في الحسابات الرقمية المتقدمة وتحليل النماذج الإحصائية المعقدة، تتعامل المعالجات الحاسوبية مع الأرقام الحقيقية باستخدام نظام الفاصلة العائمة (Floating-Point Arithmetic وفق معيار IEEE 754). وينتج عن طبيعة التمثيل الثنائي للكسور العشرية أخطاء تقريب حسابية متناهية في الصغر (تظهر عادة في المراتب العشرية الخامسة عشرة أو السادسة عشرة)، مما قد يجعل رقمين متساويين نظرياً غير متطابقين برمجياً عند المقارنة المباشرة.

لتفادي إصدار تنبيهات خاطئة حول فروق لا دلالة لها، يتيح SAS خيار CRITERION= (أو CRIT=) للتحكم في العتبة الرياضية الدقيقة للتسامح مع الفروق. يحدد هذا الخيار قيمة رقمية موجبة تُستخدم كمعيار للفصل بين التطابق والاختلاف؛ فإذا كان الفرق المحسوب بين القيمتين أقل من أو يساوي قيمة المعيار المحدد، يعتبر الإجراء القيمتين متطابقتين تماماً ولا يدرجهما في تقارير الاختلاف.

يوضح الكود التالي كيفية ضبط معيار التسامح عند قيمة $1 \times 10^{-9}$ لتجاهل الفروق الناتجة عن التقريب الحاسوبي في النماذج الإحصائية:

PROC COMPARE BASE=Data1 COMPARE=Data2 CRITERION=1E-9; RUN;

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

9.2 طرق المقارنة عبر خيار METHOD= (Absolute مقابل Relative)

يرتبط خيار CRITERION= بخيار آخر يحدد الكيفية الرياضية التي يتم بها تقييم الفرق ومقارنته بالعتبة المحددة، وهو خيار METHOD=. يوفر الإجراء طريقتين رئيسيتين للمقارنة الرياضية: الطريقة المطلقة (METHOD=ABSOLUTE) والطريقة النسبية (METHOD=RELATIVE)، ولكل منهما استخدامات تحليلية محددة.

في الطريقة المطلقة، يقوم الإجراء بمقارنة القيمة المطلقة للفرق المباشر بين الرقمين بالعتبة المحددة:

|Compare - Base| ≤ CRITERION

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

أما في الطريقة النسبية (وهي الطريقة الافتراضية في SAS عند عدم تحديد الخيار)، فإن الإجراء يقيم الفرق كنسبة مئوية من حجم القيمة المرجعية في Base:

|Compare - Base| / (|Base| + ...) ≤ CRITERION

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

9.3 ضبط خيار FUZZ= لتجاهل الفروق المتناهية في الصغر

يُستخدم خيار FUZZ= كأداة إضافية للتحكم في تقريب القيم شبه الصفرية، وله دور مميز في تحسين نقاء التقارير الإحصائية الناتجة عن PROC COMPARE. وظيفة هذا الخيار هي تحديد عتبة تقريب؛ فإذا كانت القيمة المطلقة لأي فرق محسوب أصغر من القيمة المحددة في FUZZ=، فإن الإجراء يقوم تلقائياً بضبط هذا الفرق ليصبح صفراً تاماً (0.0).

يساعد ضبط خيار FUZZ= في تجنب ظهور تقارير مطولة تعرض فروقاً متناهية في الصغر مثل $0.00000000000012$ في الجداول المطبوعة، مما يمنع تشتت انتباه المدقق ويحافظ على مظهر منسق وواضح للمخرجات. ويوضح المثال التالي ضبط هذا الخيار بمستوى مناسب:

PROC COMPARE BASE=Data1 COMPARE=Data2 FUZZ=1E-12; RUN;

من أفضل الممارسات المتبعة في التحليل الإحصائي عدم المبالغة في رفع قيمة FUZZ= أو CRITERION= حتى لا يتم إخفاء فروق حقيقية ذات دلالة عملية، واختيار قيم مدروسة تتوافق مع مستويات الدقة القياسية المعتمدة في التخصص المعني.

10. تصدير الفروق إلى مجموعات بيانات جديدة لأغراض الأتمتة والتدقيق (Output Datasets)

10.1 استخدام خيار OUT= لإنشاء جدول مخرجات مخصص

على الرغم من الأهمية الكبيرة للتقارير المطبوعة التي يولدها PROC COMPARE في نافذة النتائج، فإن العمليات التحليلية الحديثة تتطلب في كثير من الأحيان تحويل تلك النتائج والفروق إلى جداول بيانات مهيكلة (SAS Datasets) قابلة للاستعلام، والمعالجة البرمجية اللاحقة، والتصدير إلى لوحات التحكم (Dashboards) أو تقارير الإدارة التنفيذية.

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

  • _TYPE_: متغير نصي يحدد طبيعة ونوع السطر المخزن في الجدول، وتتضمن قيمه المرجعية: BASE (تمثل قيم المجموعة الأصلية)، COMPARE (تمثل قيم مجموعة المقارنة)، وDIF (تمثل الفروق الحسابية الصافية المحسوبة بينهما).
  • _OBS_: متغير رقمي يسجل رقم المشاهدة التسلسلي الأصلي الذي تم رصد الاختلاف فيه.

يوضح الكود التالي كيفية إنشاء جدول بيانات مخرجات باسم diff_summary:

PROC COMPARE BASE=Data1 COMPARE=Data2 OUT=diff_summary; RUN;

يمكن بعد ذلك استخدام أدوات SAS المختلفة، مثل PROC REPORT أو PROC SQL، لتحليل جدول المخرجات واستخراج إحصائيات نوعية مخصصة تلبي متطلبات جهات التدقيق والرقابة بدقة وكفاءة عالية.

10.2 الخيارات التكميلية لتخصيص محتوى جدول المخرجات

يوفر نظام SAS مجموعة من الخيارات التكميلية المتقدمة التي تُستخدم مقترنة مع خيار OUT= لتخصيص حجم ومحتوى جدول المخرجات بدقة، ومنع تضخمه بالسجلات غير الضرورية:

  • OUTNOEQUAL: يوجه الإجراء لحفظ وتضمين السجلات والمشاهدات التي تحتوي على فروق واختلافات فقط، مع استبعاد وتصفية المشاهدات المتطابقة تماماً من الجدول الناتج. يعد هذا الخيار جوهرياً عند مقارنة قواعد بيانات ضخمة، حيث يضمن أن يكون جدول المخرجات صغيراً ومركزاً على الأخطاء فقط.
  • OUTBASE: يضمن تضمين أسطر القيم الأصلية التابعة لمجموعة البيانات المرجعية (BASE) في جدول المخرجات، والتي يتم تمييزها بالرمز _TYPE_='BASE'.
  • OUTCOMP: يضمن تضمين أسطر القيم التابعة لمجموعة بيانات المقارنة، والتي يتم تمييزها بالرمز _TYPE_='COMPARE'.
  • OUTDIF: يوجه النظام لتوليد وحفظ أسطر الفروق الرياضية الصافية (Differences)، والتي يتم تمييزها بالرمز _TYPE_='DIF'.
  • OUTPERCENT: يضيف أسطر حساب النسب المئوية للفروق الرياضية لكل متغير رقمي، مما يتيح مراجعة الانحرافات النسبية برمجياً عبر المتغير _TYPE_='PERCENT'.

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

PROC COMPARE BASE=Data1 COMPARE=Data2 OUT=Audit_Log OUTNOEQUAL OUTDIF NOPRINT; RUN;

10.3 أتمتة اتخاذ القرارات بناءً على متغير الاستجابة الإحصائي (SYSINFO)

من أقوى الميزات الهندسية لإجراء PROC COMPARE في بيئات المعالجة الآلية وتدفقات البيانات المستمرة (CI/CD Pipelines) هو تفاعله التلقائي مع متغير الماكرو النظامي &SYSINFO. بعد كل تنفيذ للإجراء، يقوم SAS بتسجيل رمز استجابة رقمي (Return Code) داخل هذا المتغير المدمج، حيث يمثل الرقم شفرة ثنائية مركبة من أقنعة البتات (Bit Masks) التي تصف بدقة فائقة كافة نتائج المقارنة المكتشفة.

تتضمن القيم الثنائية لمتغير &SYSINFO دلالات قطعية محددة؛ فإذا كانت قيمة المتغير تساوي صفراً تماماً (&SYSINFO = 0)، فهذا يعني وجود تطابق تام بنسبة 100% بين المجموعتين في البنية والقيم والسمات. أما إذا كانت القيمة أكبر من صفر، فإن كل بت ثنائي يمثل نوعاً معيناً من التباين وفقاً للجدول القياسي التالي:

  • البت 0 (القيمة 1): وجود فروق في تسميات مجموعات البيانات (Data Set Labels).
  • البت 3 (القيمة 8): عدم تطابق في عدد المشاهدات (Different Number of Observations).
  • البت 4 (القيمة 16): وجود مشاهدات في COMPARE مفقودة في BASE.
  • البت 5 (القيمة 32): وجود مشاهدات في BASE مفقودة في COMPARE.
  • البت 9 (القيمة 512): وجود فروق في أطوال أو تنسيقات المتغيرات المشتركة.
  • البت 10 (القيمة 1024): وجود فروق في قيم البيانات المسجلة للمتغيرات (Unequal Values Found).

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

%macro check_validation;
    %if &SYSINFO = 0 %then %do;
        %put NOTE: التحقق ناجح - المجموعتان متطابقتان تماماً.;
    %end;
    %else %if %eval(&SYSINFO & 1024) ne 0 %then %do;
        %put ERROR: فشل التحقق - تم اكتشاف تباينات في قيم البيانات!;
        %abort cancel;
    %end;
%mend check_validation;

11. تطبيقات متقدمة وسيناريوهات واقعية في الأبحاث والبيانات السريرية

11.1 مقارنة البيانات المدخلة مرتين للتحقق من دقة الإدخال (Double Data Entry)

تُعد منهجية الإدخال المزدوج للبيانات (Double Data Entry / Verification) المعيار الذهبي المعتمد في التجارب السريرية للأدوية والبحوث النفسية والدراسات الميدانية الضخمة للحد من الأخطاء البشرية الناتجة عن إدخال الاستمارات الورقية (CRFs). وتعتمد هذه المنهجية على قيام مدخلين مستقلين للبيانات برقمنة نفس الاستمارات في ملفين منفصلين تماماً (مثلاً Entry_A وEntry_B).

يُستخدم إجراء PROC COMPARE في هذا السياق لإجراء فحص تقاطعي فوري وشامل بين الملفين. بمجرد تنفيذ الإجراء مع استخدام المعرف الفريد للاستمارة والمشارك (ID Subject_ID Form_ID)، يتم تحديد وتوثيق كافة مواضع التباين بين الإدخالين بدقة مطلقة، مما يمكن فريق إدارة البيانات السريرية (Clinical Data Management) من استخراج تقرير النزاعات (Discrepancy Report) والرجوع إلى الاستمارة الأصلية لتصحيح الخطأ قبل قفل قاعدة البيانات (Database Lock).

تعتبر هذه الممارسة متطلباً حيوياً للامتثال للمعايير التنظيمية الصارمة الصادرة عن المجلس الدولي للتنسيق (ICH-GCP) وهيئات الرقابة الدوائية، حيث يقدم تقرير PROC COMPARE دليلاً توثيقياً دامغاً على خلو البيانات النهائية من أخطاء الرقمنة والنسخ البشري.

11.2 التحقق من صحة برامج الترحيل وتحويل البيانات (Data Migration Validation)

تواجه المؤسسات المالية، وشركات التأمين، والمرافق الصحية تحديات معقدة عند ترقية أنظمتها التشغيلية أو ترحيل قواعد بياناتها التاريخية الضخمة من بيئات قديمة (Legacy Systems) إلى منصات سحابية حديثة أو محركات تخزين جديدة. وفي هذه المشاريع، يُعتبر إثبات “سلامة الترحيل وعدم فقدان البيانات” (Data Integrity & Zero Loss) متطلباً قانونياً وتشغيلياً بالغ الحساسية.

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

وعند التعامل مع جداول عملاقة تتجاوز مئات الملايين من السجلات، يتم تطبيق الإجراء عبر استراتيجيات أخذ العينات العشوائية الطبقية (Stratified Random Sampling) لفحص كتل بيانية ممثلة لكافة السيناريوهات، مما يولد تقارير إحصائية تؤكد نجاح عملية الترحيل بنسبة ثقة إحصائية تتجاوز 99.99%.

11.3 مراقبة التغيرات الزمنية في مجموعات البيانات الطولية (Longitudinal Data)

في الدراسات الطولية (Longitudinal Studies) والأبحاث الاجتماعية والوبائية التي تتتبع نفس الأفراد أو العينات عبر فترات زمنية ممتدة (مثل المسوح الأسرية السنوية أو قياس المؤشرات الحيوية لمرضى الحالات المزمنة عبر شهور متتابعة)، يبرز دور PROC COMPARE كأداة متطورة لرصد وتتبع التغيرات الزمنية والتطورات السلوكية والصحية.

من خلال تعيين بيانات خط الأساس (Baseline Data) كمجموعة BASE والبيانات المجمعة في الزيارة اللاحقة (Follow-up Data) كمجموعة COMPARE، مع استخدام رقم تعريف المشارك كمتغير ID، يتيح الإجراء قياس التغيرات الصافية والانحرافات النسبية في المؤشرات الإحصائية لكل حالة عبر الزمن بأسلوب منظم وآلي.

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

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

12.1 الأخطاء الشائعة أثناء استخدام PROC COMPARE وكيفية تفاديها

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

  • تجاهل فرز البيانات عند استخدام عبارة ID: يعتبر تنفيذ الإجراء مع عبارة ID على بيانات غير مرتبة الخطأ الأكثر تكراراً. يجب دائماً التأكد من تطبيق PROC SORT على كلا الملفين باستخدام نفس متغيرات المعرف بدقة مسبقة.
  • إهمال تنظيف المسافات في النصوص (Trailing & Leading Blanks): غالباً ما تتولد فروق نصية وهمية بسبب وجود مسافات بادئة أو لاحقة غير مرئية في السلاسل النصية. يُوصى بتمرير المتغيرات النصية عبر دالة STRIP() أو COMPBL() أثناء خطوة تجهيز البيانات لتوحيد النصوص وتجنب التباينات الزائفة.
  • سوء تفسير فروق التواريخ والأوقات: تُخزن التواريخ في SAS كأرقام تمثل عدد الأيام منذ الأول من يناير 1960. قد يؤدي اختلاف تنسيق العرض (Format) بين الملفين (مثل DATE9. مقابل MMDDYY10.) إلى ارتباك المحلل على الرغم من تطابق القيمة الرقمية الحقيقية؛ لذا يجب التحقق من تطابق القوالب لضمان المقروئية السليمة.
  • عدم تكافؤ أنواع المتغيرات (Type Mismatch): محاولة مقارنة متغير تم تعريفه كنص في مجموعة وبرقم في أخرى، وهو ما يمنع المقارنة التلقائية ويستوجب تحويل النوع مسبقاً باستخدام دوال مثل INPUT() أو PUT().

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

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

  • استخدام خيار NOPRINT وتفضيل مخرجات OUT=: توليد تقارير بصرية ضخمة في نافذة المخرجات يستهلك كميات هائلة من موارد الذاكرة ووحدة المعالجة المركزية. يُنصح دائماً بإيقاف الطباعة عبر NOPRINT وتوجيه الفروق مباشرة إلى جدول مخرجات باستخدام OUTNOEQUAL.
  • الاستفادة من الفهارس (Indexes): يؤدي إنشاء فهارس على متغيرات المعرفات الأساسية (ID Variables) إلى تسريع عمليات البحث والمطابقة وتقليل الحاجة إلى عمليات الفرز المتكررة والمستهلكة للوقت.
  • تقييد الأعمدة عبر خيار KEEP=/DROP=: بدلاً من تحميل مجموعات البيانات بالكامل في الذاكرة، يُفضل استخدام خيارات مجموعات البيانات BASE=data1(KEEP=...) وCOMPARE=data2(KEEP=...) لقصر المعالجة على المتغيرات المستهدفة فقط.
  • المعالجة بالتوازي وتجزئة البيانات (Data Partitioning): يمكن تجزئة الملفات العملاقة إلى كتل جغرافية أو زمنية مستقلة وتشغيل مقارنات متوازية عبر تقنيات SAS Grid أو SAS/CONNECT لتقليص الزمن الإجمالي للمعالجة.

12.3 قائمة تحقق منهجية (Checklist) لضمان موثوقية عمليات المقارنة

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

  • [ ] التحقق البنيوي الأولي: التأكد من تطابق المسميات، وأنواع البيانات، وأطوال المتغيرات الأساسية بين المجموعتين.
  • [ ] فرادة المفاتيح وفرز السجلات: مراجعة خلو متغيرات الـ ID من التكرارات غير المبررة، والتأكد من تنفيذ الفرز المتطابق لكلا الملفين.
  • [ ] معايرة التسامح الرياضي: تحديد خيارات CRITERION= وMETHOD= الملائمة لطبيعة الأرقام ونطاقاتها الإحصائية بدقة وتوثيقها.
  • [ ] تأكيد سلامة السجل البرمجي: مراجعة نافذة SAS Log والتأكد التام من خلوها من أي رسائل تحذيرية (WARNING) أو أخطاء (ERROR) تخص عمليات التحويل أو البتر.
  • [ ] فحص مخرجات &SYSINFO: قراءة رمز الاستجابة والتأكد من مطابقة النتيجة للأهداف المقبولة إحصائياً.
  • [ ] توثيق وأرشفة النتائج: حفظ كود المقارنة، والبيانات الوصفية للملفات، وجدول الفروق النهائي في مستودع آمن ومؤرخ للامتثال لمتطلبات التدقيق الدوري.

خاتمة

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

إن استيعاب الخيارات المتنوعة للإجراء—بدءاً من عبارات الربط بالمفاتيح (ID)، وتخصيص الأعمدة (VAR / WITH)، وضبط معايير الدقة الرياضية (CRITERION / FUZZ)، وصولاً إلى تصدير النتائج آلياً واستغلال متغير النظام (&SYSINFO)—يمكن المؤسسات من بناء خطوط تحقق مؤتمتة وموثوقة بنسبة 100%. ويضمن تطبيق أفضل الممارسات الموضحة في هذا الدليل الارتقاء بجودة المخرجات التحليلية والامتثال التام لأعلى المعايير الرقابية والتنظيمية العالمية في شتى مجالات البحث العلمي وإدارة البيانات المعاصرة.

References

  • Cody, R. (2018). Cody’s Data Cleaning Techniques Using SAS (3rd ed.). SAS Institute Inc. https://support.sas.com/en/books.html
  • Food and Drug Administration. (2021). Data Standards Guidance for Industry: Providing Regulatory Submissions in Electronic Format — Standardized Study Data. U.S. Department of Health and Human Services. https://www.fda.gov/regulatory-information/search-fda-guidance-documents
  • Li, A. X. (2013). Comparing Data with PROC COMPARE: A Powerful Tool for Quality Control and Data Validation. Proceedings of the SAS Global Forum 2013 Conference, San Francisco, CA. https://support.sas.com/resources/papers/proceedings13/088-2013.pdf
  • SAS Institute Inc. (2023). Base SAS Procedures Guide: Statistical Procedures — The COMPARE Procedure (SAS 9.4 and SAS Viya). SAS Institute Inc. https://documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/proc/p030o1j4z3b2e5n1v62lpm7r065w.htm
  • Whitlock, I. (2007). Proc Compare: A Comprehensive Guide to Data Validation in SAS. SAS Institute Technical Papers. https://support.sas.com/resources/papers/proceedings/proceedings_archive.html

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

looti, M. (2026, أغسطس 31). كيفية استخدام Proc Compare في SAS (مع أمثلة). عرب سايكلوجي. https://arabpsychology.com/statistics/how-to-use-proc-compare-in-sas-with-examples/
looti, Mohammed. “كيفية استخدام Proc Compare في SAS (مع أمثلة).” عرب سايكلوجي, 31 أغسطس 2026, https://arabpsychology.com/statistics/how-to-use-proc-compare-in-sas-with-examples/.
looti, Mohammed. “كيفية استخدام Proc Compare في SAS (مع أمثلة).” عرب سايكلوجي. أغسطس 31, 2026. https://arabpsychology.com/statistics/how-to-use-proc-compare-in-sas-with-examples/.