Buat langkah dalam batas waktu makro SAS setelah interval yang ditentukan

Saya menggunakan SAS 9.1.3 (di server) dan memiliki makro yang mengulang array untuk memberi makan serangkaian langkah pemodelan intensif komputasi yang ditambahkan ke tabel. Saya bertanya-tanya apakah mungkin untuk mengatur waktu maksimum untuk berjalan untuk setiap elemen array. Hal ini dimaksudkan agar elemen apa pun yang membutuhkan waktu lebih dari 3 menit untuk dijalankan akan dilewati dan item berikutnya dimasukkan.

Katakanlah misalnya saya menggunakan proc nlin dengan pernyataan by untuk membangun model terpisah per kelas pada kumpulan data besar, dan satu kelas gagal melakukan konvergen; bagaimana cara melewatkan kelas itu?

Sedikit persyaratan khusus, semoga ada yang bisa membantu!


person analystic    schedule 28.10.2014    source sumber


Jawaban (2)


Satu-satunya pendekatan yang dapat saya pikirkan di sini adalah dengan menulis ulang kode Anda sehingga dijalankan masing-masing grup secara terpisah dari yang lain, dalam satu atau lebih sesi SAS/CONNECT, minta sesi induk mematikan masing-masing setelah batas waktu yang ditentukan, dan kemudian gabungkan kembali keluaran yang bertahan.

Seperti yang telah ditunjukkan oleh Dom dan Joe, ini bukanlah tugas yang sepele, tetapi mungkin saja dilakukan jika Anda cukup tertarik untuk mempelajari aspek SAS tersebut. Tempat yang baik untuk memulai hal semacam ini adalah halaman ini:

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

Saya dapat menggunakan contoh di sana dan di tempat lain sebagai dasar kerangka pemrosesan paralel sederhana (kebetulan di SAS 9.1.3!), tetapi ada banyak detail yang perlu Anda pertimbangkan. Untuk memberi Anda gambaran tentang jenis petualangan yang akan terjadi jika Anda menempuh rute ini:

  • Mempelajari cara masuk ke server Anda melalui SAS/CONNECT dalam infrastruktur apa pun yang Anda gunakan (apakah file autoexec biasa akan berfungsi? Opsi pemanggilan apa yang perlu Anda gunakan?)
  • Menjelaskan kepada sysadmin/rekan kerja Anda mengapa Anda perlu menjalankan banyak proses secara paralel
  • Mengelola sesi asinkron
  • Menyinkronkan variabel makro, definisi makro, pustaka, dan format antar sesi
  • Bug yang tidak jelas (Saya tidak dapat menggunakan opsi biasa untuk menyinkronkan perpustakaan dan harus menggulirkannya sendiri melalui call execute...)

Seseorang dapat menulis makalah SUGI (panjang) tentang topik ini, dan saya yakin ada banyak makalah SUGI di luar sana jika Anda melihat-lihat.

person user667489    schedule 28.10.2014
comment
Ini jawaban yang bagus, meski mungkin di luar kemampuan saya. Terima kasih atas bantuannya! - person analystic; 31.10.2014

Secara umum SAS berjalan secara linier. Jadi Anda tidak dapat menulis satu langkah untuk memantau langkah lain dalam program yang sama. Yang dapat Anda lakukan adalah menjalankan kode Anda dalam sesi SAS/CONNECT dan memantaunya dengan proses yang memulai sesi tersebut. Itu bukan hal sepele dan caranya berada di luar cakupan Stack Overflow.

Untuk langkah data, gunakan fungsi datetime() untuk mendapatkan tanggal dan waktu sistem saat ini. Ini diukur dalam hitungan detik. Anda dapat memeriksa waktu di dalam langkah data Anda. Hentikan langkah data dengan pernyataan stop;.

Sekarang Anda secara khusus bertanya tentang menghentikan langkah tertentu di dalam PROC. Itu harus diimplementasikan di PROC oleh pengembang SAS. Jika memungkinkan, hal ini akan didokumentasikan dalam dokumentasi prosedur. Lihat dokumentasi SAS di http://support.sas.com/documentation/.

Untuk PROC NLIN, menurut saya tidak ada parameter "break after X". Anda dapat menggunakan parameter pelacakan untuk melacak eksekusi model guna melihat apa yang terhenti. Anda kemudian dapat berupaya mengubah parameter konvergensi untuk mencoba mempercepat model yang lambat dan konvergensinya buruk.

person DomPazz    schedule 28.10.2014
comment
Anda juga dapat menggunakan program di luar SAS untuk memantau proses dan mematikan proses SAS, meskipun mungkin itu berlebihan. Juga di luar cakupan situs ini. - person Joe; 28.10.2014
comment
Masalah yang saya alami dengan parameter jejak adalah tidak ada yang dikembalikan pada langkah proc sama sekali. Langkahnya sangat lama sehingga saya harus menghentikan proses sas. - person analystic; 29.10.2014
comment
Cobalah mempersempit permasalahan untuk menemukan di mana letak permasalahannya. Jika Anda dapat mengatakan, data ini berjalan dan data ini tidak, maka mencari tahu alasannya tidaklah terlalu sulit. Jika menurut Anda ini adalah bug SAS, kirimkan tiket ke SAS TS. - person DomPazz; 29.10.2014
comment
^^ Ini mungkin pendekatan yang akan saya lakukan. Saya mencoba mengotomatiskannya, sehingga saya dapat memeriksa log untuk melihat grup data mana yang tidak berjalan. Saya hanya perlu melakukan ini secara manual dengan memberi makan satu kelompok pada satu waktu. - person analystic; 31.10.2014