สร้างขั้นตอนในการหมดเวลาแมโคร SAS หลังจากช่วงเวลาที่กำหนด

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

เช่น ฉันกำลังใช้ proc nlin กับคำสั่ง by เพื่อสร้างโมเดลแยกกันต่อคลาสบนชุดข้อมูลขนาดใหญ่ และคลาสหนึ่งล้มเหลวในการมาบรรจบกัน ฉันจะข้ามชั้นเรียนนั้นได้อย่างไร?

มีข้อกำหนดเฉพาะเล็กน้อย หวังว่าจะมีคนช่วยได้!


person analystic    schedule 28.10.2014    source แหล่งที่มา


คำตอบ (2)


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

ดังที่ Dom และ Joe ได้ชี้ให้เห็นแล้วว่า นี่ไม่ใช่งานเล็กๆ น้อยๆ แต่ก็เป็นไปได้หากคุณมีความกระตือรือร้นเพียงพอในการเรียนรู้เกี่ยวกับแง่มุมนั้นของ SAS สถานที่ที่ดีในการเริ่มต้นสำหรับสิ่งนี้คือหน้านี้:

http://support.sas.com/rnd/scalability/tricks/connect.html

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

  • เรียนรู้วิธีลงชื่อเข้าใช้เซิร์ฟเวอร์ของคุณผ่าน SAS/CONNECT ภายในโครงสร้างพื้นฐานใดก็ตามที่คุณใช้ (ไฟล์ autoexec ปกติจะทำงานหรือไม่ คุณต้องใช้ตัวเลือกการเรียกใช้อะไรบ้าง)
  • อธิบายให้ผู้ดูแลระบบ/เพื่อนร่วมงานของคุณฟังว่าทำไมคุณจึงต้องรันหลายกระบวนการพร้อมกัน
  • การจัดการเซสชันอะซิงโครนัส
  • การซิงค์ตัวแปรแมโคร คำจำกัดความของแมโคร ไลบรารี และรูปแบบระหว่างเซสชัน
  • ข้อบกพร่องที่คลุมเครือ (ฉันไม่สามารถใช้ตัวเลือกปกติในการซิงค์ไลบรารีได้ และต้องม้วนของตัวเองผ่าน call execute...)

ใครๆ ก็เขียนบทความ SUGI (ยาวๆ) ในหัวข้อนี้ได้ และฉันแน่ใจว่ายังมีบทความอื่นๆ มากมายหากคุณลองมองไปรอบๆ

person user667489    schedule 28.10.2014
comment
นี่เป็นคำตอบที่ดี แม้ว่ามันอาจจะเกินความสามารถของฉันก็ตาม ขอบคุณสำหรับความช่วยเหลือเหมือนกัน! - person analystic; 31.10.2014

โดยทั่วไป SAS ทำงานในลักษณะเชิงเส้นตรง ดังนั้นคุณจึงไม่สามารถเขียนขั้นตอนเพื่อติดตามขั้นตอนอื่นในโปรแกรมเดียวกันได้ สิ่งที่คุณสามารถทำได้คือเรียกใช้โค้ดของคุณในเซสชัน SAS/CONNECT และตรวจสอบด้วยกระบวนการที่เริ่มต้นเซสชัน นั่นไม่ใช่เรื่องเล็กน้อยและวิธีการอยู่นอกเหนือขอบเขตของ Stack Overflow

สำหรับขั้นตอนข้อมูล ให้ใช้ฟังก์ชัน datetime() เพื่อรับวันที่และเวลาของระบบปัจจุบัน วัดเป็นวินาที คุณสามารถตรวจสอบเวลาภายในขั้นตอนข้อมูลของคุณได้ หยุดขั้นตอนข้อมูลด้วยคำสั่ง stop;

ตอนนี้คุณถามโดยเฉพาะเกี่ยวกับการทำลายขั้นตอนเฉพาะภายใน PROC ที่ต้องนำไปใช้ใน PROC โดยนักพัฒนา SAS หากเป็นไปได้ จะมีการบันทึกไว้ในเอกสารประกอบของขั้นตอน ดูเอกสารประกอบของ SAS ได้ที่ http://support.sas.com/documentation/

สำหรับ PROC NLIN ฉันไม่คิดว่าจะมีพารามิเตอร์ "break after X" คุณสามารถใช้พารามิเตอร์การติดตามเพื่อติดตามการดำเนินการของโมเดลเพื่อดูว่ามีอะไรค้างอยู่บ้าง จากนั้น คุณสามารถดำเนินการเปลี่ยนพารามิเตอร์การลู่เข้าเพื่อพยายามเร่งความเร็วโมเดลที่ช้าและลู่เข้าไม่ดีได้

person DomPazz    schedule 28.10.2014
comment
คุณยังสามารถใช้โปรแกรมภายนอก SAS เพื่อตรวจสอบการตรวจสอบกระบวนการและปิดกระบวนการ SAS ได้ แม้ว่าบางทีอาจเกินความจำเป็นก็ตาม นอกขอบเขตของไซต์นี้ด้วย - person Joe; 28.10.2014
comment
ปัญหาที่ฉันมีกับพารามิเตอร์การติดตามคือไม่มีสิ่งใดได้รับการส่งคืนจากขั้นตอน proc เลย ขั้นตอนค้างนานมากจนฉันต้องฆ่ากระบวนการ sas - person analystic; 29.10.2014
comment
ลองจำกัดปัญหาให้แคบลงเพื่อดูว่าปัญหาอยู่ที่ใด หากคุณสามารถพูดได้ว่าข้อมูลเหล่านี้ทำงานแต่ข้อมูลไม่ได้ทำงาน งั้นก็หาสาเหตุที่ไม่ยากเกินไป หากคุณคิดว่าเป็นข้อบกพร่องของ SAS ให้ส่งตั๋วไปที่ SAS TS - person DomPazz; 29.10.2014
comment
^^นี่อาจเป็นแนวทางที่ฉันจะใช้ ฉันพยายามทำให้สิ่งนี้เป็นแบบอัตโนมัติ เพื่อที่ฉันจะได้ตรวจสอบบันทึกเพื่อดูว่ากลุ่มข้อมูลใดที่ไม่ได้ทำงาน ฉันจะต้องทำสิ่งนี้ด้วยตนเองโดยป้อนทีละกลุ่มตามที่เห็น - person analystic; 31.10.2014