Хранение данных SAS (включая структуру таблицы) в одном плоском файле

Мне нужно преобразовать таблицы данных SAS в плоские файлы (или "файлы ASCII", как они назывались один раз, в отличие от двоичных файлов). И только один плоский файл для каждой исходной таблицы SAS. Сложность в том, что я хочу, чтобы плоский файл также содержал некоторую структурную информацию исходной таблицы SAS, в частности:

  • Имя переменной / столбца
  • Переменная / Метка столбца
  • Переменная / Тип столбца
  • Переменная / длина столбца
  • Переменная / Формат столбца
  • Переменная / столбец

Дополнительная информация:

  • Мне нужно будет только преобразовать небольшие данные (< 100 единиц).
  • Производительность не является проблемой (в разумных пределах).
  • Плоский файл должен служить основой для воссоздания исходной таблицы SAS, мне не нужно иметь возможность использовать файл непосредственно в качестве таблицы в шагах DATA или PROC.

Стандартные таблицы SAS, транспортные файлы, файлы XPORT и т. Д. Являются файлами двоичного формата, а стандартный формат таблиц XML в файлах SAS и CSV не сохраняет структуру таблицы. Очевидно, что эти варианты не помогают.

Какой мой лучший вариант?

6 ответов

Решение

Я не знаю каких-либо простых решений.

Возможно:

  1. Используйте PROC EXPORT для создания файла CSV с данными в нем.
  2. Используйте PROC DATASETS с ODS для создания набора данных с именами, типами и т. Д.
  3. Создайте другой файл CSV для этого набора данных.

Теперь у вас есть ASCII-описание таблицы (распределено по двум файлам CSV). Отменить процесс было бы сложнее. В основном вам нужно прочитать набор данных описания, затем использовать CALL SYMPUT в цикле для создания группы макропеременных с информацией в них, а затем использовать ваши макропеременные для создания PROC IMPORT для файла CSV...

  1. Создайте код для экспорта таблицы в текст (это просто, просто зайдите в Google или посмотрите "Книгу SAS", если у вас есть копия).

  2. Затем добавьте мета-информацию из sashelp.vcolumn, где sas хранит информацию (метаданные) о наборах данных sas. Это сама таблица sas, так что вы можете выполнить операцию объединения SQL sql, чтобы объединить ее с фактическими столбцами, описанными в этой таблице (хотя вам потребуется выполнить операцию транспонированного типа, поскольку метаданные о столбцах находятся в строках, а не в столбцах).).

Вы не совсем уверены в том, как вы хотите видеть метаданные в текстовом файле, так что это насколько я могу.

Синтаксис описаний 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 содержит метаданные переменных / столбцов, такие как формат, метка и т. Д. См. Раздел движка LASNAME XML SAS 9.2: Руководство пользователя под названием "Использование XML Двигатель для транспортировки наборов данных SAS в операционных средах ". Ссылка на это здесь:

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

Вот фрагмент кода из руководства, в котором показано использование механизма libname XML92 и 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/

Другие вопросы по тегам