อีกทางเลือกหนึ่งแทนแนวทาง PROC SUMMMARY เมื่อรวมตัวแปรจากการสังเกตหลายรายการ

ฉันกำลังจัดการกับชุดข้อมูลการวัดซ้ำในรูปแบบกว้าง การสังเกตแต่ละครั้งแสดงถึงการวัดหนึ่งครั้งสำหรับหนึ่งวิชา และแต่ละวิชาจะถูกวัดหกครั้ง ข้อมูลประกอบด้วยตัวแปรจำลองเป็นหลัก

ฉันกำลังมองหาการนับค่าตัวแปรจำลองที่ไม่ซ้ำกันจากการสังเกตทั้งหกสำหรับแต่ละเรื่อง

มี:

 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  

ต้องการ:

                                       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                                 

แนวทางปัจจุบันของฉันคือการรวมทั้งหกแถวในแต่ละเรื่องให้เป็นหนึ่งแถวที่รักษาค่า 1 โดยใช้ Proc MEANS กับคำสั่ง BY และ OUTPUT ตามที่อธิบายไว้ใน นี้ คำถามที่เกี่ยวข้อง จากนั้นฉันใช้ Proc SUMMARY เพื่อรับค่าที่แสดงอยู่ภายใต้ตัวแปร 'Total' ในคำสั่ง have

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

มีวิธีรับจำนวนที่แตกต่าง/ไม่ซ้ำจากการสังเกตโดยไม่ต้องรวมแถวก่อนหรือไม่

ฉันชอบ PROC SQL เพราะจะทำให้ฉันสามารถนับแบบมีเงื่อนไขตามตัวแปรร่วมของหัวเรื่องที่มีอยู่ในชุดข้อมูลการทำงานของฉันได้ เช่น. สร้างคำอธิบายที่ต้องการตามเงื่อนไขของตัวแปรร่วมที่เฉพาะเจาะจงกับหัวข้อ


sas
person user10712739    schedule 23.01.2019    source แหล่งที่มา
comment
PROC SUMMARY และ MEANS เป็นสิ่งเดียวกันจริงๆ และสามารถใช้แทนกันได้มากที่สุด เพื่อช่วยเหลือ คุณสามารถแสดงโค้ดที่ใช้งานได้ และอาจลดความซับซ้อนของข้อมูลให้เป็นตัวอย่างที่ทำซ้ำได้น้อยที่สุด ที่เราสามารถทำได้ แสดงสิ่งที่คุณคาดหวังให้เป็นผลลัพธ์? ฉันสงสัยว่าสถิติ MAX ไม่ใช่สิ่งที่คุณต้องการแทนหรือไม่   -  person Reeza    schedule 23.01.2019
comment
ดูเหมือนว่าฉันจะไม่สามารถแก้ไขคำถามได้ในตอนนี้ ฉันได้โพสต์คำขอการสนับสนุนบนเว็บไซต์เมตา ทันทีที่ปัญหาได้รับการแก้ไข ฉันจะแก้ไขคำถาม สำหรับตอนนี้ ฉันสามารถพูดได้ว่าสำหรับ SubjectID แต่ละตัว ฉันอยากจะสร้างคำอธิบายโดยบอกฉันว่าตัวแปรจำลองจำนวนเท่าใดที่มีค่า 1 ในการวัดทั้งหกครั้ง สำหรับ ID1 นี่จะเป็น 1 (Dummy1) สำหรับ ID2 นี่จะเป็น 3 (Dummy 0, Dummy1 และ Dummy99)   -  person user10712739    schedule 23.01.2019
comment
เหตุใด SQL จะทำให้การนับแบบมีเงื่อนไขง่ายขึ้น   -  person Tom    schedule 23.01.2019


คำตอบ (1)


ฉันสงสัยว่าการใช้ PROC SUMMARY (aka PROC MEANS) จะเป็นวิธีที่ง่ายที่สุด ดูเหมือนคุณต้องการหา MAX สำหรับแต่ละ SUBJECT แล้ว SUM เพื่อให้ได้ผลรวมของวิชา

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;

ไม่แน่ใจว่า SQL ช่วยเรื่องการนับแบบมีเงื่อนไขได้อย่างไร แต่คุณสามารถสร้างการนับและผลรวมในขั้นตอนเดียวด้วย PROC SQL แต่จะต้องมีโค้ดวอลเปเปอร์ดังนี้:

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;

คุณอาจกำหนดมาโคร (หรือเครื่องมืออื่น ๆ ) เพื่อสร้างโค้ดวอลเปเปอร์นั้นให้คุณจากรายการชื่อตัวแปร

person Tom    schedule 23.01.2019