Хранение данных 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. Создайте код для экспорта таблицы в текст (это просто, просто погуглите или посмотрите «Маленькую книгу SAS», если у вас есть копия).

  2. Затем добавьте мета-информацию из sashelp.vcolumn, где sas хранит информацию (метаданные) о наборах данных sas.Это сама таблица sas, поэтому вы можете выполнить операцию объединения proc 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 будет содержать метаданные переменных/столбцов, такие как формат, метка и т. д.См. раздел механизма 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 в файл с именем метаданные_A;это приведет к созданию парных файлов.Любой, кто хочет использовать эти файлы в программе базы данных или статистической программе, должен иметь четко обозначенный файл метаданных для работы.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top