Sas base что это
CALL SYMPUT vs CALL SYMPUTX или SAS Base для чайников
CALL SYMPUT
Call Symput используется для случаев, когда значение переменной в шаге данных (datastep) нужно присвоить макропеременной.
Синтаксис: call symput (» «, )
Первый аргумент в процедуре symput — это название макропеременной, которой необходимо присвоить значение второго аргумента.
Второй аргумент — это символьное значение, которое будет присвоено макропеременной. Второй аргумент всегда должен быть именно символьным, в противном случае, численное значение должно быть конвертировано в символьную переменную, прежде чем присваивать его макропеременной. Если Вы не станете приводить тип, это может обернуться проблемами. В таком случае SAS автоматически конвертирует численное значение переменной в символьное значение, прежде чем присвоит его макропеременной, и выведет в лог сообщение о том, что было произведено конвертирование.
Пример:
data _null_;
count=1978;
call symput(‘count’,count);
run;
%put &count;
19 data _null_;
20 count=1978;
21 call symput(‘count’,count);
22 run;
NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column).
21:21
NOTE: DATA statement used (Total process time):
real time 0.00 seconds
cpu time 0.01 seconds
Хоть значение макропеременной count и было определено как 1978, SAS выдал замечание, гласящее
NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column).
21:21
Чтобы избежать этого, Вам всё же стоит осуществить конвертирование численного значения в символьное, прежде чем присваивать его макропеременной. Вот, например, как это можно сделать:
data _null_;
count=1978;
call symput(‘count’,strip(put(count,8.)));
run;
%put &count;
29 data _null_;
30 count=1978;
31 call symput(‘count’,left(put(count,8.)));
32 run;
NOTE: DATA statement used (Total process time):
real time 0.00 seconds
cpu time 0.00 seconds
CALL SYMPUTX
Пример:
data _null_;
count=1978;
call symputx(‘count’,count,’G’);
run;
%put &count;
29 data _null_;
30 count=1978;
31 call symputx(‘count’,count,’G’);
32 run;
NOTE: DATA statement used (Total process time):
real time 0.00 seconds
cpu time 0.00 seconds
Простой способ запомнить разницу между CALL SYMPUT и CALL SYMPUTX :
(взято со страницы Using_the_SAS_V9_CALL_SYMPUTX_Routine на SAScommunity.org)
Процедура SAS V9 CALL SYMPUTX позволяет Вам сэкономить нажатия клавиш и создать более компактный и понятный код.
Вместо использования
call symput(‘macrovar’, trim(left(charvar)));
для создания макропеременной с символьной строкой, которая может содержать лишние пробелы, Вам стоит применить SYMPUTX:
call symputx(‘macrovar’, charvar);
Основы программирования на SAS Base. Урок 2. Доступ к данным
В предыдущей статье мы познакомились с интерфейсом SAS UE, терминологией SAS Base, типами данных, основными требованиях к синтаксису SAS Base, а также рассмотрели распространенные синтаксические ошибки.
Сегодня я расскажу, как можно получить доступ к данным различных форматов. Обратите внимание, что в данной статье имеются ссылки на документацию, которая поможет вам подробнее ознакомиться с рассматриваемыми примерами.
Что такое библиотеки SAS?
Библиотека в SAS – это метод централизованного хранения и прозрачного использования данных в программах SAS. Библиотека может быть папкой или каталогом на вашем компьютере или располагаться на внешнем жестком диске, FLASH-накопителе или компакт-диске и так далее.
Существует два типа библиотек: постоянные и временные. Постоянные библиотеки SAS сохраняются до тех пор, пока вы их не удалите. Постоянная библиотека доступна для обработки в последующих сеансах SAS. Временная библиотека SAS существует только для текущего сеанса SAS.
Файлы SAS, созданные во время сеанса, хранятся в специальном рабочем пространстве, которое может быть или не быть внешним носителем. Это рабочее пространство обычно назначается по умолчанию с именем Work. Файлы во временной рабочей библиотеке могут использоваться на любом шаге в программе SAS, но они не доступны для последующих сессий SAS. Файлы, хранящиеся в рабочей библиотеке, удаляются в конце сеанса SAS.
Назначаем пользовательскую библиотеку.
Рассмотрим простой случай назначения библиотеки: наборы данных SAS находятся в одной директории c:\habrahabr. Есть два способа решения этой задачи.
1 способ:
Настроить библиотеку без программного кода. Во вкладке «Библиотеки» в SAS UE выбрать «Новая библиотека»:
Далее появится окно для настройки пользовательской библиотеки:
Имя библиотеки – library reference (или libref). Libref – это «псевдоним» (ссылка) для «хранилища», в котором находятся файлы. Название библиотеке задается в соответствии с правилами именования переменных в SAS (см. Урок 1), но на него выделяется не более 8 символов.
Правила именования библиотек, переменных, наборов данных и пр. в SAS можно изучить в справочнике SAS 9.4 and SAS Viya 3.3 Programming Documentation SAS Language Reference: Concepts в разделе Names in the SAS Language.
Обратите внимание, что библиотека назначена на все время сеанса SAS, но переопределять ее параметры можно.
Далее задаем путь к наборам данных SAS.
После назначения библиотеки она появляется в левой панели SAS UE.
2 способ:
Назначить библиотеку программным путем. Назначение библиотеки SAS реализуется с помощью глобального оператора LIBNAME. Информацию по указанному оператору можно изучить в справочнике SAS 9.4 and SAS Viya 3.3 Programming Documentation / Global Statements.
Рассмотрим общий синтаксис глобального оператора LIBNAME.
libref – имя библиотеки.
engine — имя «движка», например, для наборов данных SAS – это BASE (но его можно не указывать, он задан по умолчанию). Если вы хотите создать новую библиотеку с другим «движком», отличным от механизма по умолчанию, вы можете отменить автоматический выбор.
Справочники, которые могут вам пригодиться при изучении механизмов подключения: SAS/ACCESS for Relational Databases и SAS Engines.
«Движки» SAS/ACCESS являются механизмами оператора LIBNAME, которые обеспечивают доступ к чтению, записи и обновлению более чем 60 реляционных и нереляционных баз данных, файлов ПК, устройств хранения данных и распределенных файловых систем.
‘SAS-library’ – путь к библиотеке, если путь задается с помощью макропеременной (будет рассматриваться в данном цикле статей), используются парные двойные кавычки. Во всех остальных случаях можно использовать парные одинарные кавычки.
options — допустимые опции. Простейшим примером является опция ACCSESS=READONLY, которая назначает атрибут «только для чтения» для всей библиотеки SAS. Со всем перечнем допустимых опций можно ознакомиться в справочнике SAS 9.4 and SAS Viya 3.3 Programming Documentation /Global Statements.
engine/host-options — являются одним или несколькими параметрами, которые перечислены в общей форме keyword = value.
Рассмотрим синтаксис оператора LIBNAME на практике. Назначим библиотеку Habr только для чтения:
Запустим код и проверим Log:
Сообщения в журнале указывают, что библиотека успешна назначена. В качестве библиотек можно подключать данные, которые физически находятся не в формате наборов данных SAS (промышленные БД, excel, access).
Просматриваем содержимое библиотеки SAS.
Один из вариантов просмотра содержимого библиотеки – использование процедуры PROC CONTENTS. Ознакомиться с процедурами, используемыми в SAS, можно в справочнике SAS 9.4 Procedures by Name and Product.
Процедура PROC CONTENTS позволяет создавать вывод, который описывает либо содержимое библиотеки SAS, либо информацию дескриптора для отдельного набора данных SAS. Чтобы просмотреть содержимое библиотеки SAS, мы можем использовать следующую общую форму процедуры:
Параметр NODS (который означает «no details») подавляет печать подробной информации о каждом файле при указании опции _ALL_.
Для конкретной библиотеки код будет выглядеть следующим образом:
Фрагмент вывода процедуры:
Обратите внимание, что в библиотеке также хранятся другие типы файлов, например catalog, index. О них можно прочитать в справочнике SAS 9.4 Companion for Windows, Fifth Edition.
Файлы с member type DATA являются стандартными наборами данных SAS. Второй вариант просмотра содержимого библиотеки – использовать процедуру PROC DATASETS:
Просмотр информации о конкретном наборе данных SAS реализуется следующим образом:
Обратите внимание на обращение к таблице в пользовательской библиотеке. Имя после data= двухуровневое: имя_библиотеки.имя_таблицы. В случае набора данных, хранящемся во временной библиотеке WORK, в обращении после data= можно использовать одноуровневое имя.
Например, в случае кода:
выведется информация о наборе данных charities, находящемся во временной библиотеке WORK.
Рассмотрим вывод процедуры для набора данных charities в пользовательской библиотеке HABR:
Служебная информация о таблице, получаемая в результате вывода, называется дескриптором.
Дескриптор содежит общую информацию о наборе данных: его название и имя библиотеки, типе, «движке», дате и времени создания и последнего изменения, количестве наблюдений и переменных, общей длине наблюдений, индексах, сортировке, сжатии, размере страницы и их количестве, информацию об атрибутах переменных.
Читаем электронные таблицы.
Чтение файла EXCEL можно реализовать несколькими способами. В этой статье мы рассмотрим назначение библиотеки для файла excel.
Для назначения библиотеки SAS будем использовать электронную таблицу products.xlsx, хранящуюся в директории c:\workshop\habrahabr\products.xlsx. Данный документ выглядит следующим образом: он содержит 4 листа, каждый из которых станет отдельным набором данных SAS. Фрагмент данного документа представлен ниже:
Общий синтаксис назначения библиотеки такой же, как и в случае наборов данных SAS, меняется только механизм подключения:
Существует несколько механизмов для обработки файла excel, у всех свои особенности и настройки, с которыми можно ознакомиться в документации.
Результат выполнения оператора libname представлены ниже. Фрагмент Log:
Информацию о библиотеке посмотрим через процедуру PROC CONTENTS:
В зависимости от механизма дескриптор заполняется по-разному:
Результат выполнения оператора LIBNAME представлены ниже. Фрагмент Log:
Информацию о библиотеке посмотрим через PROC CONTENTS:
В зависимости от механизма дескриптор заполняется по-разному:
Результат выполнения оператора libname представлены ниже.
Информацию о библиотеке посмотрим через PROC CONTENTS:
В зависимости от механизма дескриптор заполняется по-разному:
Создаем детализированные отчеты.
После получения доступа к требуемым данным рассмотрим процедуру для создания отчетов PROC PRINT. Подробную информацию о ней можно получить в справочнике SAS 9.4 Procedures by Name and Product. Распечатаем детализированный отчет, используя таблицу German из системной библиотеки sasuser.
Для начала изучим дескриптор указанной таблицы, нас интересуют атрибуты столбцов:
Фрагмент вывода процедуры:
Создадим детализированный отчет, удовлетворяющий представленным ниже требованиям:
Оператор VAR определяет переменные для печати. Оператор выводит их в том порядке, в котором вы их перечислили.
В данном условии нам необходимо использовать фильтр в операторе WHERE.
Обратите внимание, что при работе с текстовыми переменными важен регистр, а также вы обязательно заключаете требуемое значение в парные кавычки (двойные или одинарные).
Вывод данной программы SAS:
По умолчанию процедура PROC PRINT выводит номера строк, для того, чтобы убрать данный столбец, можно использовать опцию NOOBS (‘no observation’). В этом случае программный код выглядит следующим образом:
Операторы сравнения вы можете записывать привычными символами, а можете использовать мнемоники, как представлено в примере. Вывод данной программы представлен ниже:
Идентификатором наблюдения можно определить любую переменную. Когда вы указываете одну или несколько переменных в операторе ID, он использует форматированные значения этих переменных для идентификации строк. Обратите внимание, что если одновременно переменная указана в операторе VAR и в операторе ID, то она выведется два раза. Также при использовании оператора ID нет необходимости в опции NOOBS.
В нашем случае программа SAS будет иметь следующий вид:
Результаты выполнения кода представлены ниже:
Стоит отметить, что при задании атрибутов таких как ярлык и формат, они будут использованы только на определенном шаге PROC для создания требуемого отчета.
Для задания ярлыка используется оператор LABEL.
Общий синтаксис оператора LABEL выглядит следующим образом:
В ярлыке вы можете использовать любые символы, в том числе и пробелы, количество символов не должно превышать 256. Ярлыки переменных будут использованы для создания отчетов.
Не все процедуры «видят» ярлыки. Для того, чтобы процедура PROC PRINT выводила в отчет ярлыки, а не имена переменных, в опциях необходимо указать label (или split=). Опция SPLIT указывает разделитель, который контролирует разрывы в заголовках столбцов. Используем оператор LABEL в нашем программном коде:
1 вариант
2 вариант
(с использованием опции split=)
В опции split= указывается разделитель (обязательно в кавычках). Код в данном случае выглядит следующим образом (обратите внимание на использование разделителей в операторе Label):
Оператор TITLE задает заголовок в отчете, оператор FOOTNOTE задает нижний колонтитул.
Как и в случае оператора LIBNAME, данные операторы являются глобальными и действуют во время всего сеанса SAS до тех пор, пока вы не переопределите их значения. Вы можете использовать TITLE и FOOTNOTE как вне шагов PROC, так и непосредственно в них.
Общий синтаксис операторов:
Text-string – данный аргумент является строкой, которая может содержать до 512 символов. Вам необходимо заключать такие строки в одиночные или двойные кавычки. Текст отображается точно так же, как вы вводите его в операторе, включая прописные, строчные буквы и пробелы.
Для заголовка в отчете вы можете использовать 10 операторов TITLE (аналогично с FOOTNOTE). Важно понимать, как переопределяются значения. Логика выполнения операторов одинаковая. Рассмотрим переопределение значений заголовков на примере оператора TITLE.
Код | Результат | Примечание |
---|---|---|
TITLE ‘String number one’; | String number one | TITLE и TITLE1 эквивалентны |
TITLE ‘String number three’ | String number one String number three | Строка №2 пустая |
TITLE2 ‘String number two’; | String number one String number two | TITLE2 задал значение заголовку на второй строке и удалил значения заголовков ниже. |
TITLE1 ‘New Title’; | New Title | TITLE1 задал значение заголовку на 1 строке и удалил значения заголовков ниже. |
TITLE; | Пустой оператор TITLE удаляет все заголовки.3 |
Другими словами, оператор TITLEn переопределяет значение заголовка в строке n и удаляет значения заголовков строк c n+1 до 10.
Также для настройки заголовков и нижних колонтитулов можно использовать стили:
Итак, возвращаясь к разрабатываемому отчету:
Результат выполнения программы:
Формат – это правило вывода значений переменных в отчет. Необходимо понимать, что формат не меняет значения в наборе данных SAS. Типы форматов соответствуют типу данных, но разбиты на категории: числовые, символьные, даты, время, дата-время.
Всю информацию о форматах можно найти в справочнике SAS 9.4 Formats and Informats: Reference. Также поддерживается возможность создания пользовательских форматов, об этом мы поговорим в следующих статьях.
Общий синтаксис оператора FORMAT.
variable – одна или несколько переменных, к которым небходимо применить формат.
DEFAULT=default-format – определяет временный формат по умолчанию для отображения значений переменных, которые не указаны в операторе FORMAT, используется в шаге DATA.
format – определяет формат, который используется для отображения переменных.
Общий синтаксис использованиея формата в операторе FORMAT следующий:
$ — признак текстового формата
Format – название формата
w — ширина формата, количество всех выводимых символов в значении
d — количество десятичных знаков
Формат всегда оканчивается на точку или на количество десятичных знаков. Стоит отметить, что при неверном выборе ширины формата значения в выводе могут «обрезаться». Давайте рассмотрим пример:
Значение переменной | Формат | Результат |
---|---|---|
34566.78 | DOLLAR10.2 | $34,566.78 |
34566.78 | DOLLAR9.2 | $34566.78 |
34566.78 | DOLLAR8.2 | 34566.78 |
34566.78 | DOLLAR7.2 | 34566.8 |
34566.78 | DOLLAR6.2 | 34567 |
34566.78 | DOLLAR4.2 | 35E3 |
При этом значение в наборе данных SAS остается неизменным:
Результат выполнения шага:
Итак, применим формат к переменной Pre:
Отчет выглядит следующим образом:
Для группировки переменных используется оператор BY. Группировка переменных по определенным значениям подразумевает сортировку таблицы. Это связано с обработкой данных SAS Base.
Отсортировать набор данных можно с помощью процедуры PROC SORT.
При сортировке набора данных вам необходимо указать источник (исходный набор данных), группирующую переменную или переменные, а также при необходимости выходной (промежуточный) набор данных.
Давайте проверим вышеизложенное. Если посмотреть на отчет, выводимый в п.7 данной статьи, столбец Gender отсортирован по полу по убыванию. Так ли это?
Результат выполнения процедуры представлен ниже:
Добавим несколько опций для создания итогового отчета: nobyline и #byVAL()
Таким образом, мы получили требуемый детализированный отчет на основании набора German в библиотеке Sasuser.
Итак, это кратко об организации доступа к данным и созданию детализированных отчетов. В следующей статье мы рассмотрим чтение внешних файлов, изучим операторы INFILE и INPUT, а также процедуру PROC IMPORT.
СОДЕРЖАНИЕ
Технический обзор и терминология
В программах SAS есть шаги DATA, которые извлекают и обрабатывают данные, и шаги PROC, которые анализируют данные. Каждый шаг состоит из серии утверждений.
Шаг DATA содержит исполняемые операторы, которые приводят к тому, что программное обеспечение выполняет действие, и декларативные операторы, которые предоставляют инструкции для чтения набора данных или изменения внешнего вида данных. Шаг DATA состоит из двух этапов: компиляции и выполнения. На этапе компиляции обрабатываются декларативные операторы и выявляются синтаксические ошибки. После этого на этапе выполнения последовательно обрабатывается каждый исполняемый оператор. Наборы данных организованы в таблицы со строками, называемыми «наблюдениями», и столбцами, называемыми «переменными». Кроме того, у каждой части данных есть дескриптор и значение.
Шаг PROC состоит из операторов PROC, которые вызывают именованные процедуры. Процедуры выполняют анализ и составление отчетов по наборам данных для создания статистики, анализа и графиков. Существует более 300 названных процедур, каждая из которых содержит значительный объем программной и статистической работы. Операторы PROC также могут отображать результаты, сортировать данные или выполнять другие операции.
Программный пакет SAS состоит из более чем 200 компонентов. Некоторые из компонентов SAS включают:
История
Происхождение
Первые версии SAS были названы в честь года их выпуска. В 1971 году SAS 71 был выпущен ограниченным выпуском. Он использовался только на мэйнфреймах IBM и имел основные элементы программирования SAS, такие как этап DATA и наиболее распространенные процедуры на этапе PROC. В следующем году была выпущена полная версия SAS 72, в которой был представлен оператор MERGE и добавлены функции для обработки недостающих данных или объединения наборов данных. В 1976 году Барр, Гуднайт, Салл и Хельвиг вывели проект из штата Северная Каролина и включили его в состав SAS Institute, Inc.
Разработка
Недавняя история
В 2002 году была представлена программа Text Miner. Text Miner анализирует текстовые данные, такие как электронные письма, на предмет шаблонов в приложениях Business Intelligence. В 2004 году была выпущена версия SAS 9.0, получившая название «Project Mercury» и призванная сделать SAS доступным для более широкого круга бизнес-пользователей. Версия 9.0 добавила настраиваемые пользовательские интерфейсы на основе роли пользователя и установила пользовательский интерфейс «укажи и щелкни» SAS Enterprise Guide в качестве основного графического пользовательского интерфейса (GUI) программного обеспечения. Функции управления взаимоотношениями с клиентами (CRM) были улучшены в 2004 году с помощью SAS Interaction Management. В 2008 году SAS анонсировала Project Unity, предназначенный для интеграции качества данных, интеграции данных и управления основными данными.
Дата выхода
С 1972 года у SAS было много выпусков. Начиная с выпуска 9.3, SAS / STAT имеет собственную нумерацию выпусков.
Выпускать | Дата | Комментарий |
---|---|---|
72 | Январь 1972 г. | |
76 | Июль 1976 г. | |
79,5 | Апрель 1981 г. | |
82,4 | Январь 1983 г. | |
4.06 | Март 1984 г. | |
5,03 | Июль 1986 г. | |
6.01 | Январь 1985 г. | ПК DOS |
6,03 | Март 1988 г. | |
6.06 | Март 1990 г. | |
6,07 | Апрель 1991 г. | |
6,08 | Март 1993 г. | |
6.09 | Октябрь 1993 г. | |
6.10 | Октябрь 1994 | |
6,11 | Октябрь 1995 г. | |
6,12 | Ноябрь 1996 | |
7.0 | Октябрь 1998 | |
8.0 | Ноябрь 1999 г. | |
8.1 | Июль 2000 г. | |
8,2 | Март 2001 г. | |
9.0 | Октябрь 2002 г. | |
9.1 | Декабрь 2003 г. | |
9.1.3 | Август 2004 г. | |
9.2 | Март 2008 г. | СТАТИСТИКА 9.2 |
9,2 м2 | Апрель 2010 г. | СТАТИСТИКА 9.22 |
9,3 | Июль 2011 г. | СТАТИСТИКА 9.3 |
9,3 м2 | Август 2012 г. | СТАТ 12.1 |
9,4 | Июль 2013 | СТАТУС 12.3 |
9,4M1 | Декабрь 2013 | СТАТ 13.1 |
9,4 м2 | Август 2014 г. | СТАТУС 13.2 |
9,4 м3 | Июль 2015 г. | STAT 14.1 |
9,4М4 | Ноябрь 2016 | СТАТИСТИКА 14.2 |
9,4М5 | Сентябрь 2017 г. | СТАТУС 14.3 |
9,4М6 | Ноябрь 2018 г. | STAT 15.1 |
9,4М7 | Август 2020 г. | СТАТ 15.2 |
Программные продукты
Продукты SAS для мониторинга и управления операциями ИТ-систем вместе именуются SAS IT Management Solutions. SAS собирает данные о производительности и использовании различных ИТ-активов, а затем создает отчеты и анализирует их. Продукты SAS Performance Management объединяют и предоставляют графическое отображение ключевых показателей эффективности (KPI) на уровне сотрудников, отделов и организаций. Пакет продуктов SAS Supply Chain Intelligence предлагается для нужд цепочки поставок, таких как прогнозирование спроса на продукцию, управление распределением и запасами и оптимизация ценообразования. Существует также набор программного обеспечения «SAS for Sustainability Management» для прогнозирования экологических, социальных и экономических последствий и определения причинно-следственных связей между операциями и воздействием на окружающую среду или экосистему.
Бесплатное университетское издание
SAS также предлагает бесплатную университетскую версию, которую может загрузить любой желающий для некоммерческого использования. Первое объявление об этом бесплатном университетском издании, похоже, появилось в газетах 28 мая 2014 года.
Сравнение с другими продуктами
Такие конкуренты, как Revolution Analytics и Alpine Data Labs, рекламируют свои продукты как значительно более дешевые, чем у SAS. В сравнении 2011 года Дуг Хеншен из InformationWeek обнаружил, что стартовые сборы для этих трех компаний одинаковы, хотя он признал, что стартовые сборы не обязательно были лучшей основой для сравнения. Бизнес-модель SAS не так сильно зависит от начальных сборов за свои программы, вместо этого она сосредоточена на доходах от ежегодной абонентской платы.