Слайд 1День 2
Язык программирования SAS Base
Слайд 2Документация
Вся документация по языку SAS Base доступна по ссылке: http://support.sas.com/documentation/onlinedoc/base/index.html#base92
Слайд 3Преобразование данных в информацию
Основные понятия SAS Base:
Data Set (набор данных)
Библиотека
Data step
(шаг данных)
PROC (процедура)
Слайд 5Атрибуты SAS переменных
Все переменные SAS должны иметь три обязательных атрибута:
имя
тип
длина.
Слайд 6Имена переменных
Существуют некоторые правила при наименовании SAS наборов данных и переменных.
SAS
имена
должны быть длиной от 1 до 32 символов
должны начинаться с буквы (A-Z) или нижнего подчеркивания (_)
далее допустимы любые комбинации цифр, букв и подчеркиваний.
Слайд 7Типы переменных в SAS
Переменные могут быть
Символьные
(1 to 32K)
Числовые
по умолчанию, сохраняются
в 8 байтах
Слайд 8Формат
Формат – это инструкция, каким образом отображать переменные при работе.
Форматы имеют
следующую общую форму:
<$>format.
Имя формата
Общая ширина (включая десятичный разряд и специальные символы)
Десятичный разряд
Требуемый разделитель
Определяет символьный формат
Слайд 9Форматирование значений
Вы можете изменить отображаемое значение переменной, используя форматы данных.
SAS
Data Set
Format
Report
Значения
в исходном SAS наборе данных не изменяются.
Слайд 10Форматы
w.d стандартный числовой формат
8.2 Width=8, 2 десятичных разряда: 12234.21
$w.
Стандартный символьный формат
$5. Width=5: KATHY
COMMAw.d цифровой с запятой
COMMA9.2 Width=9, 2 десятичных разряда: 12,234.21
DOLLARw.d знак доллара и запятая
DOLLAR10.2 Width=10, 2 десятичных разряда: $12,234.21
Некоторые форматы SAS:
Слайд 12Даты в системе SAS
SAS даты имеют специальное числовое представление, которое является
количеством дней между 1 января 1960 г. и указанной датой.
1jan1959 1jan1960 1jan1961 1jan2000
DATE9. Informat
MMDDYY10. Format
Слайд 13Форматы
Некоторые форматы для даты:
MMDDYYw.
DATEw.
Слайд 15Форматы
Полный список форматов: http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a001263753.htm
Слайд 16Терминологические соотношения
Обработка данных SAS SQL
файл набор таблица
запись наблюдение строка
поле переменная столбец
Слайд 17Терминология SAS
В документации SAS и SAS программах следующие термины используются взаимозаменяемо:
SAS
набор
SAS таблица
Переменная
Колонка
Наблюдение
Строка
Слайд 19SAS наборы данных
SAS наборы данных включают в себя описательную часть и
собственно данные.
Слайд 20Раздел описаний
Раздел описаний SAS набора данных содержит
общую информацию о SAS наборе
(например, имя набора данных, количество наблюдений)
атрибуты переменных (имя, тип, длина, позиция, формат, наименование).
Процедура CONTENTS (Data Set Attributes) используется для отображения раздела описаний набора данных.
Слайд 21SAS наборы данных: раздел данных
Числовые значения
Имена
переменных
Значения переменных
LastName FirstName JobTitle Salary
TORRES
JAN Pilot 50000
LANGKAMM SARAH Mechanic 80000
SMITH MICHAEL Mechanic 40000
WAGSCHAL NADJA Pilot 77500
TOERMOEN JOCHEN Pilot 65000
Раздел данных SAS набора – это таблица символьных и/или числовых значений данных.
Символьные значения
Слайд 22Значения переменных SAS
Существует два типа переменных:
символьный содержит любое значение: буквы, цифры, специальные
символы и пробелы. По умолчанию, длина символьного значения от 1 до 32,767 байт. Один байт равен одному символу.
числовой по умолчанию, это число с плавающей запятой длиной 8 байт.
Слайд 23Пустые значения
LastName FirstName JobTitle Salary
TORRES JAN
Pilot 50000
LANGKAMM SARAH Mechanic 80000
SMITH MICHAEL Mechanic . WAGSCHAL NADJA Pilot 77500
TOERMOEN 65000
Каждая переменная для каждого наблюдения должна иметь определенное значение. В случае отсутствия значения или ошибки переменной принудительно присваиваются:
точка «.» для числовой переменной.
пробел «» для символьной переменной.
Слайд 25Библиотеки данных SAS
Библиотека – набор файлов, представляемый как единое целое. Чтобы
указать SAS библиотеку, необходимо определить расположение библиотеки и присвоить ей имя (libref).
Один файл – один набор данных (таблица)
Слайд 26Библиотеки данных SAS
После запуска SAS, вы автоматически получаете доступ к временной
библиотеке Work.
Таблицы в этой библиотеке существуют только на время работы сессии (приложения)
Слайд 27Двухуровневые имена файлов
Первая часть имени (libref) указывает на библиотеку.
Каждый файл SAS
имеет двухуровневое имя:
Вторая часть имени (filename) указывает на файл внутри библиотеки.
Набор данных Report.offer – это SAS файл в библиотеке Report.
libref.filename
MAMisc
work
Report
offer
Слайд 28Назначение библиотеки
Для назначения библиотеки используется оператор LIBNAME.
Синтаксис оператора LIBNAME:
LIBNAME libref 'SAS-data-library'
;
Имена библиотек:
должны быть не более 8 символов в длину
должны начинаться с буквы или подчеркивания
могут состоять из букв, цифр и подчеркиваний.
Слайд 29Временный файл
Имя библиотеки work может быть опущено, когда вы ссылаетесь на
файл этой библиотеки. По умолчанию, SAS обращается к библиотеке work, если имя библиотеки не указано.
work.employee
employee
Слайд 30Раздел 1.3
Основные положения языка программирования
Слайд 31Обычно начинается с идентификатора (identifying keyword).
Всегда заканчивается точкой с запятой (semicolon).
data
work.staff;
infile 'raw-data-file';
input LastName $ 1-20 FirstName $ 21-30
JobTitle $ 36-43 Salary 54-59;
run;
proc print data=work.staff;
run;
proc means data=work.staff;
class JobTitle;
var Salary;
run;
Синтаксис языка SAS
Слайд 32Синтаксис языка SAS
...
data work.staff;
infile 'raw-data-file';
input LastName $ 1-20 FirstName $
21-30
JobTitle $ 36-43 Salary 54-59;
run;
proc means data=work.staff;
class JobTitle; var Salary;run;
Программный код имеет свободный формат.
Между операторами может быть более одного пробела.
Операторы могут располагаться в любой колонке.
Один оператор может занимать несколько строк.
На одной строке может быть расположено несколько операторов.
Слайд 33/* текст комментария */ заключается в комбинацию символов /* */.
/*
Create work.staff data set */
data work.staff;
infile 'raw-data-file';
input LastName $ 1-20 FirstName $ 21-30
JobTitle $ 36-43 Salary 54-59;
run;
/* Produce listing report of work.staff */
proc print data=work.staff;
run;
c02s3d2
Комментарии в SAS программе
Слайд 34SAS программа
Шаг данных (DATA step) обычно используется для создания набора данных.
Процедурный
шаг (PROC step) предназначен для обработки наборов данных (создание отчетов и графиков, редактирование данных, сортировка и т.д.)
SAS программа – это последовательность шагов, направляемых пользователем на выполнение.
Слайд 35Границы шага
Шаги SAS программы начинаются с
оператора DATA
оператора PROC.
SAS выявляет конец шага,
когда встречаются
оператор RUN (для большинства шагов)
оператор QUIT (для некоторых процедур)
начало другого шага (оператор DATA или PROC).
Слайд 36Запуск SAS программ
При запуске SAS программы информация о работе выводится в
два основных окна:
SAS log содержит информацию о ходе выполнения
SAS программы, включая сообщения о
возникших ошибках.
output окно вывода результатов выполнения программного кода, как на шаге данных, так и на процедурном шаге.
Слайд 37Синтаксические ошибки
daat work.staff;
infile 'raw-data-file';
input LastName $ 1-20
FirstName $ 21-30
JobTitle $ 36-43 Salary 54-59;
run;
proc print data=work.staff
run;
proc means data=work.staff average max;
class JobTitle;
var Salary;
run;
Ошибки могут быть
орфографические
ошибки пунктуации
задание неверных параметров.
Слайд 38Раздел 1.5
Обработка данных на шаге данных
Слайд 39SAS программы
Шаг данных (DATA Step) обычно используется для создания набора данных.
Слайд 40Чтение SAS набора
По умолчанию, оператор SET считывает
все наблюдения из исходного набора
все
перечисленные в исходном наборе переменные.
Основной синтаксис шага данных:
DATA output-SAS-data-set;
SET input-SAS-data-set;
additional SAS statements
RUN;
Слайд 41Создание нескольких наборов данных
Оператор DATA начинает шаг данных и задает имена
для новых наборов.
Вы можете создать несколько наборов в пределах одного шага данных, перечислив через пробел имена создаваемых наборов в операторе DATA.
DATA <…data-set-name-n>;
Слайд 42SAS выражения
Операторы – это
символы, выполняющие арифметические вычисления
SAS функции.
Операнды – это
имена переменных
константы.
Выражение содержит операнды и операторы, которые формируют инструкции для вывода значений.
Слайд 43Шаг данных (DATA Step)
Шаг данных можно разделить на два этапа:
этап компиляции
этап
выполнения.
Слайд 44Фаза компиляции
На этапе компиляции
проверяется программный код на наличие синтаксических ошибок
программный
код преобразуется в машинный
выделяется область памяти – входной буфер, если предполагается чтение внешнего файла
создается область памяти для Вектора данных (Program Data Vector – PDV)
назначаются обязательные атрибуты для переменных
создается область описаний для создаваемого набора данных.
Слайд 45Компиляция шага данных
PDV
libname ia 'SAS-data-library';
data onboard;
set ia.dfwlax;
Total=FirstClass+Economy;
run;
...
c07s1d1
Слайд 46Компиляция шага данных
PDV
libname ia 'SAS-data-library';
data onboard;
set ia.dfwlax;
Total=FirstClass+Economy;
run;
...
c07s1d1
Слайд 47Типы переменных по умолчанию
На этапе компиляции
Всем переменным присваивается тип.
Длина строковых переменных
определяется:
По первому вхождению
Если стоит присвоение константы, длина приравнивается длине константы
Если стоит присвоение другой переменной, длина приравнивается длине переменной
Если форматируется из числа, длина приравнивается длине формата
В противном случае зависит от функции
Слайд 48Оператор LENGTH
Вы можете использовать оператор LENGTH для явного задания длины переменных.
Синтаксис
оператора LENGTH:
Пример:
LENGTH variable(s) $ length;
length Product_Code $ 11;
Слайд 49Фаза выполнения
На этапе выполнения шага данных
инициализируется PDV
считываются данные в PDV
выполняются операторы,
перечисленные на шаге данных
в конце шага данных наблюдение из PDV записывается в выходной SAS набор данных
происходит возврат на начало шага данных
инициализируется все переменные, кроме переменных считываемых из SAS набора
этот процесс повторяется.
Слайд 50Шаг данных
...
...
ДА
Выполняется команда
“чтение”
Конец файла?
НЕТ
Выполняются операторы программы
Вывод наблюдения в SAS набор
...
Слайд 51Выполнение шага данных
data onboard;
set ia.dfwlax;
Total=FirstClass+Economy;
run;
...
PDV
onboard
ia.dfwlax
Слайд 52Выполнение шага данных
data onboard;
set ia.dfwlax;
Total=FirstClass+Economy;
run;
...
PDV
onboard
ia.dfwlax
Слайд 53Выполнение шага данных
data onboard;
set ia.dfwlax;
Total=FirstClass+Economy;
run;
...
PDV
onboard
ia.dfwlax
Слайд 54Выполнение шага данных
data onboard;
set ia.dfwlax;
Total=FirstClass+Economy;
run;
Сброс Total в
значение missing
...
PDV
onboard
ia.dfwlax
Слайд 55Выполнение шага данных
data onboard;
set ia.dfwlax;
Total=FirstClass+Economy;
run;
...
PDV
onboard
ia.dfwlax
Слайд 56Выполнение шага данных
data onboard;
set ia.dfwlax;
Total=FirstClass+Economy;
run;
...
PDV
onboard
ia.dfwlax
Слайд 57Выполнение шага данных
data onboard;
set ia.dfwlax;
Total=FirstClass+Economy;
run;
...
PDV
onboard
ia.dfwlax
Слайд 58Выполнение шага данных
Список основных выражений используемых при обработке данных с помощью
data step: http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a001225397.htm
Слайд 59Использование функций
Пример:
Функция – набор инструкций по выполнению определенных действий с аргументами.
Возвращает вычисленное значение.
Синтаксис функции:
function-name(argument1,argument2, . . .)
Total=sum(FirstClass,Economy);
Слайд 60Использование функций
SAS функции
выполняют арифметические операции
вычисляют простейшие статистики (например: сумма, среднее, стандартное
отклонение)
управляют SAS датами и работают с символьными значениями
выполняют некоторые другие задачи.
Простые статистические функции игнорируют пустые значения.
Слайд 62Функции
Полный список функций: http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000245860.htm
Слайд 63Опция RENAME=
Вы можете использовать опцию RENAME=, чтобы изменить имя переменной, как
во входной таблице, так и в выходной.
Синтаксис опции RENAME=:
SAS-data-set(RENAME=(old-name-1=new-name-1
old-name-2=new-name-2
.
.
.
old-name-n=new-name-n))
Слайд 64Опции набора данных
Полный список опций набора данных: http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000104210.htm
Слайд 65Выбор переменных
Вы можете использовать на шаге данных оператор DROP или KEEP,
чтобы управлять выводом переменных в новый набор данных.
Синтаксис операторов DROP и KEEP:
Альтернативой операторам служат опции набора данных KEEP= и DROP=
DROP variables;
KEEP variables;
Слайд 66Условное выполнение
Синтаксис операторов IF-THEN и ELSE:
Выражение содержит операнды и операторы, которые
формируют набор инструкций, создающий значение.
Операторы это
символы
сравнения
логических операций
арифметических вычислений
SAS функции.
Операнды это
имена переменных
константы.
IF expression THEN statement;
ELSE statement;
Слайд 67Условное выполнение
Вы можете использовать операторы DO и END, чтобы выполнять группу
операторов по условию.
Синтаксис составного оператора:
IF expression THEN DO;
executable statements
END;
ELSE DO;
executable statements
END;
Слайд 68Множественные условия
Вы можете использовать операторы SELECT и WHEN, чтобы выполнять операторы
по набору условий.
Синтаксис оператора SELECT :
SELECT (select-expression);
WHEN-n (when-expression-1 <..., when-expression-n>) DO; executable statements END;
OTHERWISE DO; executable statements END;
END;
Слайд 69Множественные условия
Вы можете использовать операторы SELECT и WHEN, чтобы выполнять операторы
по набору условий.
Синтаксис оператора SELECT :
SELECT;
WHEN-n (when-expression) DO; executable statements END;
OTHERWISE DO; executable statements END;
END;
Слайд 70Удаление строк
Вы можете использовать оператор DELETE, чтобы контролировать, какие строки выводить
в набор данных.
Синтаксис оператора DELETE:
Выражение – может быть любое SAS выражение.
IF expression THEN DELETE;
Слайд 71Объединение SAS наборов
Используйте оператор SET на шаге данных, чтобы объединить наборы
данных.
Синтаксис шага данных для простого объединения:
DATA SAS-data-set ;
SET SAS-data-set1 SAS-data-set2 . . .;
RUN;
Слайд 72Процедура SORT
Вы можете трансформировать записи в группы, применив процедуру SORT.
Синтаксис
PROC SORT:
PROC SORT DATA=input-SAS-data-set
;
BY BY-variable ...;
RUN;
Слайд 73Процедура SORT
Процедура SORT
переупорядочивает записи в SAS наборе
создает новый набор данных, содержащий
упорядоченные записи
может проводить сортировку по нескольким переменным одновременно
может сортировать данные как в возрастающем, так и в убывающем порядке
считает “пустые” значения как наименьшие.
Слайд 74Процедуры SAS
Документация по процедурам SAS: http://support.sas.com/documentation/cdl/en/proc/61895/HTML/default/viewer.htm#titlepage.htm
Слайд 75Оператор RETAIN
Синтаксис оператора RETAIN:
Оператор RETAIN предотвращает переинициализацию значений переменных на каждом
цикле шага данных.
Предыдущие значения удерживаемых переменных доступны для обработки на следующих итерациях шага данных.
RETAIN variable-name …;
Слайд 76Оператор RETAIN
Оператор RETAIN
выполняется во время компиляции
создает переменные, если они не объявлены
ранее
присваивает начальное значение (если задано) или инициализирует указанные переменные
сохраняет текущее значение переменной во время инициализации PDV.
Слайд 77По-групповая обработка
Для организации доступа к данным по группам используется директива BY
в операторе SET:
После группирования данных появляется возможность
организовать работу с записями по группам
определять первую/последнюю записи в группе.
DATA output-SAS-data-set;
SET input-SAS-data-set;
BY BY-variable … ;
RUN;
Слайд 78По-групповая обработка
Директива BY создает временные переменные для каждого значения переменной,
указанной в операторе BY.
Синтаксис временных переменных:
First.BY-variable
Last.BY-variable
Слайд 79First. и Last. значения
Переменная First. принимает значение 1 при обработке первой
записи в группе, во всех остальных случаях переменная равна 0.
Переменная Last. принимает значение 1 при обработке последней записи в группе, во всех остальных случаях переменная равна 0.
Слайд 80Неявный вывод
По умолчанию, каждый шаг данных содержит оператор неявного вывода OUTPUT
в конце каждой итерации. Оператор OUTPUT сообщает системе SAS, что нужно вывести наблюдения в результирующий набор данных.
1. Неявный вывод
data forecast;
set prog2.growth;
statements>;
run;
2. Неявный возврат
Слайд 81Неявный вывод
Когда одно наблюдение считывается из prog2.growth, одно наблюдение записывается в
forecast.
Слайд 82Оператор OUTPUT
Явный оператор OUTPUT записывает текущее содержимое PDV в набор данных.
Указание
явного оператора OUTPUT на шаге данных подавляет неявный вывод, и SAS добавляет наблюдение в набор только при выполнении явного оператора OUTPUT.
OUTPUT;
Слайд 83Задача
data forecast;
drop NumEmps;
set prog2.growth;
Year=1;
NewTotal=NumEmps*(1+Increase);
output;
Year=2;
NewTotal=NewTotal*(1+Increase);
output;
Year=3;
NewTotal=NewTotal*(1+Increase);
output;
run;
Слайд 84
data forecast;
drop NumEmps;
set prog2.growth;
Year=1;
NewTotal=NumEmps*(1+Increase);
output;
Year=2;
NewTotal=NewTotal*(1+Increase);
output;
Year=3;
NewTotal=NewTotal*(1+Increase);
output;
run;
PDV
Слайд 85
PDV
data forecast;
drop NumEmps;
set prog2.growth;
Year=1;
NewTotal=NumEmps*(1+Increase);
output;
Year=2;
NewTotal=NewTotal*(1+Increase);
output;
Year=3;
NewTotal=NewTotal*(1+Increase);
output;
run;
Слайд 86
PDV
data forecast;
drop NumEmps;
set prog2.growth;
Year=1;
NewTotal=NumEmps*(1+Increase);
output;
Year=2;
NewTotal=NewTotal*(1+Increase);
output;
Year=3;
NewTotal=NewTotal*(1+Increase);
output;
run;
Слайд 87
PDV
data forecast;
drop NumEmps;
set prog2.growth;
Year=1;
NewTotal=NumEmps*(1+Increase);
output;
Year=2;
NewTotal=NewTotal*(1+Increase);
output;
Year=3;
NewTotal=NewTotal*(1+Increase);
output;
run;
Слайд 88
PDV
data forecast;
drop NumEmps;
set prog2.growth;
Year=1;
NewTotal=NumEmps*(1+Increase);
output;
Year=2;
NewTotal=NewTotal*(1+Increase);
output;
Year=3;
NewTotal=NewTotal*(1+Increase);
output;
run;
D
Слайд 89
PDV
data forecast;
drop NumEmps;
set prog2.growth;
Year=1;
NewTotal=NumEmps*(1+Increase);
output;
Year=2;
NewTotal=NewTotal*(1+Increase);
output;
Year=3;
NewTotal=NewTotal*(1+Increase);
output;
run;
Слайд 90
PDV
data forecast;
drop NumEmps;
set prog2.growth;
Year=1;
NewTotal=NumEmps*(1+Increase);
output;
Year=2;
NewTotal=NewTotal*(1+Increase);
output;
Year=3;
NewTotal=NewTotal*(1+Increase);
output;
run;
Инициализация PDV
Слайд 91
PDV
data forecast;
drop NumEmps;
set prog2.growth;
Year=1;
NewTotal=NumEmps*(1+Increase);
output;
Year=2;
NewTotal=NewTotal*(1+Increase);
output;
Year=3;
NewTotal=NewTotal*(1+Increase);
output;
run;
Слайд 92
data forecast;
drop NumEmps;
set prog2.growth;
Year=1;
NewTotal=NumEmps*(1+Increase);
output;
Year=2;
NewTotal=NewTotal*(1+Increase);
output;
Year=3;
NewTotal=NewTotal*(1+Increase);
output;
run;
PDV
Слайд 93
data forecast;
drop NumEmps;
set prog2.growth;
Year=1;
NewTotal=NumEmps*(1+Increase);
output;
Year=2;
NewTotal=NewTotal*(1+Increase);
output;
Year=3;
NewTotal=NewTotal*(1+Increase);
output;
run;
PDV
Слайд 94
data forecast;
drop NumEmps;
set prog2.growth;
Year=1;
NewTotal=NumEmps*(1+Increase);
output;
Year=2;
NewTotal=NewTotal*(1+Increase);
output;
Year=3;
NewTotal=NewTotal*(1+Increase);
output;
run;
PDV
205*(1+0.075)
Слайд 95
PDV
data forecast;
drop NumEmps;
set prog2.growth;
Year=1;
NewTotal=NumEmps*(1+Increase);
output;
Year=2;
NewTotal=NewTotal*(1+Increase);
output;
Year=3;
NewTotal=NewTotal*(1+Increase);
output;
run;
Слайд 96
data forecast;
drop NumEmps;
set prog2.growth;
Year=1;
NewTotal=NumEmps*(1+Increase);
output;
Year=2;
NewTotal=NewTotal*(1+Increase);
output;
Year=3;
NewTotal=NewTotal*(1+Increase);
output;
run;
PDV
Слайд 97
data forecast;
drop NumEmps;
set prog2.growth;
Year=1;
NewTotal=NumEmps*(1+Increase);
output;
Year=2;
NewTotal=NewTotal*(1+Increase);
output;
Year=3;
NewTotal=NewTotal*(1+Increase);
output;
run;
PDV
220.38*(1+0.075)
Слайд 98
PDV
data forecast;
drop NumEmps;
set prog2.growth;
Year=1;
NewTotal=NumEmps*(1+Increase);
output;
Year=2;
NewTotal=NewTotal*(1+Increase);
output;
Year=3;
NewTotal=NewTotal*(1+Increase);
output;
run;
Слайд 99
data forecast;
drop NumEmps;
set prog2.growth;
Year=1;
NewTotal=NumEmps*(1+Increase);
output;
Year=2;
NewTotal=NewTotal*(1+Increase);
output;
Year=3;
NewTotal=NewTotal*(1+Increase);
output;
run;
PDV
Слайд 100
236.90*(1+0.075)
data forecast;
drop NumEmps;
set prog2.growth;
Year=1;
NewTotal=NumEmps*(1+Increase);
output;
Year=2;
NewTotal=NewTotal*(1+Increase);
output;
Year=3;
NewTotal=NewTotal*(1+Increase);
output;
run;
PDV
236.90*(1+0.075)
Слайд 101
PDV
data forecast;
drop NumEmps;
set prog2.growth;
Year=1;
NewTotal=NumEmps*(1+Increase);
output;
Year=2;
NewTotal=NewTotal*(1+Increase);
output;
Year=3;
NewTotal=NewTotal*(1+Increase);
output;
run;
Слайд 102
data forecast;
drop NumEmps;
set prog2.growth;
Year=1;
NewTotal=NumEmps*(1+Increase);
output;
Year=2;
NewTotal=NewTotal*(1+Increase);
output;
Year=3;
NewTotal=NewTotal*(1+Increase);
output;
run;
PDV
Явный
вывод
Слайд 103
data forecast;
drop NumEmps;
set prog2.growth;
Year=1;
NewTotal=NumEmps*(1+Increase);
output;
Year=2;
NewTotal=NewTotal*(1+Increase);
output;
Year=3;
NewTotal=NewTotal*(1+Increase);
output;
run;
Явный
вывод
PDV
Неявный возврат
Слайд 104Оператор OUTPUT
По умолчанию, явный оператор OUTPUT запишет текущее наблюдение в
каждый SAS набор, указанный в операторе DATA.
Вы можете задать имя набора или нескольких наборов, чтобы указать, куда выводить наблюдение.
OUTPUT ;
Слайд 105Слияние наборов данных
Чтобы объединить соответствующие записи из двух или более наборов
данных, используйте оператор MERGE на шаге данных.
Общая форма команды слияния на шаге данных:
DATA SAS-data-set;
MERGE SAS-data-sets;
BY BY-variable(s);
RUN;
Слайд 106Задача
Рассчитать разницу между фактическим и плановым доходом, таблицы performance и goals
необходимо объединить.
ia.performance
ia.goals
Слияние данных по переменной Month и вычисление разницы между значениями переменных Sales и Goal.
ia.compare
Слайд 107Слияние данных: компиляция
PDV
ia.goals
ia.performance
Слайд 108Слияние данных: компиляция
PDV
ia.goals
ia.performance
Слайд 109Слияние данных: компиляция
data ia.compare;
merge ia.performance ia.goals;
by Month;
Difference=Sales-Goal;
run;
PDV
ia.goals
ia.performance
Слайд 110Слияние данных: компиляция
data ia.compare;
merge ia.performance ia.goals;
by Month;
Difference=Sales-Goal;
run;
PDV
ia.goals
ia.performance
Слайд 111Слияние данных: компиляция
data ia.compare;
merge ia.performance ia.goals;
by Month;
Difference=Sales-Goal;
run;
PDV
ia.goals
ia.performance
Слайд 112Слияние данных: компиляция
data ia.compare;
merge ia.performance ia.goals;
by Month;
Difference=Sales-Goal;
run;
PDV
ia.goals
ia.performance
ia.
compare
Создан
раздел
описаний
Слайд 113Слияние данных: выполнение
PDV
ia.
performance
ia.
goals
data ia.compare;
merge ia.performance ia.goals;
by Month;
Difference=Sales-Goal;
run;
Инициализация PDV в missing
Слайд 114Слияние данных: выполнение
Есть совпадение по BY переменной?
data ia.compare;
merge ia.performance
ia.goals;
by Month;
Difference=Sales-Goal;
run;
PDV
ia.
performance
ia.
goals
Слайд 115Слияние данных: выполнение
data ia.compare;
merge ia.performance ia.goals;
by Month;
Difference=Sales-Goal;
run;
PDV
ia.
performance
ia.
goals
Слайд 116Слияние данных: выполнение
data ia.compare;
merge ia.performance ia.goals;
by Month;
Difference=Sales-Goal;
run;
ia.
performance
ia.
goals
Слайд 117Слияние данных: выполнение
Изменилась BY переменная?
data ia.compare;
merge ia.performance ia.goals;
by Month;
Difference=Sales-Goal;
run;
Есть совпадение по BY переменной?
PDV
ia.
performance
ia.
goals
Слайд 118Слияние данных: выполнение
ia.
compare
data ia.compare;
merge ia.performance ia.goals;
by Month;
Difference=Sales-Goal;
run;
PDV
Сброс
PDV
в missing.
ia.
performance
ia.
goals
Слайд 119Слияние данных: выполнение
data ia.compare;
merge ia.performance ia.goals;
by Month;
Difference=Sales-Goal;
run;
PDV
ia.
performance
ia.
goals
ia.
compare
Слайд 120Слияние данных: выполнение
data ia.compare;
merge ia.performance ia.goals;
by Month;
Difference=Sales-Goal;
run;
PDV
ia.
performance
ia.
goals
ia.
compare
Слайд 121Слияние данных: выполнение
data ia.compare;
merge ia.performance ia.goals;
by Month;
Difference=Sales-Goal;
run;
PDV
ia.
performance
ia.
goals
ia.
compare
Слайд 122Слияние данных: выполнение
ia.
performance
ia.
goals
Изменилась BY переменная?
data ia.compare;
merge ia.performance ia.goals;
by Month;
Difference=Sales-Goal;
run;
Есть совпадение по BY переменной?
PDV
Слайд 123Слияние данных: выполнение
ia.
compare
data ia.compare;
merge ia.performance ia.goals;
by Month;
Difference=Sales-Goal;
run;
PDV
Сброс
PDV
в missing.
ia.
performance
ia.
goals
Слайд 124Слияние данных: выполнение
data ia.compare;
merge ia.performance ia.goals;
by Month;
Difference=Sales-Goal;
run;
PDV
ia.
performance
ia.
goals
ia.
compare
Слайд 125Слияние данных: выполнение
data ia.compare;
merge ia.performance ia.goals;
by Month;
Difference=Sales-Goal;
run;
PDV
ia.
performance
ia.
goals
ia.
compare
Слайд 126Слияние данных: выполнение
PDV
data ia.compare;
merge ia.performance ia.goals;
by Month;
Difference=Sales-Goal;
run;
ia.
performance
ia.
goals
ia.
compare
Слайд 127Слияние данных: выполнение
PDV
data ia.compare;
merge ia.performance ia.goals;
by Month;
Difference=Sales-Goal;
run;
ia.
performance
ia.
goals
Конец
файла
Конец
файла
ia.
compare
Слайд 128Опция IN=
Общая форма записи опции IN=:
Используйте опцию IN=, чтобы определить, запись
из какого набора обрабатывается в данный момент.
Variable – это временная числовая переменная, принимающая два значения:
SAS-data-set(IN=variable)
0 набор данных не связан с текущей записью;
1 обрабатываемое наблюдение принадлежит набору.
Слайд 129Индексы SAS
Любая таблица SAS может иметь индекс.
Индекс может быть простым (по
одной переменной) или составным (по нескольким переменным)
Общая форма записи опции индекса:
Имя простого индекса всегда совпадает с переменной
Имя композитного индекса может быть любым
SAS-data-set(INDEX=(index-spec-1 ...)
index= (variable(s) )
Слайд 130Индексы SAS
Индекс используется
При объединениях с помощью merge (исключает необходимость сортировки)
При
объединениях с помощью Proc SQL
При использовании опции KEY= в SET
Слайд 131Доступ к данным по ключу
Для доступа к данным по значению ключа
используется специальная опция KEY=
DATA output-SAS-data-set;
SET input-SAS-data-set1;
SET input-SAS-data-set2 KEY=INDEX;
RUN;
Слайд 132Доступ к данным по ключу
На наборе данных, к которому осуществляется доступ
с опцией KEY= должен существовать индекс с указанным именем
Поиск осуществляется по значениям переменных составляющих индекс на момент выполнения выражения
В случае обнаружения соответствующей записи, автоматическая переменная _IORC_ = 0
В противном случае _IORC_ имеет отличное от нуля значения, _ERROR_ = 1
Слайд 133Загрузка таблицы в память
Для существенного ускорения доступа к данным возможно предварительно
загрузить таблицу (и индекс) целиком в память, сократив количество операций ввода\вывода
SASFILE SAS-data-set LOAD;
SASFILE SAS-data-set CLOSE;
Слайд 134Загрузка таблицы в память
Суммарный размер всех загруженных таблиц не должен превышать
доступный лимит памяти для сессии SAS
После окончания работы таблицы нужно выгружать из памяти для освобождения места
Слайд 135Загрузка таблицы в память
Полная документация: http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a001500739.htm
Слайд 136Использование хэш-таблиц
Для существенного ускорения доступа к данным во время выполнения шага
данных возможно создать хэш-таблицу
Для подстановки значения используется функция find
declare hash name (dataset:' SAS-data-set '); name.defineKey(‘Key-column-1‘<, ‘Key-column-n‘>);
name.defineData((‘Data-column-1‘<, ‘Data-column-n‘>);
name.defineDone();
rc = name.find();
Слайд 137Использование хэш-таблиц
На наборе данных, к которому осуществляется доступ через хэш игнорируются
все индексы
Поиск осуществляется по значениям переменных заданных с помощью функции DefinKey на момент выполнения выражения
В случае обнаружения соответствующей записи, функция find возвращает 0
В противном случае функция find возвращает отличное от нуля значение, _ERROR_ = 1
Слайд 138Использование хэш-таблиц
Полная документация: http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a002576871.htm
Слайд 139Раздел 1.6
Обработка данных с помощью SQL
Слайд 140Синтаксис PROC SQL
Общая форма записи процедуры SQL:
PROC SQL ;
SELECT column-1...
FROM
table-1|view-1<, table-2|view-2>...
…>
… >;
QUIT;
Слайд 141PROC SQL
Позволяет выполнять SQL запросы
Поддерживает основные выражения ANSI SQL
Позволяет единообразно обращаться
как к данным SAS, так и данным в реляционных СУБД
Слайд 142День 3
Оптимизация работы с Oracle. Логирование
Слайд 144Опции подключения к Oracle
При подключении к Oracle полезно использовать следующие опции
для ускорения обмена информацией
Полный список опций: http://support.sas.com/documentation/cdl/en/acreldb/63647/HTML/default/viewer.htm#a003113594.htm
Слайд 145Работа с текстом в Oracle
По умолчанию SAS может читать и записывать
текстовые данные длиной до 1024 байт
Для изменения максимальной длины используется опция
В случае, если длина превышает 4000 байт используется тип CLOB
Документация по опции: http://support.sas.com/documentation/cdl/en/acreldb/63647/HTML/default/viewer.htm#a001342300.htm
DBMAX_TEXT=
Слайд 146BULK загрузка в Oracle
Для ускорения загрузки больших объемов в данных в
БД Oracle необходимо использовать режим BULKLOAD
В данном режиме из таблицы формируется текстовый файл в формате, подходящим для обработки утилитой Oracle SQLLoader
Режим доступен в шаге данных и SQL выражениях CREATE TABLE\INSERT
Для активации режима необходимо задать, как минимум опции
Полный список опций: http://support.sas.com/documentation/cdl/en/acreldb/63647/HTML/default/viewer.htm#a001234400.htm
BULKLOAD=YES BL_SQLLDR_PATH=“path_to_sqlldr”
Слайд 147Оптимизация вычислений
С целью оптимизации скорости выполнения запросов, SAS старается передать объединения
таблиц и вычисления в БД Oracle
Слайд 148Объединение таблиц в Oracle
Для того, чтобы объединение таблиц произошло в Oracle
должны выполняться следующие условия
Объединяемые таблицы находятся в одной БД
В случае если таблицы находятся в разных схемах, следующие параметры libname выражения должны совпадать: user, password, path
Более детальные условия передачи можно прочитать по ссылке: http://support.sas.com/documentation/cdl/en/acreldb/63647/HTML/default/viewer.htm#a003113613.htm
Слайд 149Передача функций в Oracle
При работе с Oracle SAS передает часть функций
для выполнения в БД. Для того, чтобы расширить список передаваемых функций необходимо использовать опцию
Полный список передаваемых функций: http://support.sas.com/documentation/cdl/en/acreldb/63647/HTML/default/a003113612.htm
SQL_FUNCTIONS=ALL
Слайд 150Использование Explicit Path-Through
Для выполнения специфических SQL выражений в Oracle, таких как
PL\SQL код и аналитических функций, используется специальный режим PROC SQL
Общий вид синтаксиса для передачи запросов в режиме Explicit Path-Through
PROC SQL ;
CONNECT TO ORACLE AS alias (connect-options);
EXECUTE ( SQL statements ) BY alias;
SELECT * FROM CONECTION TO alias ( SQL statements );
DISCONNECT FROM alias;
QUIT;
Слайд 151Использование Explicit Path-Through
При использовании SQL выражений, необходимо задавать их по одному
в одном выражении EXECUTE без «;» на конце
PROC SQL ;
CONNECT TO ORACLE AS alias (connect-options);
EXECUTE ( SELECT rownum FROM dual ) BY alias;
EXECUTE ( SELECT rank() over (partition by offer_id) FROM ODB.offers ) BY alias;
DISCONNECT FROM alias;
QUIT;
Слайд 152Использование Explicit Path-Through
При использовании PL\SQL выражений код аналогичен вводимому через другие
интерфейсы
PROC SQL ;
CONNECT TO ORACLE AS alias (connect-options);
EXECUTE ( declare i number(38) := 0; ) BY alias;
DISCONNECT FROM alias;
QUIT;
Слайд 153Использование Explicit Path-Through
Документация: http://support.sas.com/documentation/cdl/en/acreldb/63647/HTML/default/viewer.htm#a003113595.htm
Слайд 155Опции сессии SAS
Для задания разнообразных настроек сессии SAS используется выражение OPTIONS
Полный
список опций доступен по ссылке: http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/a002237888.htm
Для просмотра активных опций используется функция
OPTIONS option(s);
PROC OPTIONS OPTION=option_name proc-options; RUN;
Слайд 156Опции логирования
Для вывода полной информации о выполнении кампании необходимо задать следующие
опции
Для вывода в лог запросов передаваемых в БД Oracle
OPTIONS mprint mlogic symbolgen notes stimer source;
OPTIONS sastarce=‘,,,d’ sastraceloc=saslog;