Sebuah alternatif dari pendekatan RINGKASAN PROC saat menjumlahkan variabel di beberapa observasi

Saya berurusan dengan kumpulan data pengukuran berulang dalam format lebar. Setiap observasi mewakili satu pengukuran untuk satu subjek dan setiap subjek diukur sebanyak enam kali. Data tersebut sebagian besar berisi variabel dummy.

Saya ingin menghitung nilai variabel dummy unik di keenam observasi untuk setiap subjek.

Memiliki:

 MeasurementNum    SubjectID    Dummy0    Dummy1    Dummy2    Dummy3   Dummy4         
-----------------------------------------------------------------------------   
            1          1          1          1         0         0         0
            2          1          0          1         0         1         0
            3          1          -          -         -         -         -
            4          1          0          0         1         1         0
            5          1          -          -         -         -         -
            6          1          0          0         0         1         0
            1          2          1          0         0         1         0
            2          2          0          0         0         0         0  
            3          2          0          1         0         0         0
            4          2          1          1         0         1         0
            5          2          -          -         -         -         -  
            6          2          1          1         1         0         0  

Ingin:

                                       Total for       Overall
 MeasurementNum    SubjectID    ...    MeasurementNUM  Total      
--------------------------------...-----------------------------  
            1          1        ...          2         4                  
            2          1        ...          2         4                  
            3          1        ...          -         4                  
            4          1        ...          2         4                 
            5          1        ...          -         4                
            6          1        ...          1         4                  
            1          2        ...          2         4                  
            2          2        ...          0         4                    
            3          2        ...          1         4                  
            4          2        ...          3         4                  
            5          2        ...          -         4                    
            6          2        ...          3         4                                 

Pendekatan saya saat ini adalah menggabungkan keenam baris dalam setiap subjek menjadi satu baris yang mempertahankan nilai 1 menggunakan pernyataan Proc MEANS dengan BY dan OUTPUT, seperti yang dijelaskan dalam pertanyaan terkait ini. Saya kemudian menggunakan Proc SUMMARY untuk mendapatkan nilai yang tercantum di bawah variabel 'Total` dalam pernyataan miliki.

proc summary
data=have;
By SubjectID
class Dummy1-4;
output out=want sum=sum;  

Apakah ada cara untuk mendapatkan jumlah berbeda/unik di seluruh observasi tanpa menggabungkan baris terlebih dahulu?

Saya lebih suka PROC SQL karena ini juga memungkinkan saya melakukan penghitungan bersyarat berdasarkan kovariat subjek yang ada dalam kumpulan data kerja saya. Yaitu. menghasilkan deskriptif keinginan dengan syarat kovariat spesifik untuk subjek.


sas
person user10712739    schedule 23.01.2019    source sumber
comment
RINGKASAN PROC dan MEANS sebenarnya adalah hal yang sama dan paling dapat dipertukarkan. Untuk membantu, bisakah Anda menunjukkan kode yang berfungsi, dan mungkin menyederhanakan data Anda menjadi contoh minimal yang dapat direproduksi yang dapat kami kerjakan, menunjukkan apa yang Anda harapkan sebagai keluaran? Saya ingin tahu apakah statistik MAX bukan yang Anda inginkan.   -  person Reeza    schedule 23.01.2019
comment
Sepertinya saya tidak dapat mengedit pertanyaan saat ini. Saya telah memposting permintaan dukungan di situs meta. Segera setelah masalah teratasi, saya akan mengedit pertanyaannya. Untuk saat ini saya dapat mengatakan bahwa untuk setiap SubjectID saya ingin membuat deskriptif yang memberi tahu saya berapa banyak variabel dummy yang memiliki nilai 1 di keenam pengukuran. Untuk ID1 ini akan menjadi 1 (Dummy1). Untuk ID2 ini akan menjadi 3 (Dummy 0, Dummy1 dan Dummy99).   -  person user10712739    schedule 23.01.2019
comment
Mengapa SQL membuat penghitungan bersyarat menjadi lebih mudah?   -  person Tom    schedule 23.01.2019


Jawaban (1)


Saya menduga menggunakan PROC SUMMARY (alias PROC MEANS) akan menjadi cara termudah. Sepertinya Anda ingin mencari MAX untuk setiap SUBJECT dan kemudian SUM untuk mendapatkan total subjeknya.

proc summary data=have nway ;
  class SubjectID ;
  var Dummy0-Dummy999;
  output out=any(drop=_type_ _freq_) n=n_reps max= ;
run;

data want ;
  set any ;
  total = sum(of Dummy0-Dummy999) ;
run;

Tidak yakin bagaimana SQL membantu dengan penghitungan bersyarat. Namun Anda dapat menghasilkan jumlah dan total dalam satu langkah dengan PROC SQL, namun memerlukan kode wallpaper seperti ini:

proc sql ;
  create table want as 
    select SubjectID
         , count(*) as n_reps
         , max(dummy0) as dummy0
         , max(dummy1) as dummy1
         ...
         , max(dummy999) as dumyy999
         , sum
         ( max(dummy0) 
         , max(dummy1) 
         ...
         , max(dummy999)
         ) as Total
    from have
    group by 1
  ;
quit;

Anda mungkin dapat mendefinisikan makro (atau alat lain) untuk menghasilkan kode wallpaper tersebut untuk Anda dari daftar nama variabel.

person Tom    schedule 23.01.2019