تخزين بيانات SAS (بما في ذلك بنية الجدول) في ملف ثابت واحد

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

  •  02-07-2019
  •  | 
  •  

سؤال

أحتاج إلى تحويل جداول بيانات SAS إلى ملفات مسطحة (أو "ملفات ASCII" كما كانت تسمى سابقًا، بدلاً من الملفات الثنائية).وملف مسطح واحد فقط لكل جدول SAS أصلي.الشيء الصعب هو أنني أريد أن يحتوي الملف الثابت على بعض المعلومات الهيكلية لجدول SAS الأصلي أيضًا، على وجه التحديد:

  • اسم المتغير/العمود
  • تسمية المتغير/العمود
  • نوع المتغير/العمود
  • طول المتغير/العمود
  • تنسيق المتغير/العمود
  • معلومات المتغير/العمود

معلومات إضافية:

  • سأحتاج فقط إلى تحويل البيانات الصغيرة (<100 obs).
  • الأداء ليس مشكلة (ضمن حدود معقولة).
  • يجب أن يشكل الملف الثابت أساسًا لإعادة إنشاء جدول SAS الأصلي، ولست بحاجة إلى أن أكون قادرًا على استخدام الملف مباشرة كجدول في خطوات DATA أو PROC.

إن جداول SAS القياسية وملفات النقل وملفات XPORT وما إلى ذلك كلها ملفات ذات تنسيق ثنائي، ولا يحافظ تنسيق جدول XML القياسي في ملفات SAS وCSV على بنية الجدول.لذا من الواضح أن هذه الخيارات لا تساعد.

ما هو أفضل خيار لي؟

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

المحلول

لست على علم بأي حلول سهلة.

ربما:

  1. استخدم PROC EXPORT لإنتاج ملف CSV بالبيانات الموجودة فيه.
  2. استخدم PROC DATASETS مع ODS لإنتاج مجموعة بيانات تحتوي على الأسماء والأنواع وما إلى ذلك.
  3. قم بإنتاج ملف CSV آخر لمجموعة البيانات هذه.

الآن حصلت على وصف ASCII للجدول (موزع على ملفين بتنسيق CSV).سيكون عكس العملية أكثر صعوبة.في الأساس، سيتعين عليك القراءة في مجموعة بيانات الوصف، ثم استخدام CALL SYMPUT في حلقة لإنشاء مجموعة من متغيرات الماكرو بالمعلومات الموجودة فيها، ثم استخدام متغيرات الماكرو لإنشاء PROC IMPORT لملف CSV...

نصائح أخرى

  1. قم بإنشاء الكود لتصدير الجدول إلى نص (هذا أمر واضح ومباشر، ما عليك سوى البحث عنه في Google أو إلقاء نظرة على "The Little SAS Book" إذا كان لديك نسخة).

  2. ثم قم بإلحاق معلومات "الوصفية" من sashelp.vcolumn، حيث تقوم sas بتخزين المعلومات (بيانات التعريف) حول مجموعات بيانات sas.إنه جدول sas بحد ذاته، لذا يمكنك إجراء عملية proc sql union لربطه بالأعمدة الفعلية التي يصفها هذا الجدول (على الرغم من أنك ستحتاج إلى إجراء عملية تبديل الكتابة لأن بيانات التعريف الخاصة بالأعمدة موجودة في صفوف، وليس أعمدة ).

أنت لست محددًا تمامًا بشأن الطريقة التي تريد بها رؤية البيانات التعريفية في الملف النصي، لذلك هذا أقصى ما يمكنني الوصول إليه.

قد يكون بناء جملة وصف proc sql مفيدًا للحصول على جزء البيانات التعريفية، بما في ذلك الأطوال والأنواع والتنسيقات والفهارس وما إلى ذلك...

شفرة:

proc sql;
describe table sashelp.class;
quit;

سجل:

NOTE: SQL table SASHELP.CLASS was created like:

create table SASHELP.CLASS( bufsize=4096 )
  (
   Name char(8),
   Sex char(1),
   Age num,
   Height num,
   Weight num
  );

باستخدام SAS 9.2، يمكنك إنشاء ملف XML من مجموعة بيانات ويحتوي XML على بيانات تعريف المتغير/العمود، مثل التنسيق والتسمية وما إلى ذلك...راجع قسم محرك SAS 9.2 XML LIBNAME:دليل المستخدم بعنوان "استخدام محرك XML لنقل مجموعات بيانات SAS عبر بيئات التشغيل".رابط لها هنا:

http://support.sas.com/documentation/cdl/en/engxml/61740/HTML/default/a002594382.htm

فيما يلي قسم من التعليمات البرمجية من الدليل الذي يوضح استخدام محرك XML92 libname و PROC COPY لإنشاء XML:

libname myfiles 'SAS-library';
libname trans xml92 'XML-document' xmltype=export;
proc copy in=myfiles out=trans;
   select class;
run;

في SAS 9.1.3، قد يتعين عليك إنشاء مجموعة علامات مخصصة للحصول على نفس العملية.قد يتمكن الدعم الفني لـ SAS (support@sas.com) من تقديم بعض المساعدة.

راجع للشغل - لم تقل لماذا تحتاج إلى القيام بذلك.في هذه الحالة ، لا يوجد سبب وجيه (قد يكون هناك سبب مقنع ، مثل شخص لديه سلطة قول "افعلها ، أو طرد" ، لكن لا يوجد جيد سبب).

سأتخلى عن فكرة دمج البيانات الوصفية والبيانات في كل ملف، ما لم يكن هناك سبب قوي للغاية للقيام بذلك.انتقل إلى تصدير البيانات التعريفية لمجموعة البيانات A إلى ملف يسمى metadata_A؛سيؤدي هذا إلى ملفات مقترنة.أي شخص يتطلع إلى استخدام هذه الملفات في برنامج قاعدة بيانات أو برنامج إحصائي سيكون لديه ملف بيانات وصفية مُسمى بشكل واضح للعمل معه.

إذا كنت ستستخدم البيانات الموجودة في SAS فقط، فيمكنك فقط استخدام PROC COPY لإنشاء ملفات النقل:

http://www.usc.edu/isd/doc/statistics/sas/sastransport/

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