Sertakan kolom 'semua' saat membatasi pernyataan di mana

Maaf jika ini sudah dijawab, saya sudah mencari tetapi kesulitan mendapatkan jawaban yang benar. Jadi, dalam tabulasi proc, saya terus mengalami masalah di mana saya ingin dapat membuat tabel yang memiliki kolom Total, tetapi ini jelas sedikit lebih rumit dari itu. Misalnya, saya perlu membuat tabel yang memiliki kolom statistik yang sesuai untuk peserta Arizona, dan kemudian kolom statistik untuk semua peserta. Jika saya membatasi pernyataan di mana menjadi di mana Negara Bagian = Arizona, jelas kolom total (menggunakan Semua) hanya akan menyertakan peserta Arizona, dan bukan itu yang saya inginkan. Solusi untuk jumlah tabel yang lebih kecil adalah dengan membuat satu tabel yang tidak dibatasi, lalu tabel yang terbatas, lalu salin dan tempel, namun itu bukanlah sesuatu yang ingin saya lakukan ketika saya memiliki 90 set tabel, satu set untuk setiap negara bagian .

Satu-satunya hal yang terlintas dalam pikiran saya adalah pembuatan semacam variabel dummy, tapi saya tidak yakin bagaimana cara melakukannya.

EDIT: Tabel yang diinginkan (dalam kasus khusus ini saya sedang mencari bantuan, saya kira itu bukan kolom, tetapi jika solusinya hanya berfungsi untuk kolom, saya mungkin dapat menyusun ulang tabel saya). Saya pada akhirnya ingin membuatnya membuat satu file untuk setiap negara bagian, dan di setiap file setiap pertanyaan dipecah satu per satu, menunjukkan total Semua Negara Bagian dan Total Negara Bagian. Saya memiliki pengaturan makro untuk melakukan itu. Tabel yang diinginkan


sas
person eee333    schedule 07.10.2016    source sumber
comment
Sarankan Anda membuat sejumlah kecil data sampel, dan menambahkannya ke pertanyaan Anda dengan contoh tabel keluaran yang Anda inginkan.   -  person Quentin    schedule 08.10.2016
comment
Terima kasih, ditambahkan! @Quentin   -  person eee333    schedule 10.10.2016


Jawaban (1)


Pertimbangkan solusi SQL di mana Anda menggunakan subkueri tabel turunan untuk menyertakan agregasi data Semua di kolom baru. Khususnya, Anda akan menggabungkan kueri Semua dengan kueri Negara karena tidak ada kunci gabungan yang digunakan. Dan karena kueri agregat total hanya menghasilkan nilai skalar, maka kueri tersebut akan berulang untuk setiap baris.

Contoh Data

* ID    Participant     Score   State
* 1     Angela Andrews  415     Arizona
* 2     Brandon Baker   813     Arizona
* 3     Charlene Clark  323     Arizona
* 4     David Douglas   689     Illinois
* 5     Erin Ellis      501     Illinois
* 6     Frank Fillmore  739     Illinois

Kode SAS

Catatan: Fungsi agregat digunakan untuk Semua kolom di kueri utama luar dapat dipertukarkan karena hanya satu nilai yang dioperasikan pada Max(Val) = Min(Val) = Mean(Val) ... -variasi yang disertakan sebagai ilustrasi:

proc sql;
    CREATE TABLE newdata AS
    SELECT data.State, 
           COUNT(data.Score) As StateCount,
           SUM(data.Score) As StateTotal,
           MEAN(data.Score) As StateMean,
           MEDIAN(data.Score) As StateMedian,       
           STD(data.Score) As StateSteDev,
           VAR(data.Score) As StateVariance,

           MAX(total.AllCount) As AllCount,
           MIN(total.AllTotal) As AllTotal,
           MEAN(total.AllMean) As AllMean,
           MEDIAN(total.AllMedian) As AllMedian,
           MAX(total.AllMedian) As AllSteDev,
           AVG(total.AllVariance) As AllVariance       
    FROM data, 
        (SELECT COUNT(data.Score) As AllCount,
                SUM(data.Score) As AllTotal,
                MEAN(data.Score) As AllMean,
                MEDIAN(data.Score) As AllMedian,       
                STD(data.Score) As AllSteDev,
                VAR(data.Score) As AllVariance 
         FROM data sub) As total
    GROUP BY data.State;
 quit;

Anda juga selalu dapat membatasi kueri utama luar menggunakan klausa WHERE: WHERE data.State = 'Arizona'

Keluaran

Obs State    StateCount StateTotal StateMean StateMedian StateSteDev StateVariance AllCount AllTotal AllMean AllMedian AllSteDev AllVariance 
1   Arizona  3          1551       517       415         260.438     67828         6        3480     580      595      595       38193.2 
2   Illinois 3          1929       643       689         125.491     15748         6        3480     580      595      595       38193.2 
person Parfait    schedule 08.10.2016
comment
Saya bingung--dari mana data dari total dataset itu berasal? - person eee333; 14.10.2016
comment
Total adalah nama tabel turunan (kueri SELECT bertumpuk diapit tanda kurung). Perhatikan bagaimana tabel ini dipisahkan dengan koma dari tabel data. Dipisahkan koma ini adalah gabungan silang implisit. - person Parfait; 14.10.2016