Я администратор БД с нулевым опытом работы с SAS, я работаю в правительстве, и мне было поручено получать выходные данные SAS от другой команды. Другая команда, по-видимому, имеет ограниченный опыт работы с SAS и не может ответить на вопрос «каков тип данных каждой переменной SAS». У нас есть десятки таблиц и тысячи переменных для импорта. Есть ли способ запустить функцию SAS «VarType» для всех столбцов?
Я не нашел то, что мне нужно, в документах SAS, поиске SO и т. д.
Я ожидаю код, который я могу передать другой команде, которую они будут запускать для создания следующего (только с жестким кодированием «набора данных»; без жестко закодированных имен таблиц/имен переменных):
Обновление: вот что я использовал на основе принятого ответа. Вы бы изменили:
library=SASHELP
на library=YourLibrary
, чтобы изменить очищаемый набор данныхout=yourDataset.sasSchemaDump
замените yourDataset целевым набором данных, в котором будет создана/заполнена новая таблица с именем sasSchemaDump. Переименуйте sasSchemaDump в желаемое имя таблицы.proc datasets library=SASHELP memtype=data;
contents data=_ALL_ (read=green) out=yourDataset.sasSchemaDump;
title 'SAS Schema Dump';
run;
Запустите PROC CONTENTS для набора данных, и вы получите необходимую информацию.
SAS имеет только два ТИПА данных. Строки символов фиксированной длины и числа с плавающей запятой. LENGTH — это количество байтов, хранящихся в наборе данных. Таким образом, для символьных переменных длина определяет, сколько символов она может хранить (при условии, что вы используете однобайтовую кодировку). Для хранения чисел с плавающей запятой требуется 8 байтов, но вы можете хранить их с меньшим количеством байтов в наборе данных, если не возражаете против потери точности. Например, если вы знаете, что значения являются целыми числами, вы можете сохранить только 4 байта.
Иногда вы можете сообщить больше информации о переменной, если создатель прикрепит постоянный ФОРМАТ для управления отображением переменной. Например, SAS хранит значения DATE как количество дней с 1960 года. Поэтому, чтобы сделать эти числа значимыми для людей, вам нужно прикрепить такой формат, как DATE9. или ГГММДД10. так что числа печатаются как строки, которые человек увидит как дату. Точно так же существуют форматы отображения для отображения значения времени суток (количество секунд с полуночи) или значений даты и времени (количество секунд с 1960 года). Кроме того, если они прикрепили формат, который не отображает десятичные разряды, это может означать, что значения должны быть целыми числами.
И если бы они прикрепили к переменной МЕТКУ, это могло бы объяснить больше о переменной, чем вы можете узнать из одного только имени.
Они также могут прикреплять к переменной пользовательские форматы. Это могут быть простые поиски кода/декодирования, но они также могут быть и более сложными. Общий сложный используется для свертывания диапазона (или нескольких значений и/или диапазонов) в одно декодирование. Определение пользовательского формата хранится в отдельном файле, называемом каталогом, в частности каталогом форматов. Вы можете использовать PROC FORMAT с опцией FMTLIB или CNTLOUT=, чтобы увидеть определение пользовательских форматов.
Для этого существует специальная процедура SAS: СОДЕРЖАНИЕ PROC
proc contents data=sashelp.cars out=want; run;
Он создаст таблицу SAS want
со всей необходимой информацией.
К вашему сведению: ТИП 1 — числовой, ТИП 2 — символьный.
Если все таблицы находятся в одной библиотеке, вы можете сделать следующее, чтобы просмотреть все таблицы в библиотеке.
proc contents data=sashelp._all_ out=want; run;
Спасибо! cars - это всего лишь одна таблица, верно? есть ли способ циклически перемещать содержимое proc по всем таблицам (без их перечисления)?
Вы можете использовать ALL для обработки всех наборов данных в библиотеке. данные = sashelp._ALL_;
библиотека наборов данных proc = SASHELP memtype = data; содержимое data=_ALL_ (read=green) out=yourDataset.NewTable_procDatasets; title «Содержание набора данных GROUP»; бегать;
Также есть словарные таблицы с некоторой документацией, Dictionary.table Dictionary.column sascrunch.com/dictionary-tables