SAS BASE. Программирование на языке SAS BASE. Основы (Лекции 2013), страница 3
Описание файла
Файл "SAS BASE. Программирование на языке SAS BASE. Основы" внутри архива находится в папке "Лекции 2013". PDF-файл из архива "Лекции 2013", который расположен в категории "". Всё это находится в предмете "(ппп соиад) (sas) пакеты прикладных программ для статистической обработки и анализа данных" из 10 семестр (2 семестр магистратуры), которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 3 страницы из PDF
Во втором – создаем новуюпеременную и пользуемся оператором “if” (без “then”, т.е. создающим выборку).36Операторы where, if(создание выборки на шаге DATA)Полезные операторы и функции для работы с текстом:– Поиск подстроки с учетом регистраwhere string CONTAINS ‘Woman‘ ;– Простой шаблон: знак подчеркивания – любой символ, процент – любоеколичество любых символов, регистр важенwhere string LIKE ‘%Wom_n%‘ ;– Поиск без учета регистра: см. функцию findwhere find(string,‘woman‘, ‘I‘) >0 ;– Вырезать подстроку: см. функцию substr, второй аргумент – номер символа,начиная с которого её вырезать, третий – сколько символов вырезатьwhere substr(string,1,5)= ‘woman‘ ;Эту же функцию можно использовать для замены части текста– Длина текстовой строки без учета конечных пробелов: см. функцию lengthwhere length(string)= 5 ;– Замена в тексте комбинации символов: см.
функцию tranwrd37Использование RegExp*В SAS можно использовать «регулярныевыражения» - стандарт для поиска шаблоновв тексте.Примеры:1) Поиск наблюдений, где product_nameначинается со слова “Woman”:1 data plist;2set ecprg1.product_list;3where prxmatch('/^Woman/', product_name )>0;4 run;Prxmatch возвращает номерпервого символа, где найденуказанный шаблон.2) Поиск наблюдений и замена с помощью регулярных выражений:1 data plist(keep=product_name product_name1);2set ecprg1.product_list;3where prxmatch('/Woman/', product_name )>0;4product_name1= prxchange('s/Woman/Man/', -1, product_name);5 run;Prxchange производит указанное кол-во замен (-1 = без ограничений) по шаблону втексте, указанном в третьем аргументе (product_name).* http://support.sas.com/rnd/base/datastep/perl_regexp/regexp-tip-sheet.pdf38Call 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: Reference39Очередь для переменной (Lag)•Шаг DATA последовательно читает наблюдения из набора данных. Что делать,если нужно запомнить значение переменной, и использовать его наследующей итерации шага DATA?Пример:Посчитаем разницу между значениями переменной hires в текущем ив прошлом году.1 data dif1;2 set ecprg1.yearly_saleshires;4 dif0=lag(hires);5 dif1=hires-lag(hires);6 dif2=dif(hires);7 run;1. Можно смотреть не на одно, а на несколько наблюдений назад (функцииlag2(..), lag3(..), …2.
Каждая функция lag в программе формирует свою очередь.3. При вызове функции возвращается значение из начала очереди, далеепроисходит сдвиг и в конец очереди помещается текущее значение аргумента.4. Перед первой итерацией шага DATA очередь заполняется пропущеннымизначениями (missing).40Импорт данных• Есть программные способы, обсуждение которых сложно показать в ondemand.• Поэтому, если формат файлов не слишком сложный, выберитеfile->open->data• Выберите библиотеку, куда вы хотите сохранить данные в виде набораданных SAS (on-demand: work)• Если данные находятся в виде необработанных файлов с данными (rawdata), вдобавок запустите для них мастер импорта:41PROC PRINT• Распечатка набора данных (листинг) в виде отчета.PROC PRINT <option(s)>;BY <DESCENDING> variable-1 <…<DESCENDING>variable-n>;….VAR variable(s) <option>;В заголовке PROC Print указывается название набора данных и некоторыенастройки отчета.Оператор By (не обязательный) задает разбивку отчета по указаннымпеременным (требуется предварительная сортировка набора данных)Оператор Var (не обязательный) задает структуру отчета, в немперечисляются переменные, которые мы хотим вывести в отчет.
Еслиэтого оператора нет – выводятся все столбцы из набора данных.Пример:1 proc print data= ecprg1.customer noobs;2 var customer_id country gender;3 run;* Base SAS® 9.3 Procedures Guide -> PRINT Procedure42PROC MEANS• Отчет с описательной статистикой для набора данных (в том числе сразбивкой по классифицирующей переменной)proc means data=ecprg1.monthly_prices n mean max min;var unit_cost_price;class month;run;Процедура умеет рассчитывать ~ 30 разных статистик для выборки* Base SAS® 9.3 Procedures Guide -> MEANS Procedure43PROC GPLOTЭто процедура позволяет, в частности, создавать линейные графики.Пример: построить два линейных графика на одних осях координат, данныенаходятся в наборе данных budget.1 proc gplot data=ecprg1.budget;2 plot (Yr2003 Yr2005) * Month / overlay;3 run;* SAS/GRAPH® 9.3 Reference -> SAS/GRAPH procedures -> GPLOT procedure44Диаграммыproc gchart data=ecprg1.donate;pie qtr /DISCRETE sumvar=amount;run;quit;На что способен SAS/Graph(примеры + программы)http://robslink.com/SAS/Home.htmhttp://support.sas.com/sassamples/graphgallery/PROC_GCHART.html45Манипуляции с выводом1.Сохранение нескольких отчетов в файл стороннего форматаods pdf file=‘~/my.pdf';proc gchart data=ecprg1.donate;pie qtr / DISCRETE sumvar=amount;run;quit;proc print data=ecprg1.donate;run;ods pdf close;Пояснения:*) ~/ : обозначение домашней директории в linux*) Вместо формата pdf можно использовать другие форматы: HTML, RTF, …LaTeX,…*) Справка: SAS(R) 9.3 Output Delivery System: User's Guide, Second Edition46Манипуляции с выводом2.
Сохранение объекта из отчета в набор данныхproc means data=ecprg1.budget;var yr2003 yr2004;run;Шаг 1. Узнать имя объекта:ods trace on;proc means data=ecprg1.budget;var yr2003 yr2004;run;ods trace off;Шаг 2:ods output Summary=work.tab1;proc means data=ecprg1.budget;var yr2003 yr2004;run;47Задания• Установить SAS On-Demand по инструкции.• Самостоятельно проделать демонстрации со слайдов,подумать над вопросами• Создайте с помощью Excel файл с двумя колонками, x и y.Причем x=-10:0.1:10, а y вычисляется как sin(x)• Импортируйте файл Excel в набор данных SAS средствамиSAS Enterprise Guide (меню file-> open->data …)• Напишите шаг Data, где вычисляется «скользящая» суммапо этому набору данных с заданным «окном» (пусть 5точек)• Постройте значение этой суммы на графике48Задания• Напишите шаг data, где создаётся набор данных с двумяпеременными (x, y) и 50 наблюдениями.
В каждомнаблюдении x выбирается случайно (равномернораспределено от -1 до 1), а y считается как x^2.• Отсортируйте этот набор данных по переменной x.• Численно проинтегрируйте y(x), например, с помощьюформулы трапеций, воспользовавшись вторым шагом data.• Найдите самостоятельно «рецепты», как можно объединить«по вертикали» два набора данных. Напишите программу,которая это делает с таблицами ecprg1.2008, ecprg1.2009 иecprg1.201049Макроподстановки• Мы научились писать код на языке SAS Base, но он не очень «гибкий».– У нас нет возможности организовать условное ветвлениепрограммы между частями кода– … и циклы, внутри которых выполняются шаги программы.– Мы не можем повторно использовать отлаженную часть кода.– Нет возможности вводить в программу параметры для повторногоиспользования кода в разных частях программы.
Если нужнопоменять один и тот же кусок кода – только средствами редактора(search - replace)• Чтобы решить эти задачи, в SAS есть надстройка над языком SAS Base,которая называется SAS Macro.• Help: SAS® 9.3 Macro Language Reference• По сути это продвинутый (и автоматизированный) вариант «copy»+«paste». Путь разработчика – написать и отладить программу безмакросов, а потом добавить макросы.50Как работает макропроцессор• Существуют специальные инструкции, чтобы управлятьмакроподстановками в код программы, условными переходами идинамическим созданием кода (когда используются подстановки спараметрами)• Макропроцессор выполняет обработку программы до её компиляции(синтаксической проверки) и исполнения. После работымакропроцессора должен получиться код на языке SAS BASE безкаких-либо макро-инструкций.
Другими словами, синтаксис и логикамакро-языка и SAS BASE изолированы друг от друга. Мы должнынаучиться их «дружить» между собой.• Первый пример макроинструкции – это создание и подстановкамакропеременной.Пример: распечатаем n первых наблюдений из набора данных, где nбудет задаваться макропеременной.Решение без макросов: использовать опцию к набору данных «obs=«proc print data=ecprg1.donate(obs=10);run;51Как работает макропроцессор•Создание макропеременной (одним оператором можно создать только однупеременную):%let numb_of_obs = 10 ;• Название – не более 32 символов английского алфавита (+ цифры и знакподчеркивания), регистр не важен, начинается с буквы или знакаподчеркивания.• Всё, что стоит между знаком «=» и знаком «;» является значениеммакропеременной numb_of_obs.• Любое значение макропеременной – это текст, который потом будет куда-топодставлен.