Мне нужно преобразовать таблицы данных SAS в плоские файлы (или «файлы ASCII», как их когда-то называли, а не в двоичные файлы). И только один плоский файл для каждой исходной таблицы SAS. Сложность заключается в том, что я хочу, чтобы плоский файл также содержал некоторую структурную информацию исходной таблицы SAS, а именно:
Дополнительная информация:
Стандартные таблицы SAS, транспортные файлы, файлы XPORT и т. д. Представляют собой файлы двоичного формата, а стандартный формат таблицы XML в файлах SAS и CSV не сохраняет структуру таблиц. Очевидно, что эти варианты не помогают.
Какой у меня лучший вариант?
У меня есть данные конфигурации небольшого размера для моих приложений. Я хотел бы, чтобы эти данные следовали за исходным кодом моего приложения ниже по течению, проверяя их в моей системе контроля версий. Я создал приложение, которое преобразует элементы моего двоичного формата (например, различные записи каталога) в форматы плоских файлов и наоборот. Эта доморощенная система построена на концепции взаимно однозначного соответствия между количеством двоичных элементов и элементами плоского файла.





Я не знаю простых решений.
Возможно:
Теперь у вас есть описание таблицы в формате ASCII (распределенное по двум файлам CSV). Обратить процесс вспять было бы сложнее. В основном вам нужно будет прочитать набор данных описания, затем использовать CALL SYMPUT в цикле, чтобы создать группу макропеременных с информацией в них, а затем использовать свои макропеременные для создания PROC IMPORT для файла CSV ...
Создайте код для экспорта таблицы в текст (это просто, просто погуглите или посмотрите «Маленькая книга SAS», если у вас есть копия).
Затем добавьте «метаданные» из sashelp.vcolumn, в котором sas хранит информацию (метаданные) о наборах данных sas. Это сама таблица sas, поэтому вы можете выполнить операцию объединения sql proc, чтобы объединить ее с фактическими столбцами, которые описывает эта таблица (хотя вам нужно будет выполнить операцию транспонирования типа, потому что метаданные о столбцах находятся в строках, а не в столбцах ).
Вы не совсем точно указываете, как вы хотите видеть метаданные в текстовом файле, так что это все, что я могу.
Я на самом деле использовал его для экспорта данных таблицы в MySQL.
Синтаксис 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; это приведет к созданию парных файлов. Любой, кто хочет использовать эти файлы в программе базы данных или статистической программе, получит для работы четко обозначенный файл метаданных.
См. Мой комментарий под вопросом.
С помощью 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]) может предложить некоторую помощь.
Могу я спросить, зачем вам это нужно? Похоже, этот вопрос предполагает часть решения более серьезной проблемы. При наличии большего контекста можно было бы предложить лучшее общее решение.