Im ผู้เริ่มใช้ SAS และ Im อยากรู้อยากเห็นถ้างานต่อไปนี้สามารถทำได้ง่ายมากขึ้นตามที่อยู่ในหัวของฉัน ฉันมีเมตาดาต้า (แบบง่าย) ต่อไปนี้ในตาราง userdatemoney: User - Date - เงินกับผู้ใช้รายต่างๆและวันที่สำหรับทุกๆปฏิทิน (สำหรับ 4 ปีที่ผ่านมา) ข้อมูลถูกสั่งโดย User ASC และ Date ASC ข้อมูลตัวอย่างมีลักษณะดังนี้: ตอนนี้ฉันต้องการคำนวณค่าเฉลี่ยเคลื่อนที่ 5 วันสำหรับ Money ฉันเริ่มต้นด้วย apprach ที่นิยมมากกับ lag () ฟังก์ชันเช่นนี้: ตามที่คุณเห็นปัญหาเกี่ยวกับวิธีการนี้เกิดขึ้นถ้ามีถ้าขั้นตอนข้อมูลทำงานเป็นผู้ใช้ใหม่ Aron จะได้รับค่าล้าหลังจากแอนนาซึ่งแน่นอนว่าไม่ควรเกิดขึ้น ตอนนี้คำถามของฉัน: ฉันค่อนข้างมั่นใจว่าคุณสามารถจัดการสลับผู้ใช้โดยการเพิ่มเขตข้อมูลพิเศษเช่น laggeduser และโดยการตั้งค่า N, Sum และตัวแปรค่าเฉลี่ยถ้าคุณสังเกตเห็นเช่นเปลี่ยน แต่: นี้สามารถทำได้ในวิธีที่ง่ายขึ้นอาจใช้ โดยวิธีใดขอบคุณสำหรับความคิดและความช่วยเหลือของคุณฉันคิดว่าวิธีที่ง่ายที่สุดคือการใช้ PROC ขยาย: และดังกล่าวในความคิดเห็น Johns สำคัญที่ต้องจำเกี่ยวกับค่าที่หายไป (และเกี่ยวกับการเริ่มต้นและสิ้นสุดการสังเกตด้วย) Ive เพิ่มตัวเลือก SETMISS ลงในรหัสตามที่คุณระบุให้ชัดเจนว่าคุณต้องการ zerofy ค่าที่หายไปอย่าละเลย (พฤติกรรมเริ่มต้นของ MOVAVE) ถ้าคุณต้องการยกเว้น 4 ข้อสังเกตแรกสำหรับผู้ใช้แต่ละคน (เนื่องจากไม่มีประวัติก่อนคำนวณค่าเฉลี่ยเคลื่อนที่ 5) คุณสามารถใช้ตัวเลือก TRIMLEFT 4 ภายใน TRANSFORMOUT () ตอบเมื่อ 3 ธ. ค. 13 เวลา 15: 29 ตัวอย่างโค้ดในแท็บโค้ดแบบเต็มแสดงวิธีคำนวณค่าเฉลี่ยเคลื่อนที่ของตัวแปรผ่านชุดข้อมูลทั้งหมดในช่วงการสังเกตการณ์ครั้งล่าสุดในชุดข้อมูลหรือมากกว่าการสังเกต N ครั้งล่าสุดภายในชุดคำสั่ง BY - กลุ่ม. ไฟล์ตัวอย่างและตัวอย่างโค้ดเหล่านี้มีให้โดย SAS Institute Inc. และไม่มีการรับประกันใด ๆ ไม่ว่าจะโดยชัดแจ้งหรือโดยนัยรวมถึง แต่ไม่ จำกัด เพียงการรับประกันโดยนัยของความสามารถในเชิงพาณิชย์และความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ ผู้รับยอมรับและยอมรับว่า SAS Institute จะไม่รับผิดชอบต่อความเสียหายใด ๆ ที่เกิดขึ้นจากการใช้วัสดุนี้ นอกจากนี้ SAS Institute จะให้การสนับสนุนสำหรับเอกสารที่มีอยู่ในเอกสารฉบับนี้ ไฟล์ตัวอย่างและตัวอย่างโค้ดเหล่านี้มีให้โดย SAS Institute Inc. และไม่มีการรับประกันใด ๆ ไม่ว่าจะโดยชัดแจ้งหรือโดยนัยรวมถึง แต่ไม่ จำกัด เพียงการรับประกันโดยนัยของความสามารถในเชิงพาณิชย์และความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ ผู้รับยอมรับและยอมรับว่า SAS Institute จะไม่รับผิดชอบต่อความเสียหายใด ๆ ที่เกิดขึ้นจากการใช้วัสดุนี้ นอกจากนี้ SAS Institute จะให้การสนับสนุนสำหรับเอกสารที่มีอยู่ในเอกสารฉบับนี้ คำนวณค่าเฉลี่ยเคลื่อนที่ของตัวแปรผ่านชุดข้อมูลทั้งหมดในช่วงการสังเกตการณ์ N ครั้งล่าสุดในชุดข้อมูลหรือการสังเกตการณ์ N ครั้งล่าสุดภายในกลุ่ม BY ตัวอย่างนี้แสดงวิธีคำนวณผลรวมกลิ้งและค่าเฉลี่ยการกลิ้งโดยกำหนดอาร์เรย์ เพื่อเก็บค่าสำหรับจำนวนล่าสุดของช่วงเวลาที่ต้องการ เมื่ออาร์เรย์มีค่าที่ต้องการการคำนวณผลรวมโดยใช้ฟังก์ชัน SUM และค่าเฉลี่ยโดยใช้ฟังก์ชัน MEAN จะตรงไปข้างหน้า หนึ่งสามารถส่งอาร์เรย์ไปยังฟังก์ชันใดก็ได้เพื่อให้ได้สถิติที่ต้องการ: ตัวอย่างนี้เน้นตรรกะที่จำเป็นต้องมีช่วงเวลาล่าสุดในอาร์เรย์ก่อนที่จะคำนวณชุดสถิติกลิ้งต่อไป แนวคิดในการลบค่าที่เก่าแก่ที่สุดและแทนที่ด้วยค่าล่าสุดจะเรียกว่า FIFO - First In, First Out เมื่ออาร์เรย์ได้รับการเติมข้อมูลด้วยจำนวนครั้งเริ่มต้นระบบจะคำนวณสถิติการรีด ตัวแปรตัวนับใช้เพื่อติดตามและระบุองค์ประกอบในอาร์เรย์ที่มีค่าที่เก่าแก่ที่สุดและควรกำหนดค่าใหม่ล่าสุด ค่าใหม่ - เขียนค่าที่เก่าแก่ที่สุด หลังจากที่ได้รับมอบหมายแล้วจะมีการคำนวณสถิติการรีดใหม่ กระบวนการนี้ยังคงดำเนินต่อไปจนกว่าจะมีการอ่านค่าล่าสุดที่สนับสนุนข้อมูลสถิติจากแหล่งข้อมูล หมายเหตุ: สามารถคำนวณสถิติการรีดอื่นได้ เช่นค่าส่วนเบี่ยงเบนมาตรฐาน: ไฟล์ SAS ตัวอย่างของตัวอย่างและตัวอย่างโค้ดนี้จัดทำโดย SAS Institute Inc. และไม่มีการรับประกันใด ๆ ไม่ว่าจะโดยชัดแจ้งหรือโดยนัยรวมถึง แต่ไม่ จำกัด เพียงการรับประกันโดยนัยของความสามารถในเชิงพาณิชย์และความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ ผู้รับยอมรับและยอมรับว่า SAS Institute จะไม่รับผิดชอบต่อความเสียหายใด ๆ ที่เกิดขึ้นจากการใช้วัสดุนี้ นอกจากนี้ SAS Institute จะให้การสนับสนุนสำหรับเอกสารที่มีอยู่ในเอกสารฉบับนี้ ในขั้นตอน DATA แรกด้านล่างจะมีการสร้างข้อมูลการขายตัวอย่างเป็นเวลา 36 เดือน ในขั้นตอน DATA ที่สองอาร์เรย์จะถูกสร้างขึ้นด้วยจำนวนองค์ประกอบเท่ากันกับจำนวนงวดที่ต้องการที่จะใช้ในการคำนวณผลรวมและค่าเฉลี่ยโดยรวม เมื่ออาร์เรย์ได้รับการเติมข้อมูลด้วยจำนวนงวดที่ต้องการช่วงถัดไปจะแทนที่งวดที่เก่าที่สุดภายในอาร์เรย์ ในตัวอย่างนี้จำนวนงวดที่ต้องการคือ 12 ดังนั้นหลังจากคำนวณการกลิ้งและผลรวมของค่าเฉลี่ยในช่วง 12 งวดแรกระยะเวลาที่ 13 จะแทนที่งวดที่ 1 และคำนวณผลรวมรวมและค่าเฉลี่ยใหม่ จากนั้นระยะเวลาที่ 14 จะแทนที่ช่วงที่ 2 และคำนวณผลรวมกลิ้งและค่าเฉลี่ยใหม่ ฯลฯ ไฟล์ตัวอย่างและตัวอย่างโค้ดเหล่านี้มีให้โดย SAS Institute Inc. และไม่มีการรับประกันใด ๆ ไม่ว่าโดยชัดแจ้งหรือโดยนัยรวมถึง แต่ไม่ จำกัด เพียงการรับประกันโดยนัยของความสามารถในเชิงพาณิชย์และความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ ผู้รับยอมรับและยอมรับว่า SAS Institute จะไม่รับผิดชอบต่อความเสียหายใด ๆ ที่เกิดขึ้นจากการใช้วัสดุนี้ นอกจากนี้ SAS Institute จะให้การสนับสนุนสำหรับเอกสารที่มีอยู่ในเอกสารฉบับนี้ อาร์เรย์สามารถใช้เพื่อเก็บค่าจำนวน N ค่าล่าสุดเพื่อให้ผลรวมและค่าเฉลี่ยโดยรวมสามารถคำนวณได้จากค่าใน array. sas, 12 เดือน rolling rolling help โดย sasnewb raquo Fri, 24 Sep 2004 01:13:17 GMT ฉันมีชุดข้อมูลที่สร้างขึ้นดังต่อไปนี้: มูลค่าเดือน 200106 13256 200107 4888 200108 67602 200109 529 200110 13743 200111 53340 200112 912 200201 1003 200202 7982 200203 9620 200204 2674 200205 18790 200206 1698 การสังเกตการณ์เกี่ยวกับเดือน ฉันต้องการสร้างตัวแปรที่เป็นจำนวนรวม 12 เดือนสำหรับเดือนเช่นเดือน mth12val 200106 194339 เป็นต้นไปจนถึงเดือนปัจจุบัน 200409 สำหรับเดือนนี้ 200410 สำหรับเดือนตุลาคมเป็นต้นทุกคนสามารถเสนอวิธีแก้ปัญหาในการดำเนินการนี้ได้ Chuck aka Sasnewb รับเงิน กับอีเมลฟรีของคุณที่ zwalletindex. htmlusersasnewb sas gtgt 12 เดือนรวมเป็นเงินช่วยเหลือโดย yhuang raquo พุธ, 24 กันยายน 2547 01:34:36 GMT วันพฤหัสบดีที่ 23 กันยายน 2547 เวลา 17:13:17 0000 น. Chuck Windsor lt XXXXXXXXX gt เดือนเช่น October ฯลฯ ชนิดของการรวมกลิ้งหรือค่าเฉลี่ยเคลื่อนที่สามารถจัดการได้อย่างง่ายดายโดย SQL สมมติว่าคุณไม่มีเดือนที่หายไปและข้อมูลถูกจัดเรียงตามปีและเดือนแล้วสามารถใช้ตัวเลขการสังเกตเพื่อระบุแต่ละเดือน: ข้อมูล xx ป้อนเดือนค่า nn บัตร 200106 13256 200107 4888 200108 67602 200109 529 200110 13743 200111 53340 200112 912 200201 1003 200202 7982 200203 9620 200204 2674 200205 18790 200206 1698 proc sql เลือกแตกต่าง a. รวม (b. value) เป็น rolling จาก xx a. xx b เมื่อ lt lt lt a. n12 กลุ่มโดย -------- เดือนค่า n กลิ้ง ------------------------ -------------- 200106 13256 1 194339 200107 4888 2 182781 200108 67602 3 177893 200109 529 4 110291 200110 13743 5 109762 200111 53340 6 96019 200112 912 7 42679 200201 1003 8 41767 200202 7982 9 40764 200203 9620 10 32782 200204 2674 11 23162 200205 18790 12 20488 200206 1698 13 1698 หากข้อมูลมีเดือนหายไปเราจำเป็นต้องใช้ฟังก์ชัน SAS บางอย่างเพื่อระบุหน้าต่างซึ่งไม่ยากมากนัก Ya Huang ได้ให้โซลูชัน SQL เรียบร้อยแล้ว (ฉันคิดว่ามันทำงาน) ในกรณีเช่นฉันคุณไม่ได้เป็นป่าเกินไปเกี่ยวกับ SQL: สมมติว่าไม่มีจุดข้อมูลที่ขาดหายไปและข้อมูลจะถูกจัดเรียงเรียงลำดับตามวันที่คุณสามารถใช้ฟังก์ชันความล่าช้าในการเพิ่มความล่าช้าทั้งหมด 12 ครั้งหรือเก็บผลบวกและเพิ่ม ค่าใหม่ในขณะที่ลบความล้าหลัง 13 อดีตเป็นเรื่องง่ายที่จะเขียน แต่ฉันกลัวไม่ได้มีประสิทธิภาพมาก แต่แล้วคุณ dont มีข้อมูลมาก ข้อมูลปีป้อน 1-4 เดือน 5-6 v บัตร 200106 13256 200107 4888 200108 67602 200109 529 200110 13743 200111 53340 200112 912 200201 1003 200202 7982 200203 9620 200204 2674 200205 18790 200206 1698 ข้อมูลการดำเนินการจัดเรียงข้อมูลโดยเรียงตามลำดับจากมากไปน้อยเดือนที่เรียกใช้ข้อมูล b ตั้งค่าม้วน (v, lag1 (v), lag2 (v), lag3 (v), lag4 (v), lag5 (v), lag6 (v), lag7 (v), lag8 (v), la g9 (v), lag10 (v), lag11 (v)) รัน HTH, Dennis Diskin จาก: Chuck Windsor ส่ง: 9232004 1:21:17 PM ถึง: XXXXXXXXX เรื่อง: 12 เดือน rolling rolling ช่วยให้ฉันมีชุดข้อมูลที่สร้างขึ้นดังนี้: ค่าเดือน 200106 13256 200107 4888 200108 67602 200109 529 200110 13743 200111 53340 200112 912 200201 1003 200202 7982 200203 9620 200204 2674 200205 18790 200206 1698 ข้อสังเกตเกี่ยวกับค่ารายเดือนเพิ่มเติม ฉันต้องการสร้างตัวแปรที่เป็นจำนวนรวม 12 เดือนสำหรับเดือนเช่นเดือน mth12val 200106 194339 เป็นต้นไปจนถึงเดือนปัจจุบัน 200409 สำหรับเดือนนี้ 200410 สำหรับเดือนตุลาคมเป็นต้นทุกคนสามารถเสนอวิธีแก้ปัญหาในการดำเนินการนี้ได้ Chuck aka Sasnewb
No comments:
Post a Comment