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

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

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

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

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

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

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

Могу я спросить, зачем вам это нужно? Похоже, этот вопрос предполагает часть решения более серьезной проблемы. При наличии большего контекста можно было бы предложить лучшее общее решение.

Rog 19.02.2010 00:57

У меня есть данные конфигурации небольшого размера для моих приложений. Я хотел бы, чтобы эти данные следовали за исходным кодом моего приложения ниже по течению, проверяя их в моей системе контроля версий. Я создал приложение, которое преобразует элементы моего двоичного формата (например, различные записи каталога) в форматы плоских файлов и наоборот. Эта доморощенная система построена на концепции взаимно однозначного соответствия между количеством двоичных элементов и элементами плоского файла.

Martin Bøgelund 19.02.2010 12:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
4 211
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

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

Возможно:

  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, поэтому вы можете выполнить операцию объединения sql proc, чтобы объединить ее с фактическими столбцами, которые описывает эта таблица (хотя вам нужно будет выполнить операцию транспонирования типа, потому что метаданные о столбцах находятся в строках, а не в столбцах ).

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

Я на самом деле использовал его для экспорта данных таблицы в MySQL.

Mindwin 11.04.2014 00:50

Синтаксис proc sql description может быть удобен для получения части метаданных, включая длину, типы, форматы, индексы и т. д.

Код:

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
  );

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

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

См. Мой комментарий под вопросом.

Martin Bøgelund 19.02.2010 12:06

С помощью SAS 9.2 вы можете создать XML-файл из набора данных, и XML будет содержать метаданные переменных / столбцов, такие как формат, метка и т. д. См. Раздел SAS 9.2 XML LIBNAME Engine: Руководство пользователя под названием «Использование XML. Двигатель для передачи наборов данных SAS в операционных средах ». Ссылка на него здесь:

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

Вот фрагмент кода из руководства, в котором показано использование механизма имени библиотеки 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 ([email protected]) может предложить некоторую помощь.

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