Лекция 1. Программирование на языке SAS. Основы шага DATA (Лекции 2015)
Описание файла
Файл "Лекция 1. Программирование на языке SAS. Основы шага DATA" внутри архива находится в папке "Лекции 2015". PDF-файл из архива "Лекции 2015", который расположен в категории "". Всё это находится в предмете "(ппп соиад) (sas) пакеты прикладных программ для статистической обработки и анализа данных" из 10 семестр (2 семестр магистратуры), которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст из PDF
Программирование на языкеSASЛекция 1 (Основы шага DATA)Авторы материалов:Звежинский Дмитрий (SAS Russia/CIS), dmitry.zvezhinsky@sas.comПетровский Михаил (ВМК МГУ, SAS Russia/CIS), michael@cs.msu.su1SAS University Edition• http://www.sas.com/en_us/software/universityedition.html• Приложение в виде образа виртуальной машины дляVirtualBox или VMWare• Не требуется постоянное подключение к интернету,просто настроить (инструкции см на сайте)Задание.
Зарегистрируйтесь на сайте SAS, скачайте иустановите SAS U.2SAS University Edition3Как написать программу на SAS UE?• Программа сохраняется на вашем компьютере (в настроеннойдиректории My Folders = …./SASUniversityEdition/myfolders )• Данные хранятся на вашем компьютере (можно загружать и создаватьсвои).• С точки зрения виртуальной машины домашняя директория “~”совпадает с My Folders. Домашняя директория в виртуальной машинеоткрыта на запись.SAS U настроен для работы с кодировкой UTF,но будьте аккуратны при работе с многобайтовыми кодировками!4Справка• Справка в свободном доступе (веб-интерфейс либо pdf)http://support.sas.com/documentation1) Поиск справки по элементам языкаSAS BASE нужно начинать сописания интересующейпроцедуры (и уже в ней искатьсправку о конкретном операторе)2) Пункт overview – общие слова отом, что может делать процедура(шаг PROC)3) Пункт examples – для самыхнетерпеливых4) Дополнительные материалы*) Материалы конференции SUGI (обмен опытом между пользователями)*) Справки по конкретным продуктам SASРекомендуется иметь под рукой:SAS/STAT(R) 9.3 User's GuideSAS(R) 9.3 Functions and CALL Routines: ReferenceBase SAS(R) 9.3 Procedures Guide, Second EditionSAS(R) 9.3 SQL Procedure User's Guide5…Журнал выполнения (Log)• Log – средство для отладки и диагностики выполнения программы.Работает для всех процедур SAS.• Выводит текст запущенной программы и ошибки (если есть).
Ошибкиподробно описаны, иногда даются предложения по исправлению.• Даже если ошибок сразу не видно, рекомендуется вдумчиво изучитьLog.6Отладка с помощью Log• Типы сообщений:• NOTE: описание выполнения программы• WARNING: Программа выполнилась, но есть сомнения в ее правильности(преобразования типов, пропущенные значения, пустой набор данных и т.д.)• ERROR: ошибка, программа не выполнилась• Если что-то не работает, то первым делом в Ctrl+F “ERROR” и Ctrl+F“WARNING” в журнале• Отладка есть «цикл» = запустил, прочитал лог, поправил, запустил …• Особенность, если что-то упало (на каком-то шаге), то SAS все равноидет дальше и проверяет синтаксис (не выполняет).
Иногда удобно,иногда запутывает.• Специально, если хотите только откомпилировать, без запускаиспользуйте оператор RUN CANCEL вместо RUN• Отладочная печать:• На этапе выполнения все переменные put _all_;• На этапе выполнения список значений переменных var1, var2, var3put var1 var2 var3;• Если указать после имени переменной =, то в журнале будут и именапеременных, например put var1 var2= var3=; для переменных var2 и var3будут указаны имена• На этапе макроподстановки (будем изучать потом) аналогично через %put7Общие концепции SAS Base• Что включает SAS Base?• «Движок» для работы с табличными данными в формате SAS• Язык программирования• Набор процедур для простейшего стат. анализа и отчетсти• Что может создаваться в результате работы SAS Base программы?• Новые табличные данные в формате SAS и других форматах• Журнал работы программы (Log)• «Отчеты» с таблицами, графиками и прочей «красотой» в разныхформатах (pdf, html, txt и др.)• Служебные файлы SAS (например, каталоги или индексы)• SAS программа может запускаться:• В пакетном режиме• В интерактивном режиме в некоторой среде (их много), например, в SASStudio в SAS UE или в SAS Enterprise Guide или в консоле …8Обзор языка SAS BASEСтруктура программы на языке SAS BASEСозданиеотчетаДанные(наборыданных SAS,сторонниеформаты)Шаг DATA(преобразование данных)Наборданных SASШаг PROCСозданиенабораданных SAS(длядальнейшегоанализа)• Линейная структура программы.
Нет циклов, операторов условного перехода.• Разные части программы обмениваются друг с другом данными только в виденаборов данных SAS или через макропеременные.• Основная структура данных – набор данных (SAS data set). Все данные лежат нажестком диске в виде файлов. Поэтому данных может быть очень много!• Нет инкапсуляции (в смысле сокрытия реализации кода за интерфейсом)• Только две (!) основные синтаксические конструкции:• Шаг DATA (работа с данными – создание, чтение, добавление, изменение)• Шаг PROC – всё остальное• Исторически основная цель программы – создание отчета (описание или анализ9исходных данных) или запроса к данным (получение «среза» данных).Наборы данных SAS (продолжение)• Раньше: наборы данных – обычные структурированные файлы(*.sas7bdat)• Можно прозрачным образом подключать данные практически в любомвиде (от excel/access до промышленных баз данных) через набормеханизмов (engines).• SAS/ACCESS – программный модуль, позволяющий SAS «видеть»данные во внешних источниках (например, в реляционных СУБД или вHDFS) как «свои» DATASETS• Импорт данных из большинства популярных форматов (xls и csv в SASStudio; Code Snippets->Data->Import … )• Нельзя создавать и редактировать прямо в SAS Studio • SAS – это НЕ СУБД (не гарантирует транзакционную целостность) и НЕменеджер для организации хранения данных (разделение доступа,аудит данных и проч.), хотя возможности для этих целей у негоимеются.10Наборы данных SAS (datasets)• Наборы данных – обычные «плоские» таблицы• Переменные (столбцы) – одного из двух типов,числовые или текстовые• Для хранения чисел отводится 8 байт.
Дляхранения текста – от 1 до 32767 байт.• Названия переменных – до 32 символов: _ a-z 0-9• Регистр в названии переменной не важен• Нельзя начинать название переменной с цифрыИменно наборы данных SAS (либо данные, которыепредставляются в этом виде) обязаны подаваться навход процедур (шаг proc)Каждый столбец имеет набор атрибутов (-> Columns), среди них: length (макс.кол-во байт, которые можно хранить в этой переменной для каждого наблюдения),name (название), label (ярлык, текстовое поле, где можно хранить более подробноеописание переменной), type (тип), format (формат – правило для отображенияданных в отчет или на экран)Для работы с данными в формате SAS dataset можно применять большой наборсобственных алгоритмов, а также стандартный язык запросов (SQL)11Функции*Функции – это подпрограммы, которые возвращают одно значениеfunction-name (argument-1<, …argument-n>)function-name (OF шаблон-названия)Могут применяться на шаге DATA и PROC (например, в условиях-фильтрах)Примеры функций:SUM(argument,argument,...
) – сумма аргументов (пропущенные значения игнор.)Sum и оператор «+» могут работать41 data temp;in_tabпо разному. Чему равны a1 и a242set in_tab;B (Num)C (Num)43a1=b+c;в temp?44a2=sum(b,c);45 run;.1UPCASE(argument) – перевод символьной строки в верхний регистрPUT(source, format.) – перевод числового аргумента в символьный сиспользованием формата (format)INPUT(source,informat.) – перевод символьного аргумента в числовой сиспользованием формата для ввода (informat)Функции можно применять друг к другу без создания лишних переменных* Справка: SAS(R) 9.3 Functions and CALL Routines: Reference12Call routines* (процедуры)• Это ещё один вариант подпрограмм, отличается от функций тем, каквозвращаются результаты.• Их нужно вызывать с помощью оператора CALL:CALL routine-name (argument-1<, ...argument-n>);CALL routine-name (OF variable-list);При этом аргумент может передавать значение в процедуру и/или в неговозвращается какой-то результат работы процедуры.Примеры использования шаблонов для названия переменных-аргументов(между прочим, это работает и в функциях):call cats(result,of y1-y15);call cats(result,of y:);Первый пример - конкатенация 15 символьных переменных (y1, y2, y3, … , y 15) впеременную result.
Второй пример – конкатенация всех переменных, которыеначинаются с «y». (тогда они все должны быть правильного типа!)call missing(sales);Одному или нескольким аргументам будет присвоено пропущенное значение(missing) – числовое или символьное, в зависимости от типа аргумента.* Справка: SAS(R) 9.3 Functions and CALL Routines: Reference13Формат (подробнее дальше)*• Это правило для вывода и ввода данных1 data test;2x=19359;3y=19359;4format y ddmmyy.;5z1=put(x,ddmmyy.);6z2=input(z1,ddmmyy10.);7 run;Информация о формате(для переменной Y)сохраняется в дескрипторенабора данных.Числовой типПреобразовали числов строку символовТоже числовой тип, новыводится как дата… и наоборот1) При применении формата сами данные не меняются (переменная y - число)2) Формат в SAS – это не только форматирование данных, но и метод табличногопоиска (создание и поддержка централизованных справочников).
Частоприменяется, чтобы избежать хранение избыточных данных.3) Шаблоны для вывода на экран можно создавать самому (proc format).* см. SAS(R) 9.3 Formats and Informats: Reference14Числовые переменные в SAS• По умолчанию double-precision (8-byte floating point) используются для:• Арифметических операций• Статистической информации• Хранения всех временных форматов, дат, дней недели, битовых полей(будем разбираться подробнее)• Логических операций (1=true, 0=false), но на самом деле true<>0• Стандратные арифметические операции +,-,*,/ и степень **• Много. мат.
функций (см. help): ABS, LOG и другие• Работа с целочисленными данными:••••ROUND(X) – ближайшее целоеCEIL (X) – следующее большее целоеFLOOR(X) – предыдущее меньшее целоеINT(X) – отбрасывание дробной части• Символьные представления чисел:• Представление в виде мантисы и экспоненты, например 1.2332E-3• Бинарное представление (суфикс b), например 10001b;• HEX представление, (суфикс x), например, ad03x;15Логические операцииSymbol MnemonicEquivalentSymbol MnemonicEquivalent=EQ&AND^=NE|OR¬=NE!OR~=NE¦OR¬NOTˆNOT~NOT>GT<LT>=GE<=LEЗамечания:1. Выражение в условии обязано возвратить число:0 или . = Falseвсё остальное = True2. Операторы min (><) и max (<>):Например, если A<B, то A><B вернёт значение AINВхождение в список: state in ('NY','NJ','PA')16Символьные данные (строки)• Константы указываются в тексте программы ковычах (двойныхили одинарных), сама ковычка экранируется ковычкой• Сравнение строк:• На равенство/неравенство =/^= или eq/ne, например(city ne ‘Moscow’)• На попадание/непопадание в список значений in/notin:(city notin (‘Moscow’, ’Ufa’)• Лексиграфически функция – COMPARE, возвращает 0 если равны• Длина строки:• LENGTHN и LENGTH – длина строки без учета пробелов, LENGTHC – сучетом• ANY и NOT функции для проверки всех символов строки на:• ALPHA – буквы, DIGIT – цифры, ALNUM – цифра или буква, PUNCT –пунктуация• UPPER и LOWER – регистры• Возвращают номер символа для которого выполнено (для ANY) или невыполнено (для NOT) условие• Пример: NOTDIGIT(‘00011DDD929292’) вернет 617Символьные данные (строки)• Проверка наличия символа или строки:• FINDC(«где», «что») возвращает первое вхождение любого символа из«что» в строке «где», например, FINDC(‘ABC’,’DCE’) вернет 3• COUNTC – считает число вхождений символов• FIND и COUNT то же самое, но для подстрок• Стандартные преобразования строк:••••UPCASE, LOWCASE – регистрыLEFT, RIGHT, TRIM – удаляют хвостовые и заглавные пробелы,COMPRESS («где», «что») удалет все символы из «что» из строки «где»TRANSLATE («где», «что», «на что»), TRANWRD и другие – подстановкастроки или символа вместо подстроки или символа• FIRST – возвращает первый символ, CHAR – указанный символ в позиции• SUBSTRING и другие – выделение подстроки по индексам• Конкатенация строк A и B либо:• A || B или функция CAT(A,B)• число аргументов любое A||B||C||D, CAT (A,B,C,D) …• Есть версии CAT с учетом пробелов18Парсинг текста• «Ручной» с помощью FIND и SUBSTRING• «Стандартный» - семество функций SCAN(«где», «номер лексемы»,«разделители»):• парсит «где» по разделителям «разделители», возвращая лексему попорядку «номер лексемы», напримерSCAN('О сколько нам открытий чудных!!',3,' !');вернет ‘нам’• «Продвинутый» с помощью регулярных выражений:• PRXMATCH(«шаблон», «текст») возвращает позицию нахождения шаблона встроке текст, например:prxmatch ('/Woman/','Happy Woman Day');вернет 7• PRXCHANGE(«шаблон», «число замен», «текст») возвращает измененнный«текст» после применения шаблона указанное число раз, например:prxсрфтпу (‘s/Woman/Man/','Happy Woman Day');вернет 'Happy Man Day'19Пропущенные значения• Откуда берутся?• Инициализация по умолчанию• Недопустимые операции (например деление на 0), недопустимые операнды,арифметическое переполнение, ошибки форматов• Присутсвуют в исходных данных• Нет занчений переменной при объединении наборов данных• «распространиение» пропущенных значений при вычислениях (на результатвыражения)• Семантика пропущенного значения - неопределенность• Проверка значения переменной на пропуск:• Missing(X)?• на равенство константе пропущенного значения, например, (X eq .)• Константы:• Для чисел все просто, есть специальная константа .• Специальные пропущенные значения от .A до .Z, семантику определяетпрограммист, они еще и упорядочены!!!• Для символьных данных – строка из пробелов!!!! да, да, вот так и есть,Missing(‘ ‘) = 1, а length(‘ ‘)=3.