Главная » Все файлы » Просмотр файлов из архивов » PDF-файлы » SAS IML. Использование языка SAS IML. Основы IML

SAS IML. Использование языка SAS IML. Основы IML (Лекции 2013)

PDF-файл SAS IML. Использование языка SAS IML. Основы IML (Лекции 2013) (ППП СОиАД) (SAS) Пакеты прикладных программ для статистической обработки и анализа данных (63181): Лекции - 10 семестр (2 семестр магистратуры)SAS IML. Использование языка SAS IML. Основы IML (Лекции 2013) - PDF (63181) - СтудИзба2020-08-25СтудИзба

Описание файла

Файл "SAS IML. Использование языка SAS IML. Основы IML" внутри архива находится в папке "Лекции 2013". PDF-файл из архива "Лекции 2013", который расположен в категории "". Всё это находится в предмете "(ппп соиад) (sas) пакеты прикладных программ для статистической обработки и анализа данных" из 10 семестр (2 семестр магистратуры), которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст из PDF

Использование языка SAS/IMLЛекция 1. Основы IML.http://tiny.cc/msu_sasЗвежинский Дмитрий,SAS Russia/CISdmitry.zvezhinsky@sas.comЗамечания об ошибках и опечатках просьба направлять лектору.1Что такое IML?••Это процедура языка SAS (PROC IML;), внутри которой можно создавать своипрограммы на специальном языке.Синтаксис этого языка упрощает работу с матрицами (линейная алгебра,матричные операторы), а также содержит встроенные алгоритмы для решенияразных задач:– Численное решение линейных уравнений, систем уравнений– Численное решение диф. уравнений и систем диф. уравнений– Статистический анализ в духе «Большого SAS», т.е.

генерирование отчетов сопределенной структурой– Манипуляции наборами данных SAS– Написание собственных процедур/функций, которые, правда, работают только внутриIML– Написание программ: циклы, операторы условного перехода, …– Оптимизация– Вэйвлет- и Фурье-преобразования– Вызов процедур и функций из «Большого SAS»– …2Простейшие матричные операции• Основной объект – двумерная матрица.• Тип матрицы – числовой или символьный (смешиватьнельзя).proc iml;a={1 2,3 4};print (a);quit;15proc iml;NOTE: IML Ready16a={1 'a',3 'b'};ERROR: Mixing character with numeric in matrix literal at line=16 col=8.17print (a);ERROR: Matrix a has not been set to a value.• Доступ к элементам матрицы – по индексам:proc iml;a={1 2 3,4 5 6};print a ,, (a[1,2]) ,, (a[{1 2},2]);quit;Индексы можно задавать спомощью матрицы3Простейшие матричные операции• Особенность – всё кроме цифр считается символьнымзначением:proc iml;a={1 2,3 4};b={1 1+1,3 4};c={1 (1+1),3 4};d1=1+1;d2={1 d1,3 4};print a,,b,,c;quit;17b={1 1+1,3 4};_22200ERROR: Unequal number of elements per row in literal at line=17 col=16.4Матрицы•Можно посмотреть тип матрицы и кол-во строк/столбцов:proc iml;a={1 2,3 4};print (a[1,1]);show names;a=j(2,2,"");a[1,1]="PRIVET!";print (a[1,1]);show names;quit;••Матрицы можно переопределять.

Размер элемента символьной матрицыможно поменять, только переопределив её.Матрицы можно сохранить в каталоге - хранилище (WORK.IMLSTOR), ипользоваться ими на другом шаге IML:proc iml;a={1 2,3 4};store a;quit;proc iml;load a;print (a[1,1]);quit;proc catalog catalog=work.imlstor;contents;run;5Простейшие матричные операции•Есть матричные и поэлементные операции (проверяйте размерность!)= Т( )• Операции сравнения и минимума/максимума:proc iml;a={1 2,3 4};b={0 0,5 6};print a b ,'a<>b',(a<>b); *set maximum;b={2,3};print a b, 'a<b',(a<b);quit;6Subscript reduction operatorsоператоры сведения (матриц) по индексам (???)• Позволяют преобразовывать матрицы по заданному правилу поуказанному измерению:proc iml;a={1 2 3, 4 5 6,7 8 9};print (a[+, ]),,(a[+,<>]),,(a[+,<:>]);quit;Пример 1: суммируем по строчкам, кол-воСтолбцов остаётся как в исходной матрице.Пример 2: сначала суммируем по строчкам, потомищем максимум в получившейся матрице.Аналогичный результат дает последовательноеприменение reduction operators: (a[+,][,<>])Пример 3: суммируем по строчкам, и в полученной матрице ищем индекс (номерстолбика), где лежит максимум.Если reduction operators есть сразу в двух измерениях, сначала выполняется первый (длястрок), потом второй (для столбиков).7Простейшие матричные преобразования••••••inv (A) – обратная матрицаtrace (A) – след матрицы (сумма диаг.

эл-тов A*A)abs(A) – модуль каждого элементаsum(A,B) – сумма всех элементов из всех матрицnrow(A), ncol(B) – кол-во строк (столбцов)j (n, m, “privet!”) – матрица n строк, m столбцов, состоящая изтекстовой константы “privet!”• diag(A) – возвращает матрицу того же размера, все элементы кромедиагональных заполняются нулями• i (n) – единичная матрица размером (n x n)• loc (A) – возвращает индексы ненулевых элементов, в частностиможно найти эл-ты, удовлетворяющие условию.8МодулиВстроенные функции:• Support.sas.com/documentation• SAS/IML 9.3 User's GuideПользовательские (называются модули):• Можно их определять прямо в proc iml :START <name> <( arguments )> <GLOBAL( arguments )> ;…FINISH <name> ;• Пользоваться можно тоже только внутри IML.• Есть в виде подпрограмм (subroutine, запускаются оператором CALL),либо в виде функций (function), которые могут вернуть какое-тозначение.

Отличаются только наличием оператора Return внутримодуля (если он есть – это функция).9Модули•Область видимости для переменных: зависит от того, есть ли в определённоммодуле аргументыЕсть (it depends):•Нет (все перем. глобальные):Из модуля-процедуры без аргументов можно ссылаться на глобальныепеременные, которые определятся позднее (из модуля-функции нельзя):proc iml;start test ;print a;finish;a=5;call test;quit;10Модули• Вложенные модули преобразуются так, чтобы у них был один (и тот же)уровень вложенности.• Выражения в качестве аргументов – вычисляются, но хранятся каклокальная копия аргумента:proc iml;start test(in,out);out=in+1;print in out;finish;inx={1 2 3};outx={1 2 3};out=0;call test(inx[1],outx[1]);print (outx[1]);call test(inx[1],out);print (out);quit;Значение выражения (которое нужно как-товычислить) видно внутри модуля, но онохранится как локальная копия! И вернуть этулокальную копию в глобальную областьвидимости нужно явно.Во втором вызове out – это не выражение(его не нужно вычислять), а имя матрицы.Через него можно возвратить значение вглобальную область видимости.11Глобальная или локальная переменная?Резюме1.

Переменная инициализируется вне модуля – глобальная2. Переменная инициализируется внутри модуля, но у модуля отсутствуютаргументы – глобальнаяstart test;output=input+1;finish;input=5;output=0;call test;print output;output63. Переменная передаётся как аргумент в модуль – внутри модуля с ней можноработать как с глобальнойstart test(input,output);output=input+1;finish;in=5;out=0;call test(in,out);out64.

С помощью опции Global указываем переменную – внутри модуля она будетсчитаться глобальной.5. Если в качестве аргумента передаётся выражение, а не матрица, топеременная, которая в него входит, не считается глобальной переменной.12Глобальная или локальная переменная?proc iml;x={1 2 3 4 5};start sum1(x);return (x[1]+x[2]);finish;do i=1 to 4;print(sum1(x[i]||x[i+1]));end;quit;proc iml;x={1 2 3 4 5};start sum1;c=x[i]+x[i+1];finish;c=0;do i=1 to 4;call sum1;print (c);end;quit;х – глобальнаяа внутри модуля?(локальная)В качестве аргумента передаёмглоб.

переменнуюх – глобальнаяа внутри модуля?(как и «i», глобальная)13Глобальная или локальная переменная?proc iml;start sum1(m) global (x);c=x[m]+x[m+1];finish;x={1 2 3 4 5};c=0;do i=1 to 4;call sum1(i);print (c);end;quit;х – глобальная, m-локальнаяСоздаём вектор-строку хВызываем модуль.14Хранение модулей• В IML есть механизм для хранения модулей (для ихпоследующего использования) и матрицproc iml;start test;print "this is a test";finish;STORE MODULE= test;quit;proc iml;LOAD MODULE= test;call test;quit;3568NOTE:3569NOTE:NOTE:NOTE:STORE MODULE= test;Opening storage library WORK.IMLSTORquit;Exiting IML.Storage library WORK.IMLSTOR closed.PROCEDURE IML used (Total process time):real time0.00 secondscpu time0.00 seconds3570 proc iml;NOTE: IML Ready3571LOAD MODULE= test;NOTE: Opening storage library WORK.IMLSTOR• You can view the names of the modules in storage with theSHOW statement, as follows:show storage;15Элементы языка IML• Циклы:скобочки в условии обязательны!скобочки в условии обязательны!16Элементы языка IML• Оператор условного перехода:proc iml;if .

then do;print ". is true";end;if 0 then do;print "0 is true";end;quit;Программа ничего не печатает.Попробуйте добавить операторотрицания «^» перед условием.• Условие должно возвращать число. Истина – этолюбое значение кроме нуля и пропущенногозначения.• Если в условии один оператор, то группу do; .. end;можно не добавлять.• есть дополняющий оператор “else … ;”17Элементы языка IML• Оператор PRINT – вывод в отчет результатов и отладочнойинформации.

Общий вид вот такой:PRINT <matrices> (expression) "message" pointers <[options]> ;• Если нужно вычислить выражение (вывести элементыматрицы, арифметика, функции) – указывайте его вскобочках!• pointers – управляет разбивкой по строкам ( , ) и постраницам ( / )• Можно подписывать строки и столбцы при выводе на экран:proc iml;x = {45.125 50.500,75.375 90.825};r = {"Div A" "Div B"};c = {"Amount" "Net Pay"};print x[rowname=r colname=c format=12.2];quit;18Интеграция IML и SASЧтение наборов данных:1) Открыть набор данных для чтения:proc iml;use test;2) Прочитать нужные столбцы в матрицы:read all var {a} into char_test;read all var {b} into num_test;print char_test num_test;quit;19Интеграция IML и SAS• Мы помним, что в матрице можно хранить данные толькоодного типа.

Размер для хранения данных берётся издескриптора набора данных:data test;length a $ 3 text $ 200;input a $ b text $ ;datalines;aaa 10 blahblahblahbbb 20 blahblahblahccc 30 blahblahblahddd 40 blahblahblah;run;proc iml;use test;SYMBOLROWSCOLS TYPESIZE----------- ------ ---- -----char_test41 char3num_test41 num8text_test41 char200show datasets;read all var {a} into char_test;read all var {b} into num_test;read all var {text} into text_test;print (char_test || text_test);show names;quit;20Интеграция IML и SASЗапись наборов данных• 1) Создать набор данных с помощью оператора Create,• 2) заполнить набор данных из матрицы – оператор Append:proc iml;x=repeat(do(1,3,1),3,1);y=repeat(T(do(1,3,1)),1,3);print x y;create test1 from x;append from x;create test2 from y;append from y;quit;3849 quit;NOTE: Exiting IML.NOTE: The data set WORK.TEST1 has 3 observations and 3variables.NOTE: The data set WORK.TEST2 has 3 observations and 3variables.21Интеграция IML и SASОператор Use – открыть набор данных и сделать его текущим дляввода/вывода (то есть тем набором, который будет использованоператорами Read, Edit, Append, …)Setin/Setout – выбрать текущий набор для ввода/выводаcreatecreatesetoutappendsetoutappendtest1 from x;test2 from y;test1;from x;test2;from y;Close ..

; – закрыть набор данных, открытый операторами Use, Create, EditShow datasets; - статус наборов данных, использованных в текущем сеансеIML.22Преобразования типов• Символы в число: NUMc = {"1" "2" "3"};reset print; /*display values and type of matrices*/m = num(c);• Числа в символы:CHAR( matrix <, w> <, d> ) ;a = {-1.1 0 3.1415 4};reset print; /*display values and type of matrices*/m = char(a, 4, 1);23Вызов процедур SAS из IMLSUBMIT <parameters> </ options> ;language statements!!! Наличие пробела между “T” и “;” приводит к зависанию IMLENDSUBMIT;• Пример :proc iml;x=do(-10,10,0.5);eps=j(1,ncol(x),1);call randgen(eps, "normal", 0,2);y=3#x+5+eps;data_iml=(T(x//y));create test1 from data_iml;append from data_iml;close test1;SUBMIT;proc reg data=test1;model col2=col1;quit;ENDSUBMIT;quit;Любопытно, что внутрь SUBMIT можнопередавать переменные из IML:proc iml;VarName = "Sex";submit VarName;proc freq data=Sashelp.Class;table &VarName / out=OutFreq;run;endsubmit;quit;24Работа с памятью• Для размещения матриц используется выделяемая впамяти область (Workspace)• Что будет, если мы всю её займём?ERROR: (execution) Unable to allocate sufficient memory.

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Нашёл ошибку?
Или хочешь предложить что-то улучшить на этой странице? Напиши об этом и получи бонус!
Бонус рассчитывается индивидуально в каждом случае и может быть в виде баллов или бесплатной услуги от студизбы.
Предложить исправление
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5076
Авторов
на СтудИзбе
455
Средний доход
с одного платного файла
Обучение Подробнее