ما هي أفضل خدعة لديك للخروج من شرط عرض الأسعار غير المتوازن في BASE SAS؟

StackOverflow https://stackoverflow.com/questions/107414

  •  01-07-2019
  •  | 
  •  

سؤال

باعتبارك مبرمجًا أساسيًا في SAS، فأنت تعرف التدريبات التالية:

تقوم بإرسال رمز SAS الخاص بك، والذي يحتوي على عرض أسعار غير متوازن، وبالتالي لم تحصل على عرض أسعار غير مغلق فحسب، بل حصلت أيضًا على تعليقات غير مغلقة وتعريفات وظائف الماكرو وتشغيل مفقود؛أو استقال؛إفادة.

ما هي أفضل خدعة لك حتى لا تزعجك هذه الاقتباسات غير المتوازنة؟

هل كانت مفيدة؟

المحلول

يستخدم دليل المؤسسة 3 لوضع السطر التالي أعلى الكود الذي تم إنشاؤه تلقائيًا:

*';*";*/;run;

ومع ذلك، فإن الطريقة الوحيدة "لإعادة الضبط" حقًا لجميع أنواع المشكلات غير المتوازنة هي إنهاء جلسة sas، وموازنة كل ما هو غير متوازن قبل إعادة إرسال الكود.إن استخدام هذا النوع من الاختراقات السريعة (الرخيصة؟) لا يعالج السبب الجذري.

بالمناسبة، ods _all_ close; يغلق الجميع وجهات ods، بما في ذلك وجهة النتائج الافتراضية.في جلسة تفاعلية، يجب عليك فتحه مرة أخرى باستخدام ods results; أو ods results on; على الأقل وفقا للوثائق.ولكن عندما قمت بتجربته على جهازي 9.2 لم يعمل كما هو موضح أدناه:

%put sysvlong=&sysvlong sysscpl=&sysscpl;
/* sysvlong=9.02.01M0P020508 sysscpl=X64_VSPRO */

ods _all_ close;
proc print data=sashelp.class;
run;
/* on log
WARNING: No output destinations active.
*/

ods results on;
proc print data=sashelp.class;
run;
/* on log
WARNING: No output destinations active.
*/

نصائح أخرى

أما عن نفسي فأنا عادة جوجل عن "SAS عرض أسعار غير متوازن", ، وينتهي الأمر بتقديم شيء مثل هذا:

*); */; /*’*/ /*”*/; %mend;

...للخروج من التعليقات والاقتباسات ووظائف الماكرو غير المغلقة.

هنا هو الذي أستخدمه.

 ;*';*";*/;quit;run;
 ODS _ALL_ CLOSE;
 QUIT; RUN;

لقد واجهت موقفًا مع علامات اقتباس غير متوازنة في وحدة ماكرو وكان الحل الوحيد هو إغلاق مثيل SAS والبدء من جديد.

أشعر أن هذا عيب غير مقبول في SAS.

ومع ذلك، استخدمت الطرق رقم 2 ورقم 5 ونجحت.رقم 2 أولا ثم رقم 1.لقد وضعتها فوق كل التعليمات البرمجية، بما في ذلك رأس الكود الخاص بي، موضحًا ما كان يفعله هذا البرنامج.

عملت مثل السحر.

لقد كتبت برنامج Perl الذي يقرأ من خلال أي برنامج SAS معين ويتتبع الأشياء التي يجب أن تأتي في أزواج.باستخدام أشياء مثل الأقواس، التي يمكن تضمينها، يتم طباعة مستوى التداخل في بداية كل سطر.يجب أن يكون قادرًا على التمييز بين الأقواس التي تشكل جزءًا من وظائف الماكرو وتلك التي تشكل جزءًا من وظائف خطوة البيانات، بما في ذلك استدعاءات %sysfunc الموجودة في بيئة الماكرو ولكنها تقوم باستدعاءات لوظائف خطوة البيانات (يجب أيضًا القيام بنفس الشيء بالنسبة إلى %syscall الماكرو استدعاءات الوظائف)، ولكن هذا ممكن من خلال التعبيرات العادية.إذا أصبح مستوى التعشيش سلبيًا، فهذا دليل على أن المشكلة قد تكون قريبة.

ويبدأ أيضًا في حساب علامات الاقتباس المفردة والمزدوجة من بداية البرنامج ويحدد ما إذا كان عدد كل رمز يواجهه فرديًا أم زوجيًا.كما هو الحال مع الأقواس، يجب أن تكون قادرًا على التمييز بين علامات الاقتباس التي تشكل جزءًا من تعليمات برمجية ماكرو وتلك التي تشكل جزءًا من التعليمات البرمجية لخطوة البيانات وأيضًا تلك التي تشكل جزءًا من سلاسل حرفية مثل O'Riley و%nrstr(%'%") ولا تحسبهم، ولكن مطابقة الأنماط يمكن أن تتعامل مع ذلك أيضًا.

إذا كانت مشكلة العنصر غير المتطابق تنبع من التعليمات البرمجية التي تم إنشاؤها في وقت التشغيل بواسطة تعليمات برمجية ماكرو وبالتالي فهي غير موجودة في البرنامج المصدر، فأنا أقوم بتشغيل الخيار mfile لكتابة التعليمات البرمجية لخطوة البيانات التي تم إنشاؤها إلى ملف ثم تشغيل البرنامج النصي Perl ضد هذا الرمز.

لقد اخترت لغة Perl نظرًا لإمكانياتها القوية في مطابقة الأنماط، لكن أي لغة أخرى لمطابقة الأنماط يجب أن تعمل بشكل جيد.أتمنى أن يساعدك هذا.

يمكنك دائمًا إصدار أمر إنهاء البيانات المقدمة وإعادة إرسال ما تحاول تشغيله.

أردت فقط أن أكرر اقتراح AFHood باستخدام ODS _ALL_ CLOSE; إفادة.هذا هو المفتاح الذي يجب تضمينه.وتأكد من استخدامه في كل مرة تنتهي فيها من استخدام المواد المستنفدة للأوزون على أية حال.

نجح إغلاق جلسة SAS في حالتي.أعتقد أنه يمكنك تجربة ذلك مرة واحدة قبل تجربة الطرق الأخرى المذكورة هنا.

نعم، أعتقد أن وثائق SAS الرسمية توصي بالحل الذي اقترحته لنفسك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top