Хранение данных SAS (включая структуру таблиц) в одном плоском файле.
-
02-07-2019 - |
Вопрос
Мне нужно преобразовать таблицы данных SAS в плоские файлы (или «ASCII-файлы», как их когда-то называли, а не в двоичные файлы).И только один плоский файл для каждой исходной таблицы SAS.Сложность заключается в том, что я хочу, чтобы плоский файл также содержал некоторую структурную информацию исходной таблицы SAS, а именно:
- Имя переменной/столбца
- Метка переменной/столбца
- Тип переменной/столбца
- Переменная/длина столбца
- Формат переменной/столбца
- Информация о переменной/столбце
Дополнительная информация:
- Мне нужно будет конвертировать только небольшие данные (<100 obs).
- Производительность не является проблемой (в разумных пределах).
- Плоский файл должен стать основой для воссоздания исходной таблицы SAS. Мне не нужно иметь возможность использовать этот файл непосредственно в качестве таблицы на этапах DATA или PROC.
Стандартные таблицы SAS, транспортные файлы, файлы XPORT и т. д. являются файлами двоичного формата, а стандартный формат таблиц XML в файлах SAS и CSV не сохраняет структуру таблицы.Очевидно, что эти варианты не помогают.
Какой у меня лучший вариант?
Решение
Я не знаю простых решений.
Возможно:
- Используйте PROC EXPORT для создания файла CSV с данными в нем.
- Используйте PROC DATASETS с ODS для создания набора данных с именами, типами и т. д.
- Создайте еще один файл CSV для этого набора данных.
Теперь у вас есть описание таблицы в формате ASCII (размещенное в двух файлах CSV).Обратить процесс вспять будет сложнее.По сути, вам придется прочитать набор данных описания, затем использовать CALL SYMPUT в цикле, чтобы создать группу макропеременных с информацией в них, а затем использовать макропеременные для создания PROC IMPORT для файла CSV...
Другие советы
Создайте код для экспорта таблицы в текст (это просто, просто погуглите или посмотрите «Маленькую книгу SAS», если у вас есть копия).
Затем добавьте мета-информацию из 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 для создания транспортных файлов: