چگونه متغیرهای رشته ای(متنی) را به متغیرعددی تبدیل کنیم؟
تبدیل یک متغیر رشته ای، به یک عدد،در SPSS کارساده ایست. اما بااین حال ، یک دام بزرگ، وجود دارد که تعداد کمی از افراد بدان آگاهند : مقادیر رشته ای که نمی توانند به مقادیرعددی تبدیل شوند ، بدون اینکه SPSS خطا یا هشداردهد،در سیستم،تبدیل به مقادیر گمشده می شوند. این موضوع می تواند داده های شما را بهم بریزد، بدون اینکه شما اطلاعی داشته باشید. باورنمی کنید؟ این مسئله – و راه حل – را در convert-strings.sav اثبات خواهم کرد، بخشی از آن در زیر نشان داده شده است.

تبدیل متغیرهای رشته ای به عددی در spss – روش اشتباه
درابتدا ، می توانید یک رشته (متن) را به یک متغیرعددی در variable view تبدیل کنید، همانطور که در زیر نشان داده شده است.

حال ، من خودم، هیچ زمان از این روش استفاده نمی کنم ،چراکه
- نمیتوان این عمل را، همزمان در بسیاری از متغیرها اعمال کرد، بنابراین ممکن است زحمت زیادی را بطلبد.
- هیچ دستوری تولید نمی کند، هیچ دکمه Paste وجود ندارد و هیچ چیز به پرونده سند من اضافه نمی شود.
- می تواند داده ها را بهم بریزد. با این حال ، راه حل هایی برای آن وجود دارد.
مشکل چیست؟
خوب ، بیایید این کار را انجام دهیم تا نسبت به آن ،مطالعه داشته باشیم.
- سلولهای خالی را به عنوان مقادیر گمشده کاربر، برای s3 تنظیم کنید.
- تبدیل s3 به متغیر عددی در variable view.
- آمار توصیفی را اجرا کنید.
* رشته خالی را به عنوان مقدار گمشده کاربر، برای s3 تنظیم کنید.
missing values s3 (”).
* جدول فراوانی s3 را بررسی کنید.
frequencies s3.
* اکنون s3 را به صورت دستی و در variable view به متغیر عددی تبدیل کنید.
نتیجه را بررسی کنید.
descriptives s3.
* مقدار N به جای 459 ،444 میباشد. یعنی 15 مقدار قادر به تبدیل نبودند و دلیل آن را نمی دانیم.
نتیجه

توجه داشته باشید که برخی از مقادیرمتغیر رشته ای، با کاراکتر “a“به عنوان پرچمشان نمایش داده شده اند. احتمالاً می خواهیم اینها به عدد تبدیل شوند. 459 مقدار معتبر داریم (سلولهای غیر خالی).

پس از تبدیل متغیرها به متغیرعددی ، چند جدول آمار توصیفی اجرا میکنیم. توجه داشته باشید که تنها N =444 مقدارمعتبرداریم. ظاهراً، 15 مقدار نتوانسته اند به عدد تبدیل شوند – که احتمالاً این مقدار،آن چیزی نیست که ما می خواهیم. معمولاً متوجه این مشکل نخواهیم شد، چراکه ،هیچ اخطار یا خطایی دریافت نمی کنیم.
عدم موفقیت در تبدیل – ساده ترین راه حل
صحیح ، پس چگونه می توانیم تبدیل را با خیال راحت انجام دهیم؟ خوب ، ما فقط:
● جداول فراوانی بررسی شده: چند سلول پر، قبل از تبدیل داریم؟
● متغیر (ها) را به عددی تبدیل کنید.
● Nرا در یک آمار توصیفی پس از تبدیل بازرسی کنید.اگر Nکمتر از تعداد غیر خالی مقادیر رشته ای، (فراوانی های قبل از تبدیل) باشد، ممکن است مشکلی وجود داشته باشد.
در مثال اول ، جدول فراوانی پیشین،پیشنهاد کرده است که قبل از تبدیل متغیر ، باید کاراکتر “a” را از تمام مقادیر حذف کنیم. . که تنها در عرض یک دقیقه، این کار را انجام خواهیم داد.
اگرچه روش مطمئنیست ، اما فکر می کنم که، این روش، کار زیادی دارد ، مخصوصاً برای چندین متغیر. بیایید با استفاده از یک دستورآماده، به انجام کارها سرعت بخشیم.
SPSS – تبدیل متغیر رشته ای به عددی با دستور
سریعترین راه برای تبدیل متغیرهای رشته ای به عددی ،دستور ALTER TYPE می باشد. * به ما این امکان را می دهد تا بسیاری از متغیرها را، بایک دستور یک خطی تبدیل کنیم. دستور زیر، همه متغیرهای رشته ای را با یک حرکت، تبدیل می کند. حال،جدول آمار توصیفی را بررسی می کنیم. اگرهیچ مقدارگمشده ای در سیستم، نداشته باشیم ، کار ما تمام است.
مثالی ازتغییر نوع در SPSS
* بدون ذخیره داده ها را ببندید و قبل از عملیدوباره باز کنید.
* تبدیل همه متغیرها با یک حرکت.
alter type s1 to s3 (f1) s4 (f6.3).
* آمارتوصیفی را بررسی کنید .
descriptives s1 to s4.
نکته: با توجه به نوع s1 تا s4 (f1) را تغییر دهید. همچنان باقی خواهند ماند اما رقم های اعشار، برای s4 قابل مشاهده نیست. به همین دلیل ما فرمت صحیح f را تنظیم می کنیم: f6.3 به معنای 6 کاراکتر، که شامل جدا کننده اعشاری بوده و 3 رقم اعشار، مانند 12.345 می باشد . که قالب مقادیر رشته ای ما است.
نتیجه

از آنجا که 480 مقدارمعتبر در داده هایمان داریم ،کارمان را برای s1 ،به اتمام رساندیم. با این حال ، 3 متغیر دیگر،دارای مقادیرگمشده سیستمی هستند ،که باید دلیلش را بفهمیم.
از آنجا که نمی توانیم عملیات را به حالت اول برگردانیم ، داده های خود را بدون ذخیره میبندیم و دوباره آنها را بازمی کنیم.
راه حل 2: قبل از تبدیل متغیرهای رشته را کپی کنید
اکنون همه چیز کمی فنی تر شده است. با این حال ، خوانندگان، به واسطه این روش، یک راه حل بسیار کارآمد را می آموزند که برای بسیاری از موقعیت های دیگر نیز مفید می باشد. دراصل
• همه متغیرهای رشته ای را کپی کنید.
• تبدیل تمام متغیرهای رشته ای.
•متغیرهای اصلی را با متغیرهای تبدیل شده مقایسه کنید.
خیلی دقیق ، مقادیر رشته ای غیر خالی را، که پس از تبدیل در سیستم گمشده اند را ، نشانه گذاری می کنیم. از آنجا که این موارد حداقل مشکوک هستند، ما آنها را موارد شکست خورده در تبدیل نامیده ایم.
این موضوع،ممکن است ناممکن به نظر برسد اما اگر از ترکیب مناسبی از دستورات استفاده کنیم،کاملاً عملی می باشد.
این موارد عمدتا STRING ، RECODE ، DO REPEAT و IF هستند.
چندین متغیر رشته ی را کپی و تبدیل کنید
داده ها را بدون ذخیره ببندید و قبل از اقدامی دوباره باز کنید
همه متغیرهای رشته را کپی کنید.
string c1 to c4 (a7).
recode s1 to s4 (else = copy) into c1 to c4.
* تبدیل متغیرها به عدد.
alter type s1 to s3 (f1) s4 (f6.3).
* برای هر متغیر، موارد عدم موفقیت در تبدیل را مشخص میکنیم:مواردی که مقدار تبدیل شده آن گمشده سیستمی باشد اما مقدار واقعی آن خالی نباشد.
do repeat #conv = s1 to s4 / #ori = c1 to c4 / #flags = flag1 to flag4.
if(sysmis(#conv) and #ori <> ”) #flags = 1.
end repeat.
* اگر N> 0 باشد ، تبدیل برخی از متغیرها باشکست مواجه شده است.
descriptives flag1 to flag4.
نتیجه

فقط flag3 و flag4 دارای برخی از شکست ها،در تبدیل هستند. با انتقال این موارد به بالای مجموعه داده های خود، می توانیم بصورت بصری مشکل را بررسی کنیم.
* باچشم، بررسی کنید که چرا مقادیر درتبدیل شکست میخورند.
sort cases by flag3 (d).
* برخی از مقادیر با کاراکتر “a” در پرچمشان نمایش داده شده اند.
sort cases by flag4 (d).
* برخی از مقادیر با کاراکتر “a” ازمیان “e” در پرچمشان نمایش داده شده اند.
نتیجه

حذف کاراکترهای غیرمجاز ، کپی و تبدیل
برخی از مقادیر با حروف “a” از میان “e” نمایش داده شده اند ، به همین دلیل امکان تبدیلشان وجودندارد. اکنون مشکل را برطرف خواهیم کرد.
ابتدا،داده ها را بدون اینکه ذخیره کنیم میبندیم و دوباره باز میکنیم.سپس از دستور قبلی،مجدد استفاده می کنیم اما اینبار، حروف را قبل از تبدیل حذف می کنیم.
دستور
قبل از اقدامی ،داده ها را بدون اینکه ذخیره کنیم میبندیم و دوباره باز میکنیم .
* همه رشته ها را کپی کنید.
string c1 to c4 (a7).
recode s1 to s4 (else = copy) into c1 to c4.
* کاراکتر ‘a‘ را از s3 حذف کنید.
compute s3 = replace(s3,’a’,”).
*کاراکتر”a“در میان”e” را از s4 حذف کنید.
do repeat #char = ‘a‘ ‘b‘ ‘c‘ ‘d‘ ‘e‘.
compute s4 = replace(s4,#char,”).
end repeat.
* مجدد سعی کنید متغیر را تبدیل کنید.
alter type s1 to s3 (f1) s4 (f6.3).
تبدیل ها شکست خورده را مجددا مشخص کنید.
do repeat #conv = s1 to s4 / #ori = c1 to c4 / #flags = flag1 to flag4.
if(sysmis(#conv) and #ori <> ”) #flags = 1.
end repeat.
*بررسی کنید که تبدیل موفقیت آمیز بوده باشد
descriptives flag1 to flag4.
N=0 را برای متغییر های نشانه دار(پرچم دار) شده قرار دهید بنابراین تمام شد.
کپی و متغییرهای نشانه دار شده (پرچم دار)را پاک کنید.
نتیجه
همه متغییرهای نشانه دار شده(پرچم دار) شامل مقدار گمشده(سیستمی)میشوند.این بدان معناست که دیگر هیچگونه نقصی در تبدیل وجود ندارد. همه متغیرها به درستی تبدیل شده اند. اکنون می توانیم تمام متغیرهای کپی و نشانه دار شده(پرچم دار) را حذف کنیم ، داده های خود را ذخیره کرده و ادامه دهیم.