Sas: الفرق بين find وindex
يمكنك استخدام الدالتين FIND و INDEX في SAS لإرجاع موضع الحرف الأول لسلسلة فرعية تظهر داخل سلسلة.
الفرق بين هاتين الدالتين هو أن الدالة FIND تتيح لك القيام بأمرين لا تستطيع الدالة INDEX القيام بهما:
- يتيح لك FIND إجراء بحث غير حساس لحالة الأحرف.
- يتيح لك FIND تحديد موضع البداية للبحث.
توضح الأمثلة التالية الفرق بين الدالتين FIND و INDEX عمليًا مع مجموعة البيانات التالية في SAS التي تحتوي على عمود جملة:
/*create dataset*/
data original_data;
input sentence $40. ;
datalines ;
A pig is my favorite animal
My name is piglet
Pigs are so cute
Here is a baby pig
His name is piggy
;
run ;
/*view dataset*/
proc print data = original_data;
مثال 1: استخدام FIND وINDEX بدون اختلافات
يوضح التعليمة البرمجية التالية كيفية استخدام الدالتين FIND و INDEX للعثور على موضع التواجد الأول للسلسلة الفرعية “خنزير” في عمود التعبير :
/*find position of first occurrence of 'pig' in phrase column*/
data new_data;
set original_data;
find_pig = find (phrase, 'pig');
index_pig = index (phrase, 'pig');
run ;
/*view results*/
proc print data = new_data;
لاحظ أن الدالتين FIND و INDEX ترجعان نفس النتائج تمامًا.
الأعمدة find_pig و index_pig عرض موضع التواجد الأول للسلسلة الفرعية “خنزير” في عمود العبارة .
المثال 2: استخدام FIND وINDEX مع بحث غير حساس لحالة الأحرف
يوضح التعليمة البرمجية التالية كيفية استخدام الدالتين FIND و INDEX للعثور على موضع التواجد الأول للكلمة “PIG” في عمود التعبير :
/*find position of first occurrence of 'PIG' in phrase column*/
data new_data;
set original_data;
find_pig = find (phrase, 'PIG', 'i');
index_pig = index (phrase, 'PIG');
run ;
/*view results*/
proc print data =new_data;
باستخدام المعدل “i” في وظيفة FIND ، تمكنا من إجراء بحث غير حساس لحالة الأحرف عن السلسلة الفرعية “PIG” في عمود العبارة.
ومع ذلك، فإن الدالة INDEX غير قادرة على إجراء بحث غير حساس لحالة الأحرف، لذا فقد قامت ببساطة بإرجاع 0 لكل صف نظرًا لأن السلسلة الفرعية الكبيرة “PIG” لم تكن موجودة في أي جملة.
مثال 3: استخدام FIND وINDEX مع موضع بداية محدد
يوضح التعليمة البرمجية التالية كيفية استخدام الدالة FIND للعثور على السلسلة الفرعية “خنزير” في عمود العبارة بدءًا من الموضع 5 بينما الدالة INDEX غير قادرة على استخدام موضع بداية محدد على الإطلاق:
/*find position of first occurrence of 'pig' in phrase column starting at position 5*/
data new_data;
set original_data;
find_pig = find (phrase, 'pig', 5 );
index_pig = index (phrase, 'pig');
run ;
/*view results*/
proc print data = new_data;
تبحث الدالة find_pig عن السلسلة الفرعية “خنزير” بدءًا من الموضع 5 في عمود العبارة .
تقوم وظيفة Index_pig ببساطة بالبحث عن السلسلة الفرعية “خنزير” في أي مكان في عمود العبارة لأنها غير قادرة على تحديد موضع بداية للبحث.
مصادر إضافية
تشرح البرامج التعليمية التالية كيفية استخدام الوظائف الشائعة الأخرى في SAS:
كيفية استخدام الدالة SUBSTR في SAS
كيفية استخدام الدالة COMPRESS في SAS
كيفية استخدام وظيفة COALESCE في SAS