تابع IF در SPSS – راهنمای کاربردی


انتخاب یا انجام عملیات روی بعضی از مشاهدات در نرمافزار SPSS توسط تابع IF صورت میگیرد. البته از جهتی انجام تحلیلها یا اجرای بعضی از عملیات محاسبات آماری در SPSS نیز باید روی گروه یا دسته خاصی از مشاهدات انجام شود. ابزارات و توابعی زیادی در SPSS وجود دارد که به کمک آنها قادر هستیم تمرکز را روی گروه خاصی از مشاهدات قرار دهیم. از این جهت در این نوشتار به بررسی تابع IF در SPSS پرداختهایم تا به این وسیله قادر باشیم عملیات دلخواه را روی دستهای خاص از سطرهای کاربرگ SPSS اجرا کنیم. برای انجام مثالهایی در این زمینه از فایل آموزشی نمونه SPSS نیز استفاده کرده و به کمک کدنویسی در محیط Syntax نیز نحوه به کارگیری از تابع IF را مرور میکنیم.
به منظور آشنایی بیشتر با این زمینه بهتر است ابتدا نوشتارهای دیگر مجله فرادرس از جمله پنجره ویرایشگر داده (Data Editor) در SPSS — راهنمای کاربردی و آمار توصیفی در SPSS — راهنمای کاربردی را بخوانید. همچنین مطالعه نوشتارهای جمع بندی داده در SPSS — راهنمای کاربردی و رسم نمودار در SPSS — راهنمای کاربردی نیز خالی از لطف نیست.
تابع IF در SPSS
همانطور که میدانید، تابع IF یک تابع شرطی است که به کمک آن قادر به تعیین شرایط برای اجرای یک یا چند عمل هستیم. این تابع در همه زبانهای برنامهنویسی وجود دارد. بستههای محاسباتی نظیر اکسل و SPSS نیز از این تابع بهره میبرند.
برای مشخص کردن کاربرد تابع IF در SPSS از سه مثال مختلف کمک میگیریم. این مثالها را در ادامه معرفی کردهایم.
- مشخص کردن مشاهدات برحسب متغیر با محتویات تاریخی.
- مشخص کردن مشاهدات برحسب یک متغیر و جایگزینی مقادیر آنها.
- محاسبه یک متغیر جدید برحسب متغیر دیگر براساس شرط.
در انتها نیز مقایسهای بین تابع IF و دستور RECODE و همینطور DO IF انجام خواهیم داد.
نکته: اگر میخواهید دستورات محاسباتی و تحلیل SPSS روی گروه یا بخشی از مشاهدات اجرا شود، باید از به کمک «فیلتر گذاری» (Filter) یا SELECT CASES استفاده کنید. به یاد داشته باشید که تابع IF فقط روی محاسبات به منظور ایجاد متغیر جدید تاثیرگذار است.
برای انجام محاسبات در SPSS در این نوشتار از یک فایل اطلاعاتی به نام bank.sav استفاده میکنیم که میتوانید آن را از اینجا دریافت کنید. البته این فایل از مسیر زیر نیز قابل دستیابی است، زیرا مربوط به فایلهای آموزشی نرمافزار SPSS است.
C:\program files\ IBM \SPSS 24 \Samples \ English
نمونهای از اطلاعات مربوطه در این فایل را در تصویر ۱ مشاهده میکنید.

مثال ۱: مشخص کردن مشاهدات برحسب متغیر سن با تابع IF در SPSS
فرض کنید میخواهیم مشاهداتی که مربوط به افرادی است که در دهه ۸۰ به دنیا آمدهاند در فایل اطلاعاتی bank.sav مشخص کنیم. به این ترتیب به کمک یک متغیر جدید با مقادیر ۰ و ۱ مشخص میکنیم که کدام یک از افراد در این شرط صدق میکنند و کدام یک شرط گفته شده برایشان صادق نیست. کسانی که با مقدار ۱ مشخص میشوند، در این محدوده سنی قرار میگیرند و مشاهدات با مقدار ۰ خارج از این بازه هستند.
کد زیر که در پنجره Syntax نوشته شده، به سادگی این کار را انجام میدهد.
1*Create new variable holding only zeroes.
2compute born80s = 0.
3
4*Set value to 1 if respondent born between 1980 and 1989.
5if(range(xdate.year(dob),1980,1989)) born80s = 1.
6execute.
7
8*Optionally: add value labels.
9add value labels born80s 0 'Not born during 80s' 1 'Born during 80s'.
همانطور که میبینید محدوده مقادیر برای متغیر dob که مخفف (Date of Birth) است، در بازه ۱۹۸۰ تا ۱۹۸۹ قرار گرفته است. متغیر جدید نیز به نام born80s نامگذاری شده است. در انتها نیز برای تعیین برچسب مقادیر از دستور add value labels استفاده کردهایم تا به مقدار ۰ و ۱، برچسب متنی نسبت بدهیم.
نتیجه انجام این دستورات در پنجره ویرایشگر داده، منجر به ایجاد یک متغیر جدبد به نام born80s شده است. در تصویر ۲، متغیر جدید به همراه کد نوشتاری با تابع IF، برای این کار مشخص شده است.

مثال ۲: مشخص کردن مشاهدات، برحسب مقدار و تغییر مقادیر آنها با تابع IF در SPSS
در این مثال میخواهیم یک نمودار فراوانی یا هیستوگرام (Histogram) برای ساعات کاری افرادی که بیش از ۱۶۰ ساعت کار در ماه داشتهاند ترسیم کنیم. ولی میخواهیم متوسط ساعت کاری در هفته را ملاک قرار دهیم. بنابراین باید ساعت کاری در ماه را برای این افراد، بر ۴٫۳۳ (متوسط تعداد هفته در هر ماه) تقسیم کنیم.
نکته: از آنجایی که در یک سال (۱۲ ماه)، ۵۲ هفته وجود دارد به کمک تقسیم این دو عدد مشخص میشود که در هر ماه ۴٫۳۳ هفته وجود دارد:
این عملیات به کمک دستورات زیر در محیط Syntax به راحتی انجام میشود. توجه داشته باشید که متغیر whours نشانگر ساعت کاری (Working Hours) است. برای این افراد ساعت کاری ماهانه، تبدیل به متوسط ساعت کاری در هفته میشود. همچنین به یاد داشته باشید که نتیجه، در خود متغیر whours قرار خواهد گرفت.
1*Sort cases descendingly on weekly hours.
2sort cases by whours (d).
3
4*Divide 160 or more hours by 4.33 (average weeks per month).
5if(whours >= 160) whours = whours / 4.33.
6execute.
تابع IF در اینجا محدوده را تعیین کرده، و محاسبات براساس شرطی تعیین شده، انجام خواهد شد. نتیجه اجرای این عملیات در تصویر ۳، قابل مشاهده است.

نکته: همین عملیات را به کمک دستور RECODE نیز میتوان انجام داد. کد دستوری برای این کار در ادامه قابل مشاهده است. ولی توجه داشته باشید که در این صورت برای هر مقدار باید محاسبه متوسط کار هفتگی را ذهنی انجام داده و بعد از علامت مساوی قرار دهیم. به همین دلیل استفاده از تابع IF در SPSS بسیار سریعتر و همراه با دقت بیشتر برای انجام محاسبات خواهد بود.
1RECODE whours (160 = 36.95)(180 = 41.57).
مثال ۳: محاسبه یک متغیر جدید برحسب متغیر جنسیت با تابع IF در SPSS
طبق قانون کار، زمان کاری کامل در هفته برای آقایان، ۴۰ ساعت و برای خانمها، ۳۶ ساعت است. میخواهیم مشخص کنیم چه کسانی زمان کاریشان در هفته کامل بوده است. البته مشخص است که این زمان با توجه به جنسیت متفاوت است. بنابراین برای مشخص کردن این افراد باید از یک متغیر جدید و محاسبه آن با توجه جنسیت آن کارکنان استفاده کنیم.
کدی که در زیر مشاهده میکنید، چنین کاری را انجام داده و در متغیر fulltime مقدار ۱ را برای کسانی که حداقل زمان کاری کامل را داشتهاند، ثبت کرده است.
1*Compute fulltime holding only zeroes.
2compute fulltime = 0.
3
4*Set fulltime to 1 if whours >= 36 for females or whours >= 40 for males.
5if(gender = 0 & whours >= 36) fulltime = 1.
6if(gender = 1 & whours >= 40) fulltime = 1.
7
8*Optionally, add value labels.
9add value labels fulltime 0 'Not working fulltime' 1 'Working fulltime'.
10
11*Quick check.
12means whours by gender by fulltime
13/cells min max mean stddev.
همانطور که دیدید باز هم به کمک برچسب مقادیر، برای مقدار ۱ برچسب Working fulltime و برای کسانی که مقدار ۰ را دارند برچسب Not working fulltime، قرار گرفته است.
در انتها نیز برای مقایسه ساعت کاری افرادی که به طول کامل در محل شرکت حضور داشتهاند به تفکیک جنسیت یک جدول تهیه شده است که مقادیر حداقل (min)، حداکثر (max)، میانگین (mean) و انحراف معیار (stddev) در آن قرار گرفته است. این کار به کمک دستور mean انجام شده و توابع محاسباتی گفته شده، به صورت تنظیمات این دستور معرفی شدهاند.
به این ترتیب، نتیجه اجرای این کدها، جدولی است که در تصویر ۴، قابل مشاهده است. این جدول در پنجره خروجی SPSS ظاهر خواهد شد.

همانطور که میبینید، بخشهای متمایز شده در این جدول نشانگر آن است که حداکثر زمانی کار هفتگی برای خانمهایی که به طور کامل در شرکت حضور نداشتهاند، کمتر از ۳۶ ساعت است. از طرفی حداقل میزان زمان کاری برای خانمهایی که زمان کاری کامل را کسب کردهاند، برابر با ۳۶ ساعت است.
همین امر برای آقایان نیز مشخص شده است. حداکثر زمانی کاری برای آقایانی که ساعت کامل را پر نکردهاند ۳۹٫۷۵ و حداقل زمان برای کسانی که زمان کامل در شرکت حضور داشتهاند از ۴۰ ساعت بیشتر است.
تابع IF در SPSS و مقایسه آن با تابع DO IF و ELSE IF
شاید در دیگر زبانهای برنامهنویسی با عملگر DO IF آشنا باشید. در SPSS نیز این عملگر قابل استفاده است. در این قسمت به تفاوتهای این تابع با IF به صورت فهرستوار خواهیم پرداخت.
- دسترسی به تابع DO IF و ELSE IF فقط از طریق کدنویسی میسر است و از طریق فهرست دستورات نمیتوان آن را اجرا کرد. در حالیکه IF در دستور COMPUTE از فهرست TRANSFORM قرار گرفته است.
- تابع IF یک دستور تک خطی است در حالیکه DO IF احتیاج به حداقل سه خط کد دارد که شامل بخش شرطی (DO IF)، بخش محاسبات (Transformation) و خاتمه شرط (END IF) است.
- محاسبه در تابع IF با استفاده از عملگر COMPUTE انجام میشود. در حقیقت تابع IF در دستور COMPUTE برای ایجاد متغیر جدید به کار میرود در حالیکه در DO IF از دستورات دیگر مانند RECODE و COUNT نیز میتوان استفاده کرد.
- اگر قرار باشد مشاهدات را براساس بیش از یک شرط ارزیابی کرد، هنگام به کارگیری دستورات DO IF- ELSE IF، اولین شرط اولویت بالاتری دارد در حالیکه در تابع IF آخرین شرط (داخلیترین پرانتز) اولین شرطی است که مورد ارزیابی قرار میگیرد. در نتیجه زمانی که همپوشانی در شرطها وجود دارد به این موضوع باید دقت بیشتری کرد.
برای روشتر شدن موضوع و مقایسه شرطهای تو در تو با IF و گزارههای DO IF و ELSE IF به کد زیر دقت کنید. در بخش اول از ترکیب DO IF و ELSE IF برای تعیین دو شرط استفاده شده است. در حالیکه در قسمت دوم شرطها بوسیله IF تو در تو نوشته شده است.
1*DO IF: respondents meeting both conditions get result_1.
2do if(condition_1).
3result_1.
4else if(condition_2). /*excludes cases meeting condition_1.
5result_2.
6end if.
7
8*IF: respondents meeting both conditions get result_2.
9if(condition_1) result_1.
10if(condition_2) result_2. /*includes cases meeting condition_1.
در بخش DO IF مشاهداتی که شرط اول (Condition_1) برایشان صادق است جدا شده و در بخش ELSE IF به کار گرفته نمیشوند. در حالیکه با ترکیب دو تابع IF در بخش دوم، محاسبات مربوط به شرط دوم (Condition_2) فقط برای کسانی است که در شرط اول صدق میکنند به کار میرود.
تابع IF در SPSS و مقایسه آن با دستور RECODE
در بسیاری از موارد، دستور RECODE محاسبات و تعیین شرطها را سادهتر از IF صورت میدهد. البته استفاده از RECODE محدودیتهای خاص خود را هم دارد. برای مثال RECODE فقط براساس دامنهای از مقادیر عمل میکند.
برای مثال مشاهداتی که مقدار متغیر سن آنها ۰ تا ۹۹ است را با مقدار ۱ جایگزین میکند. یا میتوان همه مشاهداتی که در یک متغیر، دارای مقدار گمشده سیستمی (System Missing Value) هستند، با عدد ۵۰ جایگزین کند.
1recode overall (sysmis = 50).
در حالیکه اگر q1، نام یک متغیر باشد کد زیر به درستی عمل نخواهد کرد.
1recode overall (sysmis = q1).
در این حالت از قطعه کد که در آن از تابع IF استفاده شده است، کمک خواهیم گرفت.
1if(sysmis(overall)) overall = q1.
نکته: متاسفانه نمیتوانید به RECODE مقدار گمشده را با میانگین، یا مجموع مقادیر جایگزین کنید. بنابراین راه حل در اینجا استفاده از تابع IF است. از طرفی با استفاده از RECODE امکان ترکیب مقادیر دو متغیر در یک متغیر وجود ندارد. در حالیکه IF به خوبی از عهده آن بر میآید. به کد زیر توجه کنید که مقدار fulltime را براساس دو متغیر دیگر تعیین میکند.
1if(gender = 0 & whours >= 36) fulltime = 1.
همانطور که میتوانید امتحان کنید، این کد به درستی عمل کرده و برای خانمهایی که بیش از ۳۶ ساعت متوسط کار هفتگی دارند، مقدار متغیر fulltime را برابر با ۱ قرار میدهد.
البته با ترکیب دستور RECODE و DO IF نیز میتوان این عملیات را انجام داد ولی اگر تعداد شرطها برای مشخص کردن مشاهدات خاص زیاد نباشد، به کارگیری تابع IF سادهتر خواهد بود.
محاسبه یک متغیر جدید براساس متغیر جنسیت با تابع IF در SPSS
مثال شماره ۳ را به یاد بیاورید. در این قسمت میخواهیم با دو تابع IF و انجام محاسبات همه عملیات را در یک قطعه کد اجرا کنیم. البته در انتهای کد هم شاخصهای آماری مربوطه را استخراج خواهیم کرد.
این عملیات در کدی که در زیر دیده میشود، انجام شده است. مشخص است که در هر یک از توابع IF دو شرط جنسیت و ساعت کاری، ترکیب شدهاند و نتیجه (مقدار ۰ یا ۱) در متغیر fulltime ثبت شده است.
1*Recode whours into fulltime for everyone.
2recode whours (40 thru hi = 1)(else = 0) into fulltime2.
3
4*Apply different recode for female respondents.
5do if(gender = 0).
6recode whours (36 thru hi = 1)(else = 0) into fulltime2.
7end if.
8
9*Optionally, add value labels.
10add value labels fulltime2 0 'Not working fulltime' 1 'Working fulltime'.
11
12*Quick check.
13means whours by gender by fulltime2
14/cells min max mean stddev.
خلاصه و جمعبندی
در این نوشتار با نحوه کار تابع IF در SPSS آشنا شدید و کاربردهای آن را در محاسبه متغیرهای جدید در پنجره ویرایشگر داده (Data Editor) فرا گرفتید. به این ترتیب براساس شرطهای دلخواه میتوانیم روی بعضی از مشاهدات، محاسبات خاصی را انجام داده یا بعضی را از انجام آنها، معاف کنیم.در این بین از مجموعه دادههای آموزشی SPSS برای اجرای مثالهایی در این مورد استفاده کردیم. همچنین به کارگیری از کدهای برنامه نویسی Syntax در SPSS نیز به یاریمان آمدند، زیرا درک دستورات و استفاده از کدنویسی، نحوه اجرای عملیات را سادهتر کرده و البته سرعت انجام امور را هم بیشتر خواهد کرد. به این ترتیب هم به کمک فهرست دستورات و هم کدهای برنامهنویسی از تابع IF استفاده کردیم.