Язык программирования SAS Base презентация

Содержание

Документация Вся документация по языку SAS Base доступна по ссылке: http://support.sas.com/documentation/onlinedoc/base/index.html#base92

Слайд 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 (процедура)



Слайд 4Раздел 1.1
Набор данных


Слайд 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:


Слайд 11Форматы


Слайд 12Даты в системе SAS
SAS даты имеют специальное числовое представление, которое является

количеством дней между 1 января 1960 г. и указанной датой.


1jan1959 1jan1960 1jan1961 1jan2000

DATE9. Informat

MMDDYY10. Format


Слайд 13Форматы
Некоторые форматы для даты:
MMDDYYw.
DATEw.


Слайд 14Примеры:
Форматы


Слайд 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 таблица

Переменная

Колонка

Наблюдение

Строка


Слайд 18Получение 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

Каждая переменная для каждого наблюдения должна иметь определенное значение. В случае отсутствия значения или ошибки переменной принудительно присваиваются:


точка «.» для числовой переменной.

пробел «» для символьной переменной.



Слайд 24Раздел 1.2
Библиотеки данных SAS


Слайд 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 датами и работают с символьными значениями
выполняют некоторые другие задачи.

Простые статистические функции игнорируют пустые значения.


Слайд 61Примеры функций


Слайд 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. Логирование


Слайд 143Раздел 2.1
Работа с 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


Слайд 154Раздел 2.2
Опции SAS. Логирование


Слайд 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;


Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика