6. SPSS Syntax ile Şartlı Kodlama (Conditional Coding)

Arayüz yerine Syntax üzerinden komut yazarak karmaşık değişkenleri hızlıca yeni gruplara kodlayabilirsiniz.

gender (Cinsiyet) değişkeninin Value Label’larına bakalım.

degurba (Kentsel Durum) değişkeninin Value Label’larına bakalım.

Hocamızın Konuyla ilgili Açıklaması: Ayrıca, çapraz kodlama (cross-coding) işlemini araştırmanın amacına ve ihtiyaçlarına göre daha da basitleştirmek mümkündür. Yerleşim yeri değişkeni kır ve kent (orta yoğunluklu kent ile yoğun kent birleştirilerek) olmak üzere iki kategoriye indirgenerek, cinsiyet değişkeni ile çaprazlandığında 4 kategorili yeni bir değişken oluşturulabilir:

Kırda yaşayan erkek

Kırda yaşayan kadın

Kentte yaşayan erkek

Kentte yaşayan kadın

Hocamız, hem orijinal planlanan 6 kategorili versiyonu (kır / orta yoğunluklu kent / yoğun kent × erkek / kadın) hem de bu 4 kategorili basitleştirilmiş versiyonu uygulamayı önermektedir. Bu sayede analizlerde farklı düzeylerde esneklik sağlanacak ve veri seti hem detaylı hem de daha kompakt özet değişkenlerle zenginleştirilecektir.

Bu bölümde daha ileri düzey kodlama teknikleri ele alınacaktır. Bu teknikler, araştırmacıların genel veri kodlama kapasitesini önemli ölçüde geliştirmekte ve veri analizinin en kritik aşamalarından biri olan veri temizleme (data cleaning) ile veri hazırlama süreçlerinin arka planında yatan temel kodlama türlerini içermektedir.

Bu beceriler SPSS ile sınırlı kalmamakta; R, Python, SAS, Stata gibi farklı istatistiksel ve programlama platformlarında da doğrudan transfer edilebilmektedir. Temel mantık ve yapı bir kez kavrandığında, diğer yazılımlarda yalnızca platforma özgü söz dizimi (syntax) farklarını öğrenmek yeterli olur ve işlemler çok daha hızlı bir şekilde gerçekleştirilebilir. Özellikle yapay zeka destekli kod üretimi çağında, bu temel kodlama anlayışına sahip olmak, “bana şunun kodunu yaz” tarzı promptlarla çok daha kaliteli ve doğru sonuçlar elde etmeyi kolaylaştırmaktadır.

Teknik Anlatım:SPSS Syntax üzerinden çapraz kodlama işlemine başlarken, hocamız veri setine geri dönerek yeni değişkeni (IF komutu ile) şu mantıkla tanımlamaktadır:

gender değişkeni 1 (erkek) ve degurban (degree of urbanization / yerleşim yoğunluğu) değişkeni 1 ise → “Köyde/Kırda yaşayan erkek”

gender = 1 ve degurban = 2 ise → “Orta yoğunluklu kentte yaşayan erkek”

gender = 1 ve degurban = 3 ise → “Yoğun kentte/Şehirde yaşayan erkek”

Bu mantık, kadınlar için de (gender = 2) aynı şekilde devam edecek ve toplamda 6 kategorili yeni bir değişken oluşturulacaktır.

Bu kodlama, IF koşul blokları kullanılarak Syntax dosyasında adım adım yazılacaktır. Her bir kombinasyon ayrı bir IF ifadesiyle kontrol edilerek yeni değişkene uygun değer atanacaktır. Bu yöntem, birden fazla değişkenin mantıksal kombinasyonundan yeni, anlamlı ve analiz için kullanışlı bir kategori değişkeni türetmek için en esnek ve kontrollü yaklaşımdır.

Bu bilgiler ışığında kodlamayı yapalım.

IF Komutu

İki farklı değişkeni birleştirerek yeni bir kod oluşturmak için kullanılır. “Ve” bağlacı AND, “Veya” bağlacı OR ile gösterilir.

Kodun Açıklaması :

Birden fazla değişkenin mantıksal kombinasyonu ile yeni bir kategori değişkeni oluşturma işlemi gösterilmektedir. SPSS Syntax kullanarak gender (cinsiyet) ve degurba (yerleşim yeri / degree of urbanization) değişkenleri çaprazlanarak 6 kategorili yeni bir değişken (genurb) türetilmiştir. Bu yöntem, çapraz kodlama (cross-coding) olarak adlandırılır ve araştırma sorularına göre daha anlamlı ve analize hazır değişkenler elde etmek için kullanılır.

Kullanılan Değişkenler

gender: Cinsiyet (1 = Erkek, 2 = Kadın)

degurba: Yerleşim yeri yoğunluğu (1 = Kır/Köy, 2 = Orta yoğunluklu kent, 3 = Yoğun kent/Şehir)

genurb: Yeni oluşturulan birleşik değişken (Gender + Urbanization)

* Yeni birleşik değişkeni oluşturuyoruz (genurb)

if (gender eq 1 and degurba eq 1) genurb=1.   /* Kırda yaşayan erkek */
if (gender eq 1 and degurba eq 2) genurb=2.   /* Orta yoğunluklu kentte yaşayan erkek*/
if (gender eq 1 and degurba eq 3) genurb=3.   /* Yoğun kentte yaşayan erkek */

if (gender eq 2 and degurba eq 1) genurb=4.   /* Kırda yaşayan kadın */
if (gender eq 2 and degurba eq 2) genurb=5.   /* Orta yoğunluklu kentte yaşayan kadın */
if (gender eq 2 and degurba eq 3) genurb=6.   /* Yoğun kentte yaşayan kadın */

* Oluşturulan yeni değişkenin frekans dağılımını kontrol ediyoruz
FREQUENCIES VARIABLES=genurb.

IF komutu: Koşullu atama yapar. Belirtilen mantıksal koşul (AND) sağlandığında, yeni değişkene (genurb) ilgili değeri atar.

eq → SPSS’te eşitlik operatörüdür (= yerine kullanılır).

Her bir IF satırı, gender ve degurba değişkenlerinin 6 olası kombinasyonunu ayrı ayrı kontrol eder.

Sonuçta oluşan genurb değişkeni 6 kategorili nominal bir değişkendir:

1 = Kırda yaşayan erkek

2 = Orta yoğunluklu kentte yaşayan erkek

3 = Yoğun kentte yaşayan erkek

4 = Kırda yaşayan kadın

5 = Orta yoğunluklu kentte yaşayan kadın

6 = Yoğun kentte yaşayan kadın

FREQUENCIES komutu: Yeni değişkenin dağılımını (frekans ve yüzde) kontrol etmek için kullanılır.

Bu syntax, veri setinde mevcut olan iki değişkeni birleştirerek analiz için daha kullanışlı ve yorumlanabilir tek bir değişken üretmektedir.

Bu kodu tarayıp yeşil play tuşu ile çalıştırdığımızda

Burada 1,2,3,4,5,6 neye karşılık geliyor. Onu yapmak için koda aşağıdaki satırlar ilave edlilir ve taranıp play ile tekrar çalıştırılır.

Temporary.
if (gender eq 1 and degurba eq 1) genurb=1.
if (gender eq 1 and degurba eq 2) genurb=2.
if (gender eq 1 and degurba eq 3) genurb=3.
if (gender eq 2 and degurba eq 1) genurb=4.
if (gender eq 2 and degurba eq 2) genurb=5.
if (gender eq 2 and degurba eq 3) genurb=6.

* Değişkene anlamlı değer etiketleri (value labels) atama
value labels genurb
  1 "Köyde yaşayan erkek"
  2 "Orta Yoğun kentte yaşayan erkek"
  3 "Yoğun kentte yaşayan erkek"
  4 "Köyde yaşayan kadın"
  5 "Orta Yoğun kentte yaşayan kadın"
  6 "Yoğun kentte yaşayan kadın".

* Yeni değişkenin frekans dağılımını kontrol etme
FREQUENCIES VARIABLES=genurb.

Önemli Not: Veri setine bunu kaydetmek için Temporary kaldırılır. (* ile pasif yaparız.) Veya Temporary’siz tarayarak çalıştırır isek veri setine kaydetmiş oluruz.

Bir Başka Durum : Karmaşık veri dönüşüm senaryolarında, belirli kombinasyonları tek tek IF komutlarıyla tanımladıktan sonra geriye kalan tüm durumları tek bir işlemle yakalama ihtiyacı doğar. SPSS Syntax’ta bu amaçla “catch-all” (her şeyi kapsama) mantığı kullanılır; yani “şu şu koşullar sağlanıyorsa ilgili değeri ata, aksi takdirde geriye kalan tüm durumları şu değere/kategoriye yönlendir” şeklinde kodlama yapılabilir. Bu mekanizma özellikle veri temizleme (data cleaning) süreçlerinde büyük önem taşır. Örneğin, anket verilerinde “boş bırakılmış”, “geçersiz” veya “kayıp” yanıtları sistematik olarak tespit edip bunları ayrı bir kategoriye veya missing value olarak işaretlemek gerektiğinde IF blokları son derece etkili bir çözüm sunar. Hocamız, bu ileri düzey koşullu kodlama tekniğinin de ilerleyen bölümde gösterileceğini belirterek, veri kodlama kapasitesinin karmaşık durumlarda da korunabileceğini vurgulamıştır.

Yeni Bir Konuya Geçiş : Hocamız, şartlı kodlama (conditional coding) konusuna devam ederek SPSS Syntax’ta DO IF yapısını tanıtmaktadır. IF komutu tek bir koşul için basit atamalar yaparken, DO IF yapısı daha karmaşık ve çoklu koşullu mantıksal akışlar için kullanılır. Bu yapı, “şu şart sağlanıyorsa şu işlemi yap, aksi takdirde şu olsun” veya “birden fazla koşulu sırayla kontrol et” gibi ileri düzey karar mekanizmalarını kodlamaya imkân tanır. DO IF bloğu özellikle şu durumlarda tercih edilir:

Birden fazla koşulun ardışık olarak kontrol edilmesi gerektiğinde,

Karmaşık veri temizleme ve dönüşüm işlemlerinde,

Bir değişkenin değerini birden fazla kritere göre yeniden kodlamada.

Hocamız önce DO IF’in basit kullanımını gösterecek, ardından daha karmaşık versiyonlarını ele alarak yapının mantığını net bir şekilde aktaracaktır. Bu yapı yalnızca SPSS ile sınırlı kalmayıp, R, Python, SAS ve Stata gibi diğer veri bilimi ve istatistik platformlarında da temel mantıksal kontrol (if-else) mekanizması olarak sıkça kullanılır. Bu nedenle öğrenilmesi, veri işleme ve kodlama becerilerini önemli ölçüde geliştirir. Bu geçiş, önceki IF komutundan daha güçlü ve esnek bir şartlı kodlama tekniğine adım attığımızı göstermektedir.

DO IF / ELSE IF / ELSE Komutları

Daha karmaşık kodlamalar için kullanılır. Sadece tek bir değişkende bile yaş aralıkları atamak gibi işlemler çok daha pratik yazılır. DO IF ile ilk şart başlatılır, aradaki tüm ek şartlar için ELSE IF kullanılır ve geriye kalan tüm durumları (kalanların hepsi) kapsamak için tek başına ELSE yazılıp işlem END IF ile kapatılır.

Hocamızın Konuyla İlgili Kurgusu : Hocamız, DO IF yapısını tanıtarak yaş değişkenini (age) yaş gruplarına dönüştürme işlemini örneklemektedir. Bu yöntem, daha önce RECODE komutu ile yapılan tek değişkenli kodlamanın DO IF + COMPUTE kombinasyonu ile alternatif bir versiyonudur.

Temporary.
DO IF (age lt 25).
    COMPUTE ahecheck = 1.
END IF.
FREQUENCIES VARIABLES = ahecheck.

Taranıp play ile çalıştırıldığında;

Hocamızın Yeni Bir Kurgu Yapıyor : “Peki geri kalan tüm durumlara (yani 25 yaş ve üzeri olanlara) da ELSE bloğu kullanarak 0 değeri atarsak kod nasıl olur?”

Uzun Yoldan Kodlama

* ================================================
* DO IF ile uzun yol yöntemi (ELSE kullanmadan)
* Yaş değişkenini kontrol ederek ahecheck değişkeni oluşturma
* ================================================

DO IF (age LT 25).
    COMPUTE ahecheck = 1.     /* 25 yaşından küçük olanlara 1 ata */
END IF.

DO IF (age GE 25).
    COMPUTE ahecheck = 0.     /* 25 ve üzeri olanlara 0 ata */
END IF.

* Oluşturulan değişkenin frekans dağılımını kontrol et
FREQUENCIES VARIABLES = ahecheck.

Tarayıp Çalıştırdığımızda aşağıdaki sonuç elde edilir.

Doğru Kodlama Şekli

Temporary.
DO IF (age LT 25).
    COMPUTE ahecheck = 1.     /* 25 yaşından küçükler = 1 */
ELSE.
    COMPUTE ahecheck = 0.     /* Geri kalan herkes (25 ve üzeri) = 0 */
END IF.

* Oluşturulan değişkenin dağılımını kontrol edelim
FREQUENCIES VARIABLES = ahecheck.

Tarayıp Çalıştırdığımızda aşağıdaki sonuç elde edilir.

Hocamızın Yeni Bir Kurgu Daha Yapıyor : “Peki, 18-24 yaş arasını grup 1 olarak kodladıktan sonra, 25-44 yaş arasını orta yaş grubu (grup 2) ve 45 yaş ile üzerini de üçüncü grup (grup 3) olarak kodlamak istediğimizde DO IF yapısını nasıl kullanırız?”

* ================================================
* DO IF - ELSE IF - ELSE ile Çoklu Yaş Grubu Kodlaması
* ahecheck değişkeni oluşturma
* ================================================
TEMPORARY.

DO IF (age LT 25).
    COMPUTE ahecheck = 1.          /* 25 yaşından küçük */

ELSE IF (age GE 25 AND age LE 44).
    COMPUTE ahecheck = 2.          /* 25 - 44 yaş arası */

ELSE.
    COMPUTE ahecheck = 3.          /* 45 ve üzeri */
END IF.

* Oluşturulan değişkenin frekans dağılımını kontrol et
FREQUENCIES VARIABLES = ahecheck.

Kısa Teknik Açıklama:

  • DO IF (age LT 25) → 25 yaşından küçük olanlar için

  • ELSE IF (age GE 25 AND age LE 44) → 25 ile 44 yaş arası olanlar için

  • ELSE → Yukarıdaki iki koşulun dışında kalan tüm durumlar (45 ve üzeri) için

  • END IF → Koşul bloğunu kapatır

Not: Koşullarımıza göre ELSE IF yapısı birden fazla olabilir.

Tarayıp Çalıştırdığımızda aşağıdaki sonuç elde edilir.

Hocamızın Yeni Bir Kurgu Daha Yapıyor Daha Karmaşık Bir Durum Olsun :“Kırsalda yaşayan hiç evlenmemiş bireyler ile yoğun kentte yaşayan hiç evlenmemiş bireyleri iki ayrı grup olarak tanımlayıp, geri kalan tüm bireyleri de tek bir grupta toplayalım.”

degurba (Kentsel Durum) değişkeninin Value Label’larına tekrar bakalım.

marital (Evlilik Durum) değişkeninin Value Label’larına bakalım.

* ================================================
* DO IF - ELSE IF - ELSE ile Çapraz Kodlama
* Kırsalda yaşayan hiç evlenmemişler = 1
* Yoğun kentte yaşayan hiç evlenmemişler = 2
* Geri kalan herkes = 0
* Yeni değişken: urbnm (urban never married)
* ================================================

DO IF (degurba EQ 1 AND marital EQ 1).
    COMPUTE urbnm = 1.     /* Kırda yaşayan hiç evlenmemiş */

ELSE IF (degurba EQ 3 AND marital EQ 1).
    COMPUTE urbnm = 2.     /* Yoğun kentte yaşayan hiç evlenmemiş */

ELSE.
    COMPUTE urbnm = 0.     /* Geri kalan tüm durumlar */
END IF.

* Oluşturulan yeni değişkenin frekans dağılımını kontrol et
FREQUENCIES VARIABLES = urbnm.

Teknik Açıklama (Satır Satır):

DO IF (degurba EQ 1 AND marital EQ 1) Koşul: Kişi kırda/köyde yaşıyorsa (degurba = 1) ve hiç evlenmemişse (marital = 1).

COMPUTE urbnm = 1 Bu koşul doğruysa urbnm değişkenine 1 değeri atanır.

ELSE IF (degurba EQ 3 AND marital EQ 1) İlk koşul sağlanmadıysa ikinci koşulu kontrol et: Kişi yoğun kentte yaşıyorsa (degurba = 3) ve hiç evlenmemişse.

COMPUTE urbnm = 2 Bu koşul doğruysa urbnm değişkenine 2 değeri atanır.

ELSE Yukarıdaki iki koşulun hiçbiri sağlanmıyorsa (yani geriye kalan tüm durumlar).

COMPUTE urbnm = 0 Bu kişilere urbnm değişkenine 0 değeri atanır.

END IF Koşul bloğunu kapatır.

FREQUENCIES VARIABLES = urbnm Yeni oluşturulan değişkenin dağılımını (frekans ve yüzde) gösterir.