รวมคอลัมน์ 'ทั้งหมด' เมื่อจำกัดคำสั่งตำแหน่ง

ขออภัยหากได้รับคำตอบแล้ว ฉันได้ค้นหาแล้ว แต่มีช่วงเวลาที่ยากลำบากมากในการได้สิ่งที่ใกล้เคียงกับสิ่งที่ถูกต้อง ดังนั้นในตาราง proc ฉันยังคงพบปัญหาที่ฉันต้องการสร้างตารางที่มีคอลัมน์ผลรวม แต่เห็นได้ชัดว่าซับซ้อนกว่านั้นเล็กน้อย ตัวอย่างเช่น สมมติว่าฉันต้องสร้างตารางที่มีคอลัมน์สถิติที่เหมาะสมสำหรับผู้เข้าร่วมในรัฐแอริโซนา จากนั้นจึงสร้างคอลัมน์สถิติสำหรับผู้เข้าร่วมทั้งหมด ถ้าฉันจำกัดคำสั่งwhere ให้อยู่ที่ State = Arizona แน่นอนว่าคอลัมน์ทั้งหมด (โดยใช้ทั้งหมด) จะรวมเฉพาะผู้เข้าร่วมในแอริโซนาเท่านั้น ซึ่งไม่ใช่สิ่งที่ฉันต้องการ วิธีแก้ปัญหาสำหรับตารางจำนวนน้อยคือสร้างตารางหนึ่งตารางที่ไม่จำกัด จากนั้นจึงคัดลอกและวาง แต่นั่นไม่ใช่สิ่งที่ฉันอยากทำเมื่อฉันมีตาราง 90 ชุด หนึ่งชุดสำหรับแต่ละรัฐ .

สิ่งเดียวที่อยู่ในใจของฉันคือการสร้างตัวแปรจำลองบางอย่าง แต่ฉันไม่แน่ใจว่าจะทำอย่างไร

แก้ไข: ตารางที่ต้องการ (ในกรณีนี้ ฉันกำลังค้นหาความช่วยเหลือ ฉันคิดว่ามันไม่ใช่คอลัมน์ แต่ถ้าโซลูชันจบลงด้วยการทำงานกับคอลัมน์เท่านั้น ฉันอาจปรับโครงสร้างตารางของฉันใหม่ได้) ในที่สุดฉันก็ต้องการให้มันสร้างไฟล์เดียวสำหรับแต่ละรัฐ และในแต่ละไฟล์คำถามแต่ละข้อจะถูกแยกย่อยแยกกัน โดยแสดงผลรวมของทุกสถานะและผลรวมของรัฐ ฉันมีมาโครตั้งค่าให้ทำเช่นนั้น ตารางที่ต้องการ


sas
person eee333    schedule 07.10.2016    source แหล่งที่มา
comment
ขอแนะนำให้คุณสร้างข้อมูลตัวอย่างจำนวนเล็กน้อย และเพิ่มลงในคำถามของคุณด้วยตัวอย่างตารางผลลัพธ์ที่คุณต้องการ   -  person Quentin    schedule 08.10.2016
comment
ขอบคุณ เพิ่มแล้ว! @เควนติน   -  person eee333    schedule 10.10.2016


คำตอบ (1)


พิจารณาโซลูชัน SQL ที่คุณใช้แบบสอบถามย่อยของตารางที่ได้รับเพื่อรวมการรวมข้อมูล ทั้งหมด ในคอลัมน์ใหม่ โดยเฉพาะอย่างยิ่ง คุณจะข้ามการรวมแบบสอบถาม ทั้งหมด กับแบบสอบถาม สถานะ เนื่องจากไม่มีการใช้คีย์การรวม และเนื่องจากการสืบค้นแบบรวมทั้งหมดจะให้ผลเฉพาะค่าสเกลาร์เท่านั้น จึงจะทำซ้ำสำหรับทุกแถว

ตัวอย่าง ข้อมูล

* 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

รหัส SAS

หมายเหตุ: ฟังก์ชันรวม ใช้สำหรับคอลัมน์ ทั้งหมด ในการสืบค้นหลักภายนอกสามารถใช้แทนกันได้ เนื่องจากมีเพียงค่าเดียวเท่านั้นที่ดำเนินการบน Max(Val) = Min(Val) = Mean(Val) ... -รวมความหลากหลายไว้เป็นภาพประกอบ:

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;

นอกจากนี้คุณยังสามารถจำกัดการสืบค้นหลักภายนอกได้เสมอโดยใช้ส่วนคำสั่ง WHERE: WHERE data.State = 'Arizona'

เอาต์พุต

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
ฉันสับสนว่าข้อมูลจากชุดข้อมูลทั้งหมดมาจากไหน - person eee333; 14.10.2016
comment
ผลรวมคือชื่อของตารางที่ได้รับ (แบบสอบถาม SELECT ที่ซ้อนกันอยู่ในวงเล็บ) โปรดสังเกตวิธีการคั่นด้วยเครื่องหมายจุลภาคจากตาราง ข้อมูล เครื่องหมายจุลภาคคั่นนี้คือการรวมข้ามโดยนัย - person Parfait; 14.10.2016