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

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

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

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

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

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

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

Ответы [ 6 ]

4 голосов
/ 26 сентября 2008

Я не знаю ни о каких простых решениях.

Возможно:

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

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

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

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

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

2 голосов
/ 19 февраля 2010

С помощью 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) может предложить некоторую помощь.

2 голосов
/ 12 февраля 2009
Синтаксис описаний

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
  );
0 голосов
/ 18 февраля 2010

Кстати - вы не сказали, зачем вам это нужно. В этом случае нет веской причины (может быть веская причина, например, кто-то с властью говоря «сделай это, или будь уволен», но нет хорошая причина).

Я бы отказался от идеи объединения метаданных и данных в каждом файле, если только нет какой-либо невероятно веской причины для этого. Перейти к экспорту метаданных для набора данных A в файл с именем metadata_A; это приведет к созданию парных файлов. Любой, кто хочет использовать эти файлы в программе базы данных или статистической программе, будет иметь четко обозначенный файл метаданных для работы.

0 голосов
/ 23 сентября 2008

Если вы собираетесь использовать данные только в SAS, вы можете просто использовать PROC COPY для создания транспортных файлов:

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

...