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

دليل أكاديمي شامل يشرح كيفية استخدام دالة RANUNI في لغة SAS لتوليد أرقام عشوائية موزعة بانتظام، مع تطبيقات وأمثلة عملية للباحثين والمحللين.

Mohammed looti أكاديمي وباحث متخصص في علم النفس
تاريخ النشر
تمت المراجعة العلمية · د. مروة عبد العظيم · 23 أكتوبر، 2026
مراجعة وتدقيق علمي معتمد تاريخ التدقيق: 23 أكتوبر، 2026
د. مروة عبد العظيم دكتوراه في علم النفس
عضو هيئة التدريس • جامعة كربلاء
معايير التدقيق والاعتماد السريري

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

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

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

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

1. مقدمة إلى دالة RANUNI في نظام SAS

1.1 المفهوم الرياضي للتوزيع المنتظم المستمر

يمثل التوزيع المنتظم المستمر (Continuous Uniform Distribution) واحداً من أبسط التوزيعات الاحتمالية المستمرة وأكثرها عمقاً في التحليل الرياضي. يُعرَّف هذا التوزيع، الذي يُرمز له غالباً بالرمز $U(0, 1)$، على أنه توزيع احتمالي تتساوى فيه احتمالية وقوع أي قيمة رقمية ضمن الفترة المفتوحة المحصورة بين الصفر والواحد الصحيح. وتُعطى دالة الكثافة الاحتمالية (Probability Density Function – PDF) للمتغير العشوائي $X$ الذي يتبع هذا التوزيع بالصيغة الرياضية التالية: $f(x) = 1$ لكل قيمة تقع داخل النطاق $0 < x < 1$، بينما تنعدم قيمتها، أي تصبح $f(x) = 0$، خارج هذا المجال. يتميز هذا التوزيع بخاصية فريدة تتمثل في تسطح منحنى الكثافة، مما يشير إلى الغياب التام لأي ترجيح أو تفضيل لقيمة عددية على أخرى داخل الفترة المستهدفة.

من الناحية الإحصائية والمعلمية، يمتلك التوزيع المنتظم المستمر في المجال $(0, 1)$ خصائص رياضية أساسية ثابتة؛ إذ تبلغ القيمة المتوقعة (Expected Value) أو الوسط الحسابي لهذا التوزيع $\mu = E(X) = \frac{1}{2} = 0.5$، في حين يُحسب التباين (Variance) وفق العلاقة الرياضية $\sigma^2 = Var(X) = \frac{(b – a)^2}{12}$، والتي تؤول عند تعويض $a=0$ و$b=1$ إلى القيمة الثابتة $\frac{1}{12} \approx 0.08333$. ويُعد هذا التباين مقياساً دقيقاً لمدى تشتت القيم حول مركز التوزيع، مما يمنح الباحثين إطاراً نظرياً مرجعياً للتحقق من سلامة الأرقام العشوائية المولدة واختبار مدى مطابقتها للخصائص النظرية المتوقعة.

تتجلى الأهمية الرياضية القصوى للتوزيع المنتظم المستمر في كونه “النواة الأم” أو حجر الأساس لتوليد كافة التوزيعات الاحتمالية المستمرة والمنفصلة الأخرى عبر ما يُعرف بطريقة تحويل التوزيع التراكمي العكسي (Inverse Transform Sampling). بموجب هذه النظرية، إذا كان لدينا متغير عشوائي $U$ مستمد من توزيع منتظم $U(0, 1)$، وكانت $F(x)$ تمثل دالة التوزيع التراكمي (CDF) المستمرة والمرتبة تصاعدياً لأي توزيع احتمالي مستهدف (كالطبيعي، أو الأسي، أو الويبل)، فإن المتغير المحول $X = F^{-1}(U)$ سيتبع حتماً ذلك التوزيع الاحتمالي المستهدف. ومن هذا المنطلق، لا تقتصر وظيفة دالة التوزيع المنتظم على محاكاة الظواهر المسطحة، بل تشكل المحرك الأولي لكافة عمليات المحاكاة الإحصائية المركبة.

1.2 الدور الوظيفي لدالة RANUNI في بيئة SAS

صُممت دالة RANUNI في نظام SAS الإحصائي (Statistical Analysis System) لتؤدي وظيفة برمجية محددة بدقة: إرجاع رقم عشري شبه عشوائي (Pseudo-random variate) يتبع التوزيع المنتظم المستمر داخل المجال المفتوح المحصور بين الصفر والواحد الصحيح $(0, 1)$. لا تعتمد الأنظمة الحاسوبية الرقمية الحتمية على ظواهر فيزيائية عشوائية حقيقية لتوليد هذه الأرقام في التطبيقات القياسية، بل تستند إلى صيغ وخوارزميات رياضية دقيقة قادرة على إنتاج سلاسل رقمية طويلة تبدو للملاحظ الخارجي وكأنها عشوائية تماماً، وتجتاز بنجاح مصفوفة واسعة من الاختبارات الإحصائية الصارمة الخاصة بالاستقلالية وحسن المطابقة والتوزيع المتجانس.

تعتمد دالة RANUNI من الناحية الخوارزمية على مولد التوافق الخطي المضاعف (Multiplicative Congruential Generator – MCG)، وهو نمط فرعي من خوارزميات التوافق الخطي (Linear Congruential Generators – LCG) التي غاب عنها المعامل الجمعي (حيث يُضبط المعامل $c=0$). وتعمل هذه الخوارزمية استناداً إلى علاقة العودية الرياضية التالية:
$$X_{n+1} = (a \cdot X_n) pmod m$$
حيث يمثل $m$ مقياس التطابق (Modulus)، ويمثل $a$ المضاعف (Multiplier)، بينما يمثل $X_n$ الحالة الراهنة للبذرة الرياضية، ويمثل $X_{n+1}$ الحالة المتتالية التالية. وتُحسب القيمة شبه العشوائية المرجعة في كل دورة تنفيذية عبر قسمة المتغير الناتج على المقياس: $U_{n+1} = \frac{X_{n+1}}{m}$.

في دالة RANUNI المدمجة في SAS، تم اعتماد المعاملات العددية التي حددها الباحثان جورج فيشمان (George S. Fishman) ولويس مور (Louis R. Moore) في دراستهما المنشورة عام 1982؛ حيث حُدد المقياس $m$ ليكون مساوياً للعدد الأولي لميرسين الحادي والثلاثين (31st Mersenne prime):
$$m = 2^{31} – 1 = 2,147,483,647$$
بينما حُدد المضاعف بالقيمة المثلى $a = 397,204,094$. وتوفر هذه التوليفة دورة كاملة من الحسابات تصل سعتها إلى $2^{31} – 2$ من الأرقام شبه العشوائية الفريدة قبل أن تبدأ السلسلة في تكرار نفسها دورياً، مما جعلها لعقود طويلة أداة المعالجة القياسية في بيئات SAS لإجراء الاختبارات الإحصائية، وبناء أوزان المعاينة، وتقسيم السجلات، وتنفيذ سيناريوهات النمذجة الرياضية متعددة المراحل.

1.3 الأهمية المنهجية للتوليد العشوائي في التحليلات الإحصائية والنفسية

تحظى العشوائية بمكانة مركزية لا غنى عنها في منهجية البحث العلمي التجريبي، لا سيما في ميادين العلوم النفسية، والسلوكية، والطبية الحيوية. يُعد التعيين العشوائي (Random Assignment) للمشاركين والوحدات التجريبية الآلية المنهجية الوحيدة القادرة على معالجة إشكالية المتغيرات المربكة (Confounding Variables) وتوزيعها بشكل متكافئ إحصائياً بين المجموعات الضابطة (Control Groups) والمجموعات التجريبية (Experimental Groups). عندما يعتمد الباحث على أداة رياضية رصينة مثل دالة RANUNI لتوزيع الأفراد على ظروف المعالجة، فإنه يضمن تحييد التأثيرات الطارئة المنبثقة من الفروق الفردية، كالسمات الشخصية، والقدرات المعرفية المسبقة، والمتغيرات الديموغرافية والبيئية، مما يوفر بيئة تجريبية تتيح عزو الفروق الملاحظة في المتغيرات التابعة إلى المعالجة التجريبية حصراً.

علاوة على ذلك، يمتد دور التوليد شبه العشوائي إلى مجالات القياس النفسي (Psychometrics) وتطوير الاختبارات المقننة. تُستخدم هذه الآليات في محاكاة البيانات الوهمية (Simulated Datasets) لتقييم حساسية وملاءمة نماذج نظرية استجابة المفردة (Item Response Theory – IRT)، والتحليل العاملي التوكيدي (Confirmatory Factor Analysis). إذ تتيح محاكاة مصفوفات الارتباط المعقدة الخاضعة لتقلبات عشوائية للباحثين استكشاف مدى استقرار المؤشرات الإحصائية عند تباين أحجام العينات، وتقييم كفاءة معايير المطابقة وتماسك الاختبارات السيكومترية قبل الانتقال إلى التطبيق الميداني المكلف مادياً وزمنياً.

وفي إطار اختبار الفرضيات الإحصائية غير المعلمية، تُمكّن دالة RANUNI الإحصائيين من تنفيذ اختبارات التباديل والتوافيق (Permutation Tests) وتقنيات إعادة أخذ العينات التكرارية مثل أسلوب التمهيد الذاتي (Bootstrapping). هذه المنهجيات المتقدمة، التي لا تعتمد على الافتراضات الصارمة حول التوزيع الطبيعي للمجتمعات الأصلية، تتطلب توليد الآلاف من عينات إعادة التوزيع العشوائي لتقدير فترات الثقة وبناء التوزيعات المعاينية التجريبية بدقة فائقة، مما يرسخ دور دالة RANUNI بوصفها ركيزة أساسية لتعزيز قوة النتائج ومصداقيتها الاستدلالية.

2. البنية النحوية والصيغة البرمجية لدالة RANUNI

2.1 تحليل الصيغة العامة RANUNI(seed)

تتسم الصيغة البرمجية العامة لدالة RANUNI بالبساطة المظهرية والعمق الوظيفي؛ إذ تُستدعى الدالة داخل بيئة SAS وفق النحو البرمجي التالي:

Variable = RANUNI(seed);

حيث يمثل الطرف الأيسر المتغير العددي المستهدف الذي سيتم إنشاؤه أو تحديثه في جدول البيانات (SAS Data Set)، في حين يمثل الطرف الأيمن استدعاء الدالة متبوعاً بأقواس دائرية تحتوي على مدخل إلزامي وحيد يُعرف باسم “البذرة” أو الجذر العشوائي (Seed). تُرجع الدالة في كل استدعاء ناجح قيمة عددية مستمرة ذات دقة عائمة مضاعفة (Double-precision floating-point number) تنحصر حتماً داخل الفترة المفتوحة $(0, 1)$، مما يعني برمجياً ورياضياً أن القيمة المولدة لا يمكن أن تساوي الصفر تماماً ولا يمكن أن تساوي الواحد الصحيح مطلقاً.

تتطلب دالة RANUNI بيئة تنفيذ متوافقة مع خطوات المعالجة في SAS؛ إذ تُنفذ في المقام الأول داخل خطوة البيانات (DATA step)، حيث يتم تقييم الدالة ومعالجتها تكرارياً لكل رصدة (Observation) يمر بها مفسر النظام. كما يمكن توظيفها واستدعاؤها داخل إجراءات إحصائية معينة تقبل التحويلات الرياضية، أو من خلال بيئة المعالجة التفاعلية للأكواد المتقدمة مثل معالج المصفوفات التفاعلية (SAS/IML)، حيث تُطبق العمليات الحسابية على متجهات ومصفوفات كاملة لتسريع عمليات التوليد والمحاكاة الرياضية.

2.2 القواعد الصارمة لمعامل البذرة (Seed)

يخضع معامل البذرة (Seed) في دالة RANUNI لمجموعة من القواعد البرمجية الصارمة التي يجب على المطور الإحصائي الإحاطة بها لضمان دقة العمليات الحسابية ومنع حدوث نتائج مشوهة. يشترط النظام أن يكون المعامل عدداً صحيحاً لا يتجاوز الحدود القصوى للأعداد الصحيحة ذات الإشارة في بيئات الحوسبة 32-بت، والتي تبلغ نظرياً $2^{31} – 1$. وعلى الرغم من أن الدالة قد تقبل قيم البذور ذات الفواصل العشرية، إلا أن المعالج الداخلي لنظام SAS يقوم تلقائياً بإجراء عملية بتر عددي (Truncation) أو قطع للجزء العشري، مستخدماً القيمة الصحيحة المجردة فقط كحالة ابتدائية للمولد.

في المقابل، إذا مُرر إلى الدالة معامل بذرة بقيمة سالبة، فإن نظام SAS يتصرف بطريقة خاصة؛ حيث يقوم البرنامج إما بمعاملة القيمة السالبة من خلال تجاهل الإشارة أو تطبيق خوارزمية تعديل تعيد ضبط الحالة استناداً إلى ساعة النظام، مصحوبة أحياناً برسائل تحذيرية في سجل الأحداث (SAS Log) تفيد بتجاوز النطاق المعياري للمدخلات. لذا، فإن الممارسة البرمجية الرصينة تقتضي حصراً تزويد الدالة بقيم صحيحة غير سالبة (Non-negative integers) تقع ضمن النطاق $[0, 2^{31}-1]$.

من الضروري فهم كيفية إدارة نظام SAS لحالة البذرة وتخزينها داخلياً عبر الدورات التكرارية. عند بدء تنفيذ خطوة البيانات وتمرير قيمة بذرة موجبة في السجل الأول، يُهيئ النظام الحالة الداخلية لمولد التوافق الخطي. وفي السجلات اللاحقة، لا يُعاد استخدام قيمة البذرة الأولية المكتوبة في الكود البرمجي ما لم يُجبر المبرمج النظام على ذلك عبر تقنيات غير سليمة، بل يقوم SAS بتحديث حالة البذرة تلقائياً عبر استبدالها بالقيمة الناتجة $X_{n+1}$ المشتقة من الحسابات الخوارزمية، مما يضمن استمرار تسلسل الأرقام العشوائية وتدفقها بسلاسة عبر كافة رصدات ملف البيانات دون انقطاع أو تكرار ذاتي غير مقصود.

2.3 التفريق الإجرائي بين البذرة الصفرية والبذرة الموجبة

يمثل التمييز بين تمرير القيمة صفر كبذرة وتمرير عدد صحيح موجب حجر الزاوية في التحكم في مخرجات دالة RANUNI؛ حيث يُحدث هذا الخيار فارقاً جذرياً في سلوك المولد وطبيعة مخرجاته عبر جلسات العمل المختلفة. عند استدعاء الدالة باستخدام البذرة الصفرية RANUNI(0)، يُصدر المبرمج أمراً مباشراً إلى نظام SAS بتجاهل أي تسلسل ثابت، والاعتماد بدلاً من ذلك على الوقت الفعلي المستمد من الساعة الداخلية للجهاز الخادم أو الحاسوب الشخصي في لحظة المعالجة الأولية، وهو ما يُعرف بتهيئة التوقيت (Time-dependent initialization).

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

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

3. آلية عمل بذرة التوليد العشوائي والتحكم في قابلية التكرار

3.1 استخدام القيمة الصفرية وتأثير توقيت النظام الداخلي

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

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

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

3.2 تحديد بذرة موجبة ثابتة لتحقيق قابلية إعادة الإنتاج العلمي

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

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

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

3.3 المعايير الأكاديمية لاختيار وتوثيق البذور في الدراسات

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

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

4. توليد قيمة عشوائية مفردة باستخدام دالة RANUNI

4.1 البناء البرمجي لخطوة DATA لإنشاء قيمة مفردة

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

DATA work.single_random;
    seed_value = 8675309;
    random_number = RANUNI(seed_value);
RUN;

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

4.2 فحص مخرجات البيانات باستخدام إجراء PROC PRINT

عقب إتمام خطوة إنشاء البيانات بنجاح، يُعد استعراض النتائج وفحص دقتها العددية خطوة تحليلية لا غنى عنها؛ ويتحقق ذلك باستخدام الإجراء الطباعي القياسي PROC PRINT. يتيح هذا الإجراء استخراج محتويات جدول البيانات وطباعتها في نافذة المخرجات (SAS Output Delivery System – ODS) مع إمكانية تطبيق خيارات متقدمة لتنسيق وعرض الخانات العشرية بدقة فائقة. يُكتب الكود الإجرائي على النحو التالي:

PROC PRINT DATA=work.single_random NOOBS;
    FORMAT random_number 12.10;
RUN;

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

4.3 التحقق الرياضي من خصائص القيمة المولدة

يخضع التحقق الرياضي من القيمة المفردة المستخرجة لمجموعة من الفحوص المنطقية الصارمة للتأكد من انتمائها للمجال المفتوح $(0, 1)$. ينبغي للمحلل فحص القيمة للتأكد من عدم وصولها مطلقاً إلى الصفر التام ($0.0$) أو الواحد التام ($1.0$)؛ إذ أن خوارزمية التوافق الخطي المضاعف الخاصة بدالة RANUNI لا يمكن، بحكم تصميمها المقيد بمقياس أولي لا يتضمن الصفر في مداراته الفعالة، أن تنتج ناتج قسمة صفرياً أو مكافئاً تماماً لواحد صحيح. تُعد هذه الخاصية في غاية الحيوية؛ إذ تجنب البرامج الإحصائية الوقوع في مشكلات القسمة على صفر أو حساب اللوغاريتمات لقيم منعدمة في المعادلات اللاحقة التي تعتمد على هذه الأرقام المولدة كنواة لإجراء تحويلات رياضية مقلوبة.

5. تعديل النطاق العددي للقيم العشوائية المولدة

5.1 تمديد المجال العشوائي من [0, 1] إلى [0, n] عبر الضرب

في معظم التطبيقات الميدانية ودراسات المحاكاة، لا يحتاج الإحصائي إلى أرقام محصورة بين الصفر والواحد، بل يحتاج إلى توليد متغيرات عشوائية مستمرة تتوزع على نطاقات عددية تتلاءم مع الظواهر الواقعية المدروسة. يمثل تمديد النطاق من النطاق الافتراضي $(0, 1)$ إلى النطاق المستهدف $(0, n)$ أولى العمليات الجبرية الخطية وأبسطها، ويتحقق ذلك بضرب المتغير الناتج من دالة RANUNI في المعامل القياسي $n$. وتأخذ الصيغة الجبرية للتحويل الشكل الآتي:
$$Y = n \times \text{RANUNI}(\text{seed})$$

إذا افترضنا أننا بصدد محاكاة درجات قياس لمتغير نفسي مستمر يتراوح بين 0 و10 درجات، فإن صياغة خطوة البيانات في SAS ستكون كالتالي:

DATA work.scaled_range;
    seed = 99281;
    continuous_score = 10 * RANUNI(seed);
RUN;

يتميز هذا التحويل الخطي بالحفاظ الصارم والمطلق على الخصائص الجوهرية للتوزيع المنتظم؛ حيث تظل احتمالية وقوع المتغير في أي فترة جزئية ذات طول ثابت متساوية تماماً عبر كامل النطاق الجديد من 0 إلى 10. وتتحول القيمة المتوقعة للمتغير الجديد لتصبح $\mu_Y = n \cdot E(X) = 10 \times 0.5 = 5.0$، في حين يتسع التباين الإحصائي بمقدار مربع معامل الضرب وفق النظرية الرياضية لخواص التباين:
$$\sigma_Y^2 = Var(n \cdot X) = n^2 \cdot Var(X) = 100 \times \frac{1}{12} \approx 8.333$$
مما يحقق التشتت المتوازن والمطلوب للدراسة الإحصائية.

5.2 إزاحة النطاق العددي لتوليد قيم ضمن فترة مغلقة [a, b]

عندما تتطلب التجربة محاكاة متغيرات فيزيائية أو سلوكية تنحصر في مدى محدد يبدأ من حد أدنى $a$ ينأى عن الصفر، وينتهي عند حد أقصى $b$، تصبح عملية الضرب البسيطة غير كافية، ويبرز الاحتياج إلى تطبيق تحويل خطي يجمع بين تغيير المقياس (Scale Shift) وتغيير الموقع أو الإزاحة (Location Shift). وتصاغ المعادلة الرياضية العامة لهذا التحويل كما يلي:
$$\text{Value} = a + (b – a) \times \text{RANUNI}(\text{seed})$$

في هذا النموذج، يمثل المقدار $(b – a)$ المدى الكلي للمتغير المستهدف، بينما يمثل المعامل $a$ نقطة الارتكاز أو الإزاحة الصفرية للحد الأدنى. يوضح الكود التالي كيفية توليد عينة لمحاكاة أوزان عينة من المشاركين تتراوح أوزانهم حصراً بين 50 كيلوغراماً و100 كيلوغرام:

DATA work.custom_interval;
    seed = 54321;
    lower_limit = 50;
    upper_limit = 100;
    participant_weight = lower_limit + (upper_limit - lower_limit) * RANUNI(seed);
RUN;

يقوم النظام أولاً بحساب المدى $(100 – 50 = 50)$، ثم يضربه في القيمة العشرية الناتجة من دالة RANUNI التي تقع في النطاق $(0, 1)$، لتنتج قيمة جزئية تتراوح بين 0 و50، ثم تضاف القيمة إلى الحد الأدنى 50. تضمن هذه الآلية البرمجية الصارمة عدم خروج أي رصدة مولدة عن النطاق المفتوح $(50, 100)$، مع ضمان الانتظام التام في كثافة التوزيع عبر كامل المساحة البينية.

5.3 تطبيقات النطاقات المخصصة في قياسات العلوم الإنسانية

تفتح إمكانية ضبط وتعديل النطاقات العددية آفاقاً تطبيقية واسعة في حقول القياس النفسي (Psychometrics) والعلوم الإنسانية والاجتماعية. ففي أبحاث علم النفس التجريبي، يحتاج الباحثون إلى محاكاة اختبارات أزمنة الرجع (Reaction Times – RT) للمشاركين عند تعريضهم لمحفزات بصرية أو سمعية معينة. ولأن أزمنة الاستجابة البشرية مقيدة بحدود فسيولوجية وعصبية لا يمكن النزول عنها، يمكن توظيف دالة RANUNI المنزاحة لمحاكاة أزمنة رجع تقع بين 250 ملي ثانية (الحد الأدنى للاستجابة العصبية الإدراكية) و800 ملي ثانية (الحد الأقصى قبل اعتبار المشارك شارد الذهن).

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

6. توليد قيم عشوائية متعددة باستخدام الحلقات التكرارية

6.1 هيكلة حلقة DO لتوليد عينات بيانات كبيرة

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

DATA work.large_sample;
    seed = 77123;
    DO i = 1 TO 100000;
        u_val = RANUNI(seed);
        OUTPUT;
    END;
RUN;

في هذا النموذج الإجرائي، يُهيئ النظام المتغير التكراري i ليبدأ من القيمة 1 وصولاً إلى 100,000. ويكمن السر البرمجي الدقيق في أن المبرمج يقدم البذرة seed كمتغير يحمل القيمة الابتدائية في الدورة الأولى؛ وبمجرد أن تُقيّم الدالة RANUNI(seed) في الدورة الأولى، يتولى نظام SAS داخلياً إدارة مؤشر البذرة في منطقة التخزين المؤقت للبرنامج (Program Data Vector – PDV). ومع كل تكرار جديد للحلقة، يُحدث النظام المتتالية تلقائياً دون إعادة ضبطها على القيمة الأصلية، مما يضمن تدفق مئة ألف رقم عشوائي فريد ومستقل تماماً عن بعضه البعض.

6.2 إدارة المؤشرات واستخدام تعليمة OUTPUT بشكل منهجي

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

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

DATA work.clean_sample(DROP = i seed);
    seed = 123456;
    DO i = 1 TO 50000;
        random_measurement = RANUNI(seed);
        OUTPUT;
    END;
RUN;

يضمن تضمين تعليمة DROP = i seed بين قوسي خيارات اسم الجدول بقاء ملف البيانات مقتصراً فقط على المتغير العشوائي النقي المستهدف random_measurement، مما يحافظ على نظافة مصفوفة البيانات وترشيد حجمها على وسائط التخزين الدائمة.

6.3 تقييم كفاءة الذاكرة والأداء الحسابي عند معالجة العينات الضخمة

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

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

7. توليد أعداد عشوائية صحيحة باستخدام دالتي CEIL وFLOOR مع RANUNI

7.1 دمج دالة CEIL لتوليد أرقام صحيحة من 1 إلى n

في العديد من سيناريوهات البحث والتطبيق البرمجي، يحتاج الباحث إلى توليد أعداد صحيحة منفصلة (Discrete Integers) لتمثيل متغيرات اسمية أو رتبية، مثل رمي نرد ذي ستة أوجه، أو اختيار أرقام تعريفية للمشاركين تتراوح بين $1$ و$n$. نظراً لأن دالة RANUNI تنتج أرقاماً كسرية مستمرة حصراً في المدى المفتوح $(0, 1)$، فإن الاعتماد على دوال التقريب الرياضي يصبح ضرورة حتمية لإجراء التحويل المتقن. وتُعد دالة السقف الإحصائية CEIL الخيار البرمجي الأكثر سلامة وكفاءة لهذا التحويل.

تعمل دالة CEIL (اختصار Ceiling) على تقريب أي قيمة عددية تحتوي على كسر عشري إلى أصغر عدد صحيح تالٍ يكون أكبر من أو مساوياً لتلك القيمة. وتأخذ الصيغة المنهجية لتوليد أرقام صحيحة تقع في النطاق من 1 إلى $n$ الشكل التالي:

Integer_Var = CEIL(RANUNI(seed) * n);

إذا أردنا محاكاة أرقام صحيحة تقع بين 1 و6 (أوجه النرد)، فإن ضرب ناتج RANUNI في 6 سينتج قيماً كسرية تنحصر في النطاق المفتوح $(0, 6)$. عند تطبيق دالة CEIL على هذا المدى، فإن أي قيمة تقع بين $0.0000001$ و$1.0000000$ ستتحول حتماً إلى العدد الصحيح $1$، وأي قيمة تقع بين $1.0000001$ و$2.0000000$ ستتحول إلى العدد $2$، وهكذا دواليك حتى المجال الأخير بين $5.0000001$ و$5.9999999$ الذي سيتحول إلى العدد $6$. وبما أن دالة RANUNI لا تنتج الصفر التام إطلاقاً، فإن احتمالية ظهور القيمة صفر تصبح معدومة تماماً، مما يضمن التوزيع الاحتمالي المتساوي والعادل بنسبة $1/n$ لكل عدد صحيح في المتتالية.

7.2 استخدام دالة FLOOR للتحويل العشري إلى الصحيح

على الطرف النقيض من دالة السقف، تبرز دالة الأرضية الرياضية FLOOR، والتي تختص باقتطاع الجزء العشري وتقريب القيمة العددية إلى أكبر عدد صحيح سابق يكون أصغر من أو مساوياً للقيمة المدخلة. تُستخدم هذه الدالة على نطاق واسع في المعالجات الحسابية لعلوم الحاسوب وبناء الفهارس الرقمية المعتمدة على الصفر (Zero-based indexing)، حيث يُراد توليد أعداد صحيحة تبدأ من الصفر وصولاً إلى الحد $n-1$. وتصاغ العلاقة الرياضية لهذه العملية وفق النموذج التالي:

Index_Var = FLOOR(RANUNI(seed) * n);

عند ضرب القيمة العشوائية في $n$ وتطبيق دالة FLOOR، فإن أي رقم يقع في المدى الكسري بين $0.0000001$ و$0.9999999$ سيتحول إلى القيمة الصحيحة $0$. وتتوالى هذه العملية لتتحول القيم في المدى الكسري الأخير بين $(n-1).0000001$ و$(n-1).9999999$ إلى القيمة الصحيحة $n-1$. ولتعديل هذا النطاق ليبدأ من حد أدنى صحيح اختياري $a$ وصولاً إلى حد أعلى $b$، تُعاد صياغة المعادلة بإضافة الحد الأدنى والإزاحة المنطقية كما يلي:

Custom_Int = a + FLOOR(RANUNI(seed) * (b - a + 1));

يضمن هذا التركيب البرمجي توزيعاً متكافئاً لكافة الأعداد الصحيحة المحصورة داخل الفترة المغلقة $[a, b]$ دون حدوث أي نقص أو انحياز في احتمالية ظهور الأطراف العددية.

7.3 مخاطر التحيز الحسابي وطرق المعايرة لضمان التوزيع العادل

يقع عدد كبير من مبرمجي الإحصاء ومحللي البيانات في خطأ منهجي فادح عند محاولة توليد أعداد عشوائية صحيحة عبر استخدام دالة التقريب الحسابي التقليدية ROUND، مستخدمين صياغات برمجية معيبة مثل Bad_Var = ROUND(RANUNI(seed) * n);. يُحدث هذا الاستخدام تشوهاً إحصائياً خطيراً في مصفوفة الاحتمالات يُعرف بظاهرة “تحيز الأطراف” (Edge Bias Problem). يرجع سبب هذا التحيز إلى أن آلية عمل دالة ROUND تقوم بتقريب القيم إلى أقرب عدد صحيح وفق فترات عطف متناصفة؛ فالأعداد الداخلية (مثل الأرقام من 1 إلى $n-1$) تتلقى قيماً كسرية تمتد على مدى كامل يبلغ وحدة صحيحة واحدة (أي من $k – 0.5$ إلى $k + 0.5$).

في المقابل، فإن القيمة الطرفية الدنيا (وهي الصفر) لا تتلقى إلا قيماً كسرية تمتد فقط من $0.0$ إلى $0.49999$ (أي بنطاق يبلغ نصف وحدة)، والقيمة الطرفية العليا $n$ لا تتلقى إلا قيماً كسرية تمتد من $n – 0.49999$ إلى $n.0$ (نصف وحدة أيضاً). ونتيجة لذلك، تصبح احتمالية ظهور القيم الطرفية مساوية لنصف احتمالية ظهور القيم المتوسطة، مما يدمر فرضية التوزيع المنتظم المنفصل ويفسد التجربة المعملية برمتها.

للبرهنة الميدانية والتحقق من سلامة وعدالة التوزيع الناتج عن دالتي CEIL وFLOOR، ينبغي على الباحث إجراء اختبار حسن المطابقة لمربع كاي (Chi-Square Goodness-of-Fit Test) عبر إجراء PROC FREQ. يوضح الكود التالي كيفية تطبيق هذا الاختبار للتأكد من عدم وجود تحيز إحصائي في الأرقام الصحيحة المولدة:

DATA work.test_bias;
    seed = 44321;
    DO rep = 1 TO 60000;
        dice_roll = CEIL(RANUNI(seed) * 6);
        OUTPUT;
    END;
RUN;

PROC FREQ DATA=work.test_bias;
    TABLES dice_roll / CHISQ TESTP=(16.6667 16.6667 16.6667 16.6667 16.6667 16.6667);
RUN;

يفحص هذا الاختبار الإحصائي مدى تقارب التكرارات المشاهدة لأوجه النرد الستة مع التكرار المتوقع النظري (وهو 10,000 مشاهدة لكل وجه). تشير القيمة الاحتمالية الكبيرة (p-value > 0.05) لاختبار كاي تربيع إلى فشل رفض الفرضية الصفرية، مما يقدم دليلاً إحصائياً قاطعاً على عدالة المولد وتساوي فرص ظهور كافة الأعداد الصحيحة دون أي انحياز حسابي.

8. التطبيقات العملية لدالة RANUNI في الأبحاث والتجارب

8.1 التقسيم العشوائي للمشاركين إلى مجموعات تجريبية وضابطة

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

DATA work.clinical_trial_assignment;
    SET work.patient_roster;
    seed = 987654;
    assignment_prob = RANUNI(seed);
    IF assignment_prob < 0.50 THEN DO;
        treatment_group = 'Experimental Arm';
    END;
    ELSE DO;
        treatment_group = 'Control Arm ';
    END;
    DROP assignment_prob seed;
RUN;

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

8.2 سحب العينات الطبقية والعشوائية البسيطة من قواعد البيانات

في الدراسات المسحية الكبرى والتحليلات الوبائية، تتضمن قواعد البيانات ملايين السجلات، في حين تتطلب الميزانيات البحثية أو المعالجات الحاسوبية المعقدة سحب عينة عشوائية بسيطة (Simple Random Sample) تمثل نسبة مئوية محددة من المجتمع الأصلي. تتيح دالة RANUNI بالاشتراك مع تعليمة التصفية الشرطية WHERE تنفيذ عملية السحب هذه بمنتهى السلاسة وبأدنى استهلاك لموارد النظام، كما يوضح المثال التالي لسحب عينة عشوائية بنسبة 20%:

DATA work.survey_sample;
    SET work.large_population_registry;
    IF RANUNI(2023) LE 0.20;
RUN;

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

8.3 المحاكاة الإحصائية لتقييم قوة الاختبارات وتوزيعات المعاينة

تمثل تجارب مونت كارلو (Monte Carlo Simulations) ذروة الاستخدامات المتقدمة لدالة RANUNI في ميدان الإحصاء التطبيقي والقياس النفسي. فعند الرغبة في حساب القوة الإحصائية (Statistical Power) لاختبار إحصائي جديد لا تتوفر له صيغ رياضية مغلقة ومباشرة لحساب حجم العينة المطلوب، يلجأ الباحث إلى بناء دورات محاكاة افتراضية تتكرر لآلاف المرات. تُولَّد في كل دورة عينات بيانات متعددة خاضعة لأخطاء قياس عشوائية (Measurement Errors) مصممة عبر دالة RANUNI والتحويلات الاحتمالية المرتبطة بها.

تُطبق الاختبارات الإحصائية المستهدفة (مثل اختبارات t أو نماذج الانحدار الخطي المتعدد) على كل عينة محاكاة، ويتم تسجيل ما إذا كان الاختبار قادراً على رفض الفرضية الصفرية عند مستوى دلالة محدد ($\alpha = 0.05$). بعد انتهاء الآلاف من الدورات التكرارية، تُمثل النسبة المئوية لمرات الرفض الناجحة التقدير التجريبي لقوة الاختبار. تتيح هذه المحاكاة لعلماء النفس وسلوكيات القياس اختبار متانة النماذج السيكومترية تحت ظروف الانتهاك لافتراضات الاعتدالية والخطية، مما يوفر فهماً عميقاً لسلوك المقاييس النفسية في ظل اضطرابات التباين والتحيزات العشوائية.

9. المقارنة التقنية بين دالة RANUNI والدوال الإحصائية الحديثة في SAS

9.1 قيود خوارزمية التوافق الخطي في دالة RANUNI

على الرغم من النجاح التاريخي الطويل لدالة RANUNI، إلا أن التطور الهائل في القدرات الحاسوبية ونظريات التوليد العشوائي كشف عن قيود نظرية وهندسية متأصلة في خوارزمية التوافق الخطي المضاعف (MCG) التي ترتكز عليها الدالة. يرتبط العيب الأساسي الأول بطول دورة التكرار (Period Length)؛ إذ تبلغ أقصى فترة لمولد RANUNI القيمة $2^{31} – 2$، أي ما يعادل تقريباً $2.14 \times 10^9$ رقماً فريداً. وفي عصر البيانات الضخمة (Big Data) والمعالجات متعددة الأنوية فائقة السرعة، يمكن لجهاز حاسوبي حديث استنفاد هذه الدورة في بضع دقائق فقط، مما يؤدي إلى إعادة تكرار السلسلة العشوائية وانهيار استقلالية العينات في النماذج المليونية الكبرى.

أما القيد الهندسي الأكثر خطورة، فيتمثل فيما يُعرف إحصائياً باسم “نظرية مارساليّا” (Marsaglia’s Theorem – “Random numbers fall mainly in the planes”). بموجب هذا الكشف الرياضي الصادم الذي برهن عليه عالم الرياضيات جورج مارساليّا، فإن الأرقام شبه العشوائية المولدة بواسطة مولدات التوافق الخطي تترتب، عند رسمها في فضاءات متعددة الأبعاد (Hypercubes)، على عدد محدود جداً من المستويات المتوازية متناهية الرقة، تاركة مساحات شاسعة فارغة بينها، كما يوضح الشكل الهندسي التالي لتوزيع النقاط:

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

9.2 البدائل المتقدمة: دالة RAND مع التوزيع المنتظم ‘Uniform’

استجابة لتلك القيود النظرية والتطبيقية، أحدثت شركة SAS معهد التحليل الإحصائي نقلة نوعية كبرى في منظومتها البرمجية عبر تقديم دالة RAND الحديثة والوظائف الإدارية المرافقة لها مثل إجراء CALL STREAMINIT. لا تعتمد دالة RAND('Uniform') على خوارزميات التوافق الخطي القديمة، بل تستند إلى واحدة من أحدث وأقوى خوارزميات التوليد العشوائي في العالم، وهي خوارزمية ميرسين تورستر (Mersenne Twister – MT19937) التي طورها العالمان ماكوتو ماتسوموتو وتاكوجي نيشيمورا عام 1998.

تتميز خوارزمية Mersenne Twister المعتمدة في دالة RAND بفترة تكرار خرافية تبلغ $2^{19937} – 1$ (وهو رقم فلكي يتجاوز بكثير عدد الذرات في الكون المنظور)، إلى جانب تجانس توزيعي فائق ومثبت رياضياً يصل إلى 623 بعداً متتالياً. يتيح هذا التفوق الرياضي المذهل توليد مليارات المليارات من الأرقام العشوائية المستقلة دون أدنى خشية من تكرار السلسلة أو تشكل المستويات المتوازية الضيقة التي عانت منها دالة RANUNI. وتُستدعى دالة RAND الحديثة في SAS بصيغة برمجية واضحة المعالم:

DATA work.modern_generation;
    CALL STREAMINIT(12345);
    u_modern = RAND('Uniform');
RUN;

توصي التوجيهات الفنية الرسمية الصادرة عن شركة SAS بضرورة اعتماد دالة RAND في كافة المشاريع البرمجية الحديثة والتحليلات الإحصائية المتقدمة، واعتبار دالة RANUNI دالة قديمة (Legacy Function) يُحافظ عليها في النظام لغرض التوافقية الرجعية مع الأكواد التاريخية فقط.

9.3 دراسة مقارنة للمخرجات والدقة الحسابية بين RANUNI وRAND

عند إجراء دراسة مقارنة تفصيلية بين مخرجات دالتي RANUNI وRAND('Uniform')، تتضح الفروق الجوهرية ليس فقط في البنية الخوارزمية التحتية، بل في الدقة الحسابية والخصائص المعيارية للاستقلالية الإحصائية. يوضح الجدول المقارن التالي أبرز المعالم التقنية والمنهجية الفاصلة بين كلا المولدين في بيئة نظام SAS:

المعيار الإحصائي والتقني دالة RANUNI التقليدية دالة RAND(‘Uniform’) الحديثة
الخوارزمية الرياضية الأساسية مولد التوافق الخطي المضاعف (MCG) ميرسين تورستر (Mersenne Twister MT19937)
طول دورة التكرار (Period) $2^{31} – 2 \approx 2.14 \times 10^9$ $2^{19937} – 1 \approx 4.3 \times 10^{6001}$
تساوي التوزيع متعدد الأبعاد محدود جداً؛ تعاني من شبكات المستويات المتوازية مثبت رياضياً حتى 623 بعداً متتالياً
طريقة تهيئة البذرة مدخل مباشر داخل الدالة: RANUNI(s) روتين مستقل منفصل: CALL STREAMINIT(s)
الدعم في بيئات الحوسبة المتوازية ضعيف ومحدود؛ قد يسبب تضارباً في المتتاليات ممتاز؛ يدعم تدفقات فرعية مستقلة للمهام المتوازية

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

10. أفضل الممارسات البرمجية واستكشاف الأخطاء الشائعة ومعالجتها

10.1 تجنب استدعاء الدالة المتعدد ببذور متكررة داخل خطوة DATA واحدة

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

/* كود خاطئ منهجياً وبرمجياً */
DATA work.bad_execution;
    DO obs = 1 TO 1000;
        val = RANUNI(12345); /* خطأ فادح: إعادة ضبط البذرة */
        OUTPUT;
    END;
RUN;

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

/* الكود الصحيح برمجياً */
DATA work.correct_execution;
    seed = 12345;
    DO obs = 1 TO 1000;
        val = RANUNI(seed);
        OUTPUT;
    END;
    DROP seed;
RUN;

في هذا التركيب الصحيح، تُستخدم القيمة 12345 حصراً في الدورة الأولى، بينما يتولى مفسر SAS داخلياً استبدال قيمة المتغير seed بالحالة العشوائية المتتالية، مما ينتج ألف رقم عشوائي حقيقي ومستقل تماماً.

10.2 توثيق البذور الإحصائية لضمان النزاهة العلمية والشفافية

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

كما يُحظر نهائياً تجربة بذور متعددة وتغيير قيمها بشكل انتقائي لاختيار بذرة معينة تُعطي نتائج إحصائية ذات دلالة مرغوبة تتفق مع فرضيات الباحث (وهي الممارسة غير الأخلاقية المعروفة باسم “التنقيب عن البذور” أو Seed P-hacking). يُعد التسجيل المسبق للبروتوكول التجريبي (Pre-registration) شاملاً قيمة البذرة العشوائية وخوارزمية التعيين الدرع الواقي الذي يحمي الباحث من الانزلاق في هذه الشبهات المنهجية، ويضمن خضوع التجربة لأعلى درجات التدقيق العلمي المستقل.

10.3 تشخيص الأخطاء البرمجية ومعالجة القيم المفقودة وغير المنطقية

يواجه المطورون في بعض الأحيان رسائل تحذيرية ونتائج غير منطقية في سجل التشغيل (SAS Log) ناجمة عن سوء استخدام الدالة. من أبرز هذه المشكلات ظهور رسائل تفيد بتحويل المتغيرات النصية إلى عددية (Numeric to Character conversions) عند تمرير متغير نصي كبذرة، مما يُربك خوارزمية التوافق الخطي ويدفع النظام لتعيين قيم مفقودة (Missing Values represented by a period ‘.’) في مصفوفة النتائج.

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

وأخيراً، ينبغي للمحلل تضمين فحوصات تحقق آلية داخل الكود البرمجي (Validation Checks)، مثل تطبيق إجراء PROC MEANS لاستخراج المتوسط والحد الأدنى والأقصى للمتغيرات المولدة، والتحقق من أن المتوسط يدور دائماً في فلك $0.50$ وأن كافة القيم تقع بلا استثناء داخل المجال المفتوح المحصور بين الصفر والواحد الصحيح، لقطع الطريق أمام أي انحرافات حسابية صامتة قد تفسد المخرجات النهائية دون إطلاق تحذيرات مرئية في السجل.

الخاتمة

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

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

المراجع

Fishman, G. S., & Moore, L. R. (1982). A statistical evaluation of multiplicative congruential random number generators with modulus $2^{31} – 1$. Journal of the American Statistical Association, 77(377), 129–136. https://doi.org/10.1080/01621459.1982.10477774

Fishman, G. S., & Moore, L. R. (1986). An exhaustive analysis of multiplicative congruential random number generators with modulus $2^{31} – 1$. SIAM Journal on Scientific and Statistical Computing, 7(1), 24–45. https://doi.org/10.1137/0907002

Lehmer, D. H. (1951). Mathematical methods in large-scale computing units. Annals of the Computation Laboratory of Harvard University, 26, 141–146.

Marsaglia, G. (1968). Random numbers fall mainly in the planes. Proceedings of the National Academy of Sciences of the United States of America, 61(1), 25–28. https://doi.org/10.1073/pnas.61.1.25

Matsumoto, M., & Nishimura, T. (1998). Mersenne twister: A 623-dimensionally equidistributed uniform pseudo-random number generator. ACM Transactions on Modeling and Computer Simulation, 8(1), 3–30. https://doi.org/10.1145/272991.272995

SAS Institute Inc. (2016). SAS(R) 9.4 Functions and CALL Routines: Reference, Fifth Edition. Cary, NC: SAS Institute Inc. https://documentation.sas.com/

تقييم هذا المحتوى

كن أول من يقيّم هذا المحتوى

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

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