Основы программирования на SAS. Урок 1

Привет! Я Анна Добрыченко, преподаватель учебного центра SAS в России: провожу тренинги по программированию на SAS Base, использованию SAS Enterprise Guide и SAS Visual Analytics, участвую в подготовке стажеров. Вся техническая документация и статьи продуктов и решений SAS изложены на английском языке, а локализованного материала в Рунете недостаточно.

Поэтому в нашем блоге на Хабрахабре я расскажу об основах программирования на SAS в цикле статей.

zyi59l38oce457vbjmq8pfgbpcq.jpeg

Язык SAS Base представляет собой основу большинства этих продуктов и решений SAS, именно ему и будут посвящены статьи. В них я познакомлю с терминологией, типами данных, с которыми работает SAS Base, со структурой кода, написанного на SAS Base, и покажу основные приемы, которые используются при написании программ SAS.

Вводная


Есть несколько вариантов изучить основы программирования на SAS Base.

  1. Прочитать документацию: все решения SAS хорошо задокументированы, чтобы пользоваться ими было легко даже новичку. Все справочники находятся на сайте поддержки. Из плюсов стоит отметить, что найти можно все, что интересует бесплатно, из минусов — долго, и вся информация на английском языке.
  2. Посмотреть бесплатный онлайн-курс в формате e-Learning. Плюсы — все подробно разъясняется с примерами и выполнением практических упражнений, минусы — долго (длительность 24 часа), курс на английском языке. Также можно посмотреть видео SAS на Youtube.
  3. Купить книгу, например, Little SAS Book. Книга знакомит начинающих пользователей с языком SAS Base, содержит практические примеры и упражнения. Но опять же, вся литература, выпускаемая SAS, на английском языке и имеет относительно высокую стоимость. Все книги представлены на официальном сайте SAS в разделе «Обучение», также можно воспользоваться ресурсом Amazon. Но если вы студент и участвуете, например, в нашей стажерской программе, то вам могло повезти и вы получили книгу в подарок, что не может не радовать.
  4. Прочитать наш курс статей, освящающий основы программирования на SAS Base. Эти статьи адресованы новым пользователям SAS, работающим в различных сферах бизнеса, по большому счету для всех, кто собирается проводить анализ данных с помощью решений SAS или писать свои программы на SAS Base.


Я постараюсь познакомить с языком SAS Base на конкретных практических примерах с краткими пояснениями, содержащими минимум технического жаргона.

Добываем инструменты


Научиться программировать на SAS Base можно на бесплатном интерфейсе под названием SAS University Edition или сокращенно SAS UE.
 
SAS UE — это мощный инструмент, который предоставляется SAS Institute. Пользовательский интерфейс для SAS UE (известный как SAS Studio) основан на web-браузере — это web-клиент. Скачать его можно на сайте SAS абсолютно бесплатно. На ПК SAS UE запускается под виртуальной машиной и требует установки программного обеспечения виртуализации. Для Windows подойдет Oracle VM VirtualBox и Vmware Player. Всю информацию по установке можно изучить вот в этом документе.

zedzm-gjg0idoparz9j9jw4-8ue.png


При запуске программы или задачи SAS Studio подключается к серверу SAS для обработки кода. Сервер SAS может быть размещен в облачной среде, локальной среде или же на локальном компьютере. После обработки кода результаты возвращаются в SAS Studio в вашем браузере.

SAS Studio поддерживает несколько веб-браузеров: Microsoft Internet Explorer, Apple Safari, Mozilla Firefox, and Google Chrome.

Разбираемся в интерфейсе


Немного о том, как выглядит интерфейс SAS UE.
 
Слева находится панель навигации, справа — рабочая область. Три основные вкладки рабочей области — «Код», «Журнал», «Результаты».
 
Справка по синтаксису появляется, как только вы уменьшаете список релевантных ключевых слов. Справка по синтаксису также появляется, если щелкнуть правой кнопкой мыши на ключевое слово в программе и выбрать Syntax Help (Справка по синтаксису).
 
dFnglb9-1kZSZhWDp3dB4GgwL3Z0IXxn9SeGM23M

Можно перейти на страницу документации по той или иной процедуре, кликнув на ссылку «Документация по продукту».

CQ0XUZhQKEDpgkLf87QnHcqvYJ4TxxPr9Q2aNEKO

На вкладке вы можете увидеть созданные таблицы.

pNuM3H26C2qHreMCiHzBf2kkr1k47kfOUbJrqIin

На вкладке «Результаты» вы можете просматривать вывод процедур, создающих отчеты.

hjWwkr1Ueo_LsT7Z3KDSlnBFn2_zP1_G0BlUAsDf

Если какая-то часть программы используется часто, ее можно добавить во «Фрагменты кода».

4NYhiqHSxojlGRW5X8voRKn2-H5eTfb1Dc8SEYNt
 
 OC4XHD1JtwiWM4yEwueG0TtacvkqxlLF60aktLMo
 
NCeBblAnJc1k1zVeqWBrk5pTAy4XCcIzxH_KbuFa

После запуска и выполнения любой, даже самой простой программы рекомендую открывать и просматривать Log. Log является инструментом диагностирования и отладки потенциальных проблем, связанных с вашей программой. Журнал выводит текст запущенной программы, также в нем существует три вида сообщений: примечания, предупреждения и ошибки. Даже если ошибок сразу не видно, рекомендуется вдумчиво изучить Log.

a2iyneroed-evrmdphe3ndhcqwa.png


Вы можете открыть справку (SAS Help) и документацию прямо из главной панели инструментов. SAS Studio Help (Справка SAS Studio) для перехода на страницу документации по SAS Studio. Эта веб-страница содержит справку по интерфейсу SAS Studio.

-EuK7EbwSSkeIYpq46haU94R3Wr5odEbqz1LCGHB


Если вы только начали изучать продукты SAS, то наверняка незнакомы с некоторыми особенностями терминологии, используемой в продуктах компании.

Sas7bdat и данные


Начнем с того, что SAS Base работает только с особым форматом данных, который называется SAS Data Set (набор данных SAS). Но помимо всего прочего SAS является очень гибким инструментом и может считывать практически любые данные, преобразовывая в SAS Data Set. Набор данных SAS представляет собой обычную плоскую таблицу, состоящую из строк и столбцов. Набор данных SAS хранится как файл с расширением .sas7bdat.

С точки зрения традиционной терминологии SAS наборы данных состоят из переменных (variables) и наблюдений (observations). Проведя аналогию с терминологией реляционных баз данных, переменные являются столбцами, а наблюдения — строками.
 
Рассмотрим на примере описанное выше.

Представленная программа создает таблицу people (сам синтаксис мы рассмотрим позже):

data people;
infile datalines dlm=' ' dsd missover;
length Id 8 Fist_Name $12 Last_Name $20 Phone_number $20;
input Id Fist_Name Last_Name Phone_number;
datalines;
125001 Gregory Backer +1-567-244-5678
245002 Albert Hardman +1-862-444-3333
126003 Amanda Wesley 
. Gloria Carter +1-963-542-2154
111005 Colin +1-964-584-1111
;


oHrf54zNWvlW2gG9EBL3PqivkLQyM8M7IEPvqNSU


Исходные данные могут иметь различный вид, SAS упростил эту задачу. В SAS существует всего два типа данных числовой (numeric) и символьный (character). В наборе данных people переменные First_Name, Last_Name, Phone_Number имеют символьный тип, а переменная Id — числовой. Стоит отметить, что даты в SAS — это тоже числа.

Данная программа создает набор данных time, содержащий текущие дату, время и дату и время (datetime) в формате SAS:

data time;
Current_date=Today();
Current_time=Time();
Current_datetime=Datetime();
run;


Возможный вид набора данных представлен ниже:

Gt4yVYc7vxzawVCrR5JF-N-_grGqKVQBeZ7ycRYm

Все три значения — это даты в формате SAS. Итак, дата в формате SAS — это количество дней, начиная с 01 января 1960 до текущей даты, время в формате SAS — это количество секунд, начиная с полуночи текущей даты, дата и время — это количество секунд, начиная с полуночи 1960 года. Именно в таком виде хранятся даты в формате SAS в наборах данных.

Иногда данные могут быть неполными, как в наборе данных people: в нем отсутствуют некоторые значения. В SAS существует понятие missing — пропущенное значение. По факту, пропущенное значение — это тип значения для переменной, которая не содержит данных для конкретной строки или столбца. По умолчанию SAS записывает недостающее числовое значение в виде точки и отсутствующее значение текстовой переменной в качестве пробела. При сравнении «миссинг» всегда равен «миссингу», при этом в операторах сравнения «миссинг» — самое минимальное значение.

Кроме фактических значений, набор данных SAS имеет такие данные, как тип переменной, длину, имя, ярлыки, форматы, называемые атрибутами набора данных.

Переменные и атрибуты


У переменных в SAS есть ряд атрибутов, давайте познакомимся с некоторыми из них.
Длина переменной — это количество байт, приходящихся на один символ.
Данный код демонстрирует вышеизложенное:

data _null_;
word1='SAS Institute';
LEN=length(word1);
putlog 'Length of word1 is ' LEN;
run;


Фрагмент Log:

g8YVF66HTVE1W0AngD6r5PZygchYCdY9itxUojMd

Имена переменных, как и наборов данных, задаются самостоятельно. Есть ряд правил именования переменных SAS:

  1. Имена не должны превышать 32 символов.
  2. Имена должны начинаться только с буквы или символа нижнего подчеркивания.
  3. Имена могут содержать только буквы, цифры или символы нижнего подчеркивания.
  4. В именах переменных нельзя использовать специальные символы, в том числе и пробел.
  5. Имена могут содержать как прописные, так и строчные буквы, так как SAS не чувствителен к регистру при именовании сущностей (переменные, наборы данных, библиотеки и так далее). Обращаться в коде к переменной вы можете в любом регистре. Но! Важно то, что SAS запоминает первое появление названия переменной в программе и при формировании отчета использует именно его.


Формат переменной — это правило визуального преобразования данных в отчете. Важно понимать, что значения в таблице при этом не изменяются. Ниже пример того, как дата и время могут быть представлены в отчете, но в исходной таблице их значения хранятся в виде числа.

9j26QmZZM0VxTvRKi3zfNGlwcZNYMncbRWxB8Qcw
В последующих статьях мы подробнее познакомимся с атрибутом формат.
 
Ярлык переменной используется в отчетах вместо имен переменных. Ярлык может содержать до 256 символов, включая специальные символы, в том числе и знак пробела. В последующих статьях мы рассмотрим, виды ярлыков и как они используются в программном коде, а также приемы, когда в имени переменной может быть использован, например, пробел.

Структура программы SAS Base


Ознакомимся со структурой программы на языке SAS Base.

Все программы SAS состоят всего из двух шагов: шаг PROC и шаг DATA. Шаг DATA предназначен для чтения, преобразования и создания наборов данных SAS, а процедурный шаг PROC в основном — для анализа данных, формирования и печати отчетов. Шаги состоят из операторов. Индикатор окончания шага — это ключевое слово RUN (или, например, QUIT для ряда процедур), также сигналом к завершению шага может быть наличие операторов STOP и ABORT. Шаги могут размещаться в произвольном порядке, компилятор считывает последовательно шаг за шагом. Стоит отметить, что и сами шаги считываются построчно и никак иначе. Разные части программы обмениваются друг с другом данными в виде наборов данных SAS.

Синтаксис SAS Base очень прост, так же как и написание кода.

Пример простейшей программы SAS представлен ниже:

data new;
set sasuser.ads;
run;

proc print data=new;
run;


Важным требованием синтаксиса является наличие точки с запятой в конце каждого оператора. Данная программа SAS считывает набор данных ads из библиотеки sasuser (с понятием «библиотека» мы познакомимся в следующей статье), создает новый набор данных new. На следующем шаге мы создаем отчет из нового набора данных.

Стоит отметить, что у SAS Base нет требований к форматированию кода. Вы можете написать код в одну строку и код будет работать. Чтобы отформатировать код в SAS U, нажмите на кнопку «формат кода»:

eiFtfkZwhfAjU5Zx6Muk5DTx2qlPsIzri5eYIDHD


Хороший тон для программиста — это пояснения к исходному тексту программы. Комментарии не влияют на семантику программы.

В SAS Base есть два вида комментариев:

  • Закомментированный оператор — *оператор;


data new;
set sasuser.ads;
run;

proc print data=new;
*var Sales;
run;


Фрагмент Log:

KFnUe8sx2COM_t-hNqy5zgp5Tyy-pKqgdja6dZlW

  • Комментарий — /*комментарий*/


/*Create new data set*/
data new;
set sasuser.ads;
run;

/*Create new report*/
proc print data=new;
run;


Фрагмент Log:

TAJuMa9vroqJxwD_0FPuywbzt6zuX_2CtA6r9S21

Как отмечалось ранее, Log необходимо детально изучать. Давайте рассмотрим несколько самых распространенных синтаксических ошибок:

  • Опечатка в ключевом слове data или proc.


daat new;
set sasuser.ads;
run;

proc print data=new;
run;


В данном случае шаг отработает с предупреждением. В Log мы увидим следующую информацию:

xBlSd1eyRXVHgkcEnKUEXLrboP6xcXFoCIZCZPfa

  • Отсутствие «точки с запятой».


data new;
set sasuser.ads;
run;

proc print data=new
run;


В данном случае run на втором шаге программы будет расценен как параметр оператора proc print.

Ошибка будет выглядеть следующим образом:

dhVO1f420zGYfTVToI3wIO1IvXemyUxYNIyQMjyW

  • Непарные кавычки. В SAS Base можно использовать одинарные и двойные кавычки, которые должны быть парными.


data test;
infile datalines dlm=',;
input x y z;
datalines;
1,2,3
;


При непарных кавычках срабатывает подсветка и в Log заносится в этом случае следующее сообщение (фрагмент Log):

ruIWekri-Bx61rV7Uxbj90OyA9yl5ZqlROmhmMw4

Итак, это кратко об интерфейсе SAS UE, терминологии SAS Base и основных требованиях к синтаксису SAS Base. В следующей статье мы рассмотрим библиотеки SAS и их создание, создание детализированных отчетов, рассмотрим форматирование значений и задание постоянных атрибутов переменным.

Уверена, что работа с SAS окажется интересной и увлекательной. Grow with SAS!

© Habrahabr.ru