จากประสบการณ์ ตอนเริ่มทำวิจัย หลังจากใช้โปรแกรมคำนวณค่าทางสถิติแล้ว ขั้นตอนอันน่าเบื่อ และน่าเวียนหัวคือการนำมาใส่ในตาราง..ยังจำได้ว่า พิมพ์ log file 30 กว่าหน้า ใช้เวลาครึ่งวันในการนำตัวเลขมาใส่..ปัดทศนิยม เช็คอีก..อ้าวมีผิด..วนไปวนมา..สรุปครึ่งวันที่เหลือก็สลบคะ..

หลังจากเจ็บใจอยู่นาน ก็ได้พบเทคนิคดีๆ ที่เขียนในหนังสือของ J. Scott long ที่ช่วยให้การทำตารางสรุปสถิติง่ายขึ้น..จึงอยากนำมาแบ่งปันสำหรับมือใหม่คะ สำหรับมือโปรอาจรู้อยู่แล้ว..

หมายเหตุ..
- ภาษา Stata  อาจดูน่ากลัว แต่ไม่ต้องตกใจคะ เหมือนกับรถยนต์ เราไม่ต้องรู้การทำงานของเครื่องยนต์ทั้งหมด แค่รู้ว่าขับอย่างไรก็พอ เช่นเดียวกัน เราแค่รู้ว่าส่วนไหนเราจะแทนค่าที่เราต้องการเข้าไปก็พอแล้ว
- ข้อมูลตัวเลขต่างๆ เป็นค่าสมมติ อย่านำไปอ้างอิงนะคะ..

กรณี continuous variable

ถ้าเราอยากรู้ว่า mean ของ continuous variable ระหว่างกลุ่ม control กับ treatment ต่างกันหรือไม่ ก็จะใช้ ttest..ปัญหาคือ ถ้ามี variable อยู่ 10 ตัว มานั่งพิมพ์คำสั่งทีละอันๆ นั้นแสนจะเสียเวลา

ดีขึ้นมาหน่อย ก็ใช้ loop ดังตัวอย่าง..

local varlistcon "age buncr b_bun b_cr b_alb b_alt b_hb" 
foreach var in  `varlistcon ' {
  display _new ".ttest `var ', by bdzbi_get"  // ให้บอกชื่อ variable
  ttest `var ',by (bdzbi_get)
}
ที่เห็นเป็น สีน้ำเงิน คือ เราจะตั้งชื่ออื่น เป็นอะไรก็ได้คะ เช่น mylist, X , ...
และ แดง คือ variable ของเราเอง
สังเกตว่าบรรทัดสุดท้ายนั้น ก็คือ ttest ที่แบ่งเป็นสองกลุ่ม ธรรมดานี่เอง
ส่วนที่เป็นสีดำนั้น ต้องใส่ตามนี้ทุกระเบียบนิ้วคะ ทั้งตำแหน่งเครื่องหมายปีกกา จุดเล็กจุดน้อย..Stata เป็นโปรแกรมที่เก่งแต่จู้จี้คะ

 ซึ่งก็จะได้ตารางแบบฉบับ ttest มาแต่ละ variable ทำให้ต้องพิมพ์ log file หลายหน้า แล้วมาตาลายเลือกค่าลงตารางอยู่ดี

ใจจริงเราอยากให้ Stata แสดงผลสรุปออกมาแบบนี้เลยต่างหาก

stats[7,5]
         bdz0Mn   bdz0SD   bdz1Mn   bdz1SD   pvalue
  age   65.368   17.670   58.881   16.782    0.000
buncr   20.674   10.182   17.849    8.540    0.005
b_bun  29.800   29.856   22.008   22.976    0.008
 b_cr      1.465    1.464    1.186    0.944     0.047
b_alb      3.023    8.252    3.048    4.127     0.978
b_alt   50.331  120.895   51.288  156.012    0.950
 b_hb   10.969    8.890   10.552    1.960     0.607
เทคนิคให้ได้มาดังตัวอย่างด้านบน พิมพ์ใน do file ดังนี้คะ

local myvarlistc "age buncr b_bun b_cr b_alb b_alt b_hb"
matrix stats = J(7,5,-99) //  7 คือจำนวนแถว = จำนวน variable ของเรา, 5 คือจำนวนคอร์ลัมน์ = จำนวนชนิดค่าสถิติที่เราต้องการ
matrix colnames stats = bdz0Mn bdz0SD bdz1Mn bdz1SD pvalue // ชนิดค่าทางสถิติที่เราต้องการ
matrix rownames stats = `myvarlistc ' // คือให้แต่ละแถว เอา variable เรามาเรียง
matrix list stats
local irow = 0
foreach var of varlist `myvarlistc ' {
local ++irow
qui ttest `var ',by (bdzbi_get) // ใส่ qui ให้มันไม่ต้องแสดงตาราง ttest ของแต่ละ variable ออกมา
matrix stats[`irow ',1] =r(mu_1)  // mean ของ กลุ่ม control ( BDZ =0)
matrix stats[`irow ',2] =r(sd_1)
matrix stats[`irow ',3] =r(mu_2)  // mean ของกลุ่ม treat (BDZ=1)
matrix stats[`irow ',4] =r(sd_2)
matrix stats[`irow ',5] =r(p)
}
matrix list stats, format(%9.3f) // คำสั่งให้แสดงตารางสรุป  ตรง .3 หมายถึงให้แสดงทศนิยมสามตำแหน่ง
เอ แล้วเรารู้ได้อย่างไรว่า เจ้า r(mu_1) คือ mean BDZ =0 ..เรารู้ได้โดยสองวิธี
วิธีแรกคือ พิมพ์ .help ttest แล้วหาดูตรง scalars  หรือลองทำ ttest สักค่านึง แล้วใช้คำสั่ง . return list  ยกตัวอย่าง

.ttest age, by bdzbi_get)
Two-sample t test with equal variances
------------------------------------------------------------------------------
   Group |     Obs        Mean    Std. Err.   Std. Dev.   [95% Conf. Interval]
---------+--------------------------------------------------------------------
       0 |     429     65.3683    .8531087    17.66986    63.69149     67.0451
       1 |     126    58.88095    1.495076    16.78218    55.92201    61.83989
---------+--------------------------------------------------------------------
combined |     555     63.8955    .7499654    17.66801    62.42237    65.36862
---------+--------------------------------------------------------------------
    diff |            6.487346    1.770532                3.009555    9.965137
------------------------------------------------------------------------------
    diff = mean(0) - mean(1)                                      t =   3.6641
Ho: diff = 0                                     degrees of freedom =      553
    Ha: diff < 0                 Ha: diff != 0                 Ha: diff > 0
 Pr(T < t) = 0.9999         Pr(|T| > |t|) = 0.0003          Pr(T > t) = 0.0001
แล้วมาดูว่าค่าที่เราต้องการนั้น ใช้สัญลักษณ์อะไรที่เราจะเอาไปใส่ใน matrix ได้บ้าง

. return list
scalars:
                 r(sd) =  17.66801443811525
               r(sd_2) =  16.78218443128648
               r(sd_1) =  17.66985717179163
                 r(se) =  1.770532285112493
                r(p_u) =  .000136069466383
                r(p_l) =  .999863930533617
                  r(p) =  .0002721389327661
                  r(t) =  3.664065344582976
               r(df_t) =  553
               r(mu_2) =  58.88095238095238
                r(N_2) =  126
               r(mu_1) =  65.36829836829837
                r(N_1) =  429

คะ เราก็รู้ได้ว่าอะไรคืออะไร
หากวิธีนี้ดูยุ่งยากไปนิด สามารถใช้ชุดคำสั่งเขียน ที่ต้องติดตั้งเพิ่มเติม (ฟรี) ชื่อ tabout โปรดติดตามต่อไปคะ

กรณี Dichotomous variable 

ตารางแสดง proportion และ chisquare วิธีง่ายที่สุดคือการใช้ tabout

.findit tabout

ตัวอย่าง

. tabout smsa race south using table4.txt, replace  c( freq col) stats(chi2)

variable ที่เราต้องการแบ่งกลุ่ม
ไฟล์ txt ที่ต้องการให้ผลตารางไปปรากฎ ซึ่งสะดวกต่อการพิมพ์ได้ทันที
option ในการแสดงผล ในที่นี้คือ ให้แสดง content ได้แก่ frequency และแสดง % ตามคอร์ลัมน์ --ดังนั้นกรณี continous variable เราสามารถเลือก mean, median, sd ได้เช่นกัน  ส่วน statistical test เลือก chi square
การนำผลใส่ใน Exel 
เราสามารถ "copy table" จากหน้าจอ Stata ไว้ past ใน Exel ได้ทันที  แต่ถ้าจะ copy ไปวางใน words ควรเลือกเป็น "copy text" และเลือก font courier new ขนาด 9-11
นิทานสอนใจก่อนจบ : จงเลือกใช้โปรแกรมสถิติที่เพื่อนร่วมทีมของคุณใช้ โดยเฉพาะโปรแกรมของนักสถิติที่คุณปรึกษา..เรื่องจริง เมื่อนำ log file ของ Stata ไปให้นักวิจัยอาวุโส ท่านส่ายหัวบอกเขาชำนาญ SPSS เลยต้องมานั่งแปะลง exel แถม do.file ที่เขียนไว้ก็สื่อกันไม่ได้..เศร้าคะ