SAS IML. Язык программирования (1185353)
Текст из файла
ЯЗЫК ПРОГРАММИРОВАНИЯ SAS/IMLЛЕКЦИЯ 3Валентина ВласоваValentina.Vlasova@sas.comC op yr i g h t © 2 0 1 3 , S A S I n s t i t u t e I n c . A l l r i g h t s r es er v e d .Сегодня (10.12.2013):План•Интеграция SAS/IML с SAS/BASE, R, C++•Математические методы оптимизации в SAS/IML17.12.2013:•C op yr i g h t © 2 0 1 3 , S A S I n s t i t u t e I n c . A l l r i g h t s r es er v e d .Письменный экзаменИНТЕГРАЦИЯ SAS/IML С SAS/BASE, R, C++C op yr i g h t © 2 0 1 3 , S A S I n s t i t u t e I n c . A l l r i g h t s r es er v e d .ЧТО ТАКОЕ SAS/IML?Это процедура языка SAS (PROC IML;), внутри которой можно создаватьсвои программы на специальном языке.Синтаксис этого языка:•Упрощает работу с матрицами (линейная алгебра, матричные операторы)•Содержит встроенные алгоритмы для решения разных задач (линейныеуравнения и системы, диф. уравнения и системы, оптимизация и т.д.)Кроме того он позволяет:•Выполнять процедуры основного языка Base SAS и обмениваться с нимданными•Интегрировать процедуры языка R(то есть в том числе позволяет интегрировать R и Base SAS)•Запускать сторонние .dll библиотеки4C op yr i g h t © 2 0 1 3 , S A S I n s t i t u t e I n c .
A l l r i g h t s r es er v e d .ИНТЕГРАЦИЯ SAS/IML И BASE SASРабота с набором данных SASUSE – открыть набор данных для чтения• EDIT – открыть набор данных для чтения и записи• CREATE – создать набор данных При этом открытый/созданный набор данных становится активным•SETIN – выбрать текущий набор для ввода• SETOUT – выбрать текущий набор для вывода Используются, например, если нужно только открыть набор данных исделать активным, ничего не считывая и не записывая:•use Sashelp.Class;setin Sashelp.Class point 10;•Сдвиг курсора на 10-е наблюдениеSHOW – отобразить информацию о наборах данныхshow datasets; - список открытых наборов данныхshow contents; - список и характеристики переменных текущего набора данных5C op yr i g h t © 2 0 1 3 , S A S I n s t i t u t e I n c . A l l r i g h t s r es er v e d .ИНТЕГРАЦИЯ SAS/IML И BASE SASРабота с набором данных SAS•LIST – отобразить список и значения переменных набора данных Можно отобразить только часть переменных или часть строк:1.
p = {3 6 9};list point p;2. varNames = {Name Sex Age};list point p var varNames;3. list all var varNames where(Sex='M' & Age>12);•READ – прочитать набор данных в матрицу Также можно прочитать часть переменных или строк•REPLACE – заменить значение переменнойfind all where(name={'Henry'}) into Obs;read point Obs var {Age};Age = Age + 1;replace point Obs var {Age};C op yr i g h t © 2 0 1 3 , S A S I n s t i t u t e I n c . A l l r i g h t s r es er v e d .6ИНТЕГРАЦИЯ SAS/IML И BASE SASРабота с набором данных SAS•DELETE – пометить наблюдение, которое нужно удалить Для окончательного удаление нужно затем обновить набор данных инумерацию наблюдений с помощью оператора PURGE:edit Class;find all where(name={'John'}) into Obs;delete point Obs;purge;•SUMMARY – отобразить статистику по переменным набора данных Количество наблюдений, минимум, максимум, среднее, отклонениеSORT – сортировать набор данных• INDEX – проиндексировать данные•APPEND – заполнить набор данных из матрицы• CLOSE – закрыть набор данных, открытый операторами Use, Create, Edit•7C op yr i g h t © 2 0 1 3 , S A S I n s t i t u t e I n c .
A l l r i g h t s r es er v e d .ИНТЕГРАЦИЯ SAS/IML И BASE SASВызов процедур SAS из IMLSUBMIT <parameters> </ options> ;language statementsENDSUBMIT;Можно включать переменные,используемые в самой proc IMLМожно использовать Base SASдля построения графиковМожно проверять, выполнен ликод или произошла ошибкаПример :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;8C op yr i g h t © 2 0 1 3 , S A S I n s t i t u t e I n c .
A l l r i g h t s r es er v e d .ИНТЕГРАЦИЯ SAS/IML И R“R — язык программирования для статистической обработкиданных и работы с графикой, а также свободная программная средавычислений с открытым исходным кодом в рамках проекта GNU……Изначально R был разработан сотрудниками статистическогофакультета Оклендского университета Россом Айхэкой (англ. RossIhaka) и Робертом Джентлменом (англ.
Robert Gentleman).”ВикипедияПреимущества:1.В открытом доступе2.Постоянно пополняется новыми методамиНедостатки:1.Корректность результатов никем не гарантируется2.При переходе на новую версию часть может не поддерживаться9C op yr i g h t © 2 0 1 3 , S A S I n s t i t u t e I n c . A l l r i g h t s r es er v e d .ИНТЕГРАЦИЯ SAS/IML И R•Перед началом работы нужно установить R(SAS не включает в себя функции языка R и не распространяет их,скачать для установить R можно с сайта http://cran.r-project.org.)•C помощью параметра RLANG можно понять, есть ли доступ кфункциям R:proc options option=RLANG;run;•Результаты работы функции можно посмотреть в логе:NORLANG – Do not support access to R language interfaces• RLANG – Support access to R language interfaces•10C op yr i g h t © 2 0 1 3 , S A S I n s t i t u t e I n c .
A l l r i g h t s r es er v e d .ИНТЕГРАЦИЯ SAS/IML И RЗапуск функций R происходит аналогично запуску кода Base SAS спомощью операторов SUBMIT / R и ENDSUBMIT:proc iml;/* Comparison of matrix operations in IML and R */print "---------- SAS/IML Results -----------------";x = 1:3; /* vector of sequence 1,2,3 */m = {1 2 3, 4 5 6, 7 8 9}; /* 3 x 3 matrix */q = m * t(x); /* matrix multiplication */print q;print "------------- R Results --------------------";submit / R;rx <- matrix( 1:3, nrow=1) # vector of sequence 1,2,3rm <- matrix( 1:9, nrow=3, byrow=TRUE) # 3 x 3 matrixrq <- rm %*% t(rx) # matrix multiplicationprint(rq)endsubmit;11C op yr i g h t © 2 0 1 3 , S A S I n s t i t u t e I n c .
A l l r i g h t s r es er v e d .ИНТЕГРАЦИЯ SAS/IML И R••Transferring Data between SAS and R SoftwareYou can transfer data to and from the following SAS data structures:•a SAS data set in a libref• a SAS/IML matrix•In addition, you can transfer data to and from the following R data structures:an R data frame• an R matrix•Transfer from a SAS Source to an R Destinationproc iml;call ExportDataSetToR("Sashelp.Class", "df" );submit / R;names(df)endsubmit;Transfer from an R Source to a SAS Destination• Subroutine R Source SAS Destination• ImportDataSetFromR R expression SAS data set• ImportMatrixFromR R expression SAS/IML matrix12C op yr i g h t © 2 0 1 3 , S A S I n s t i t u t e I n c . A l l r i g h t s r es er v e d .ИНТЕГРАЦИЯ SAS/IML И RUsing R to Analyze Data in SAS/IML MatricesThe program in this section consists of four parts:1.
Read the data into SAS/IML vectors.2. Transfer the data to R.3. Call R functions to analyze the data.4. Transfer the results of the analysis into SAS/IML vectors.Passing Parameters to R• The SUBMIT statement supports parameter substitution from SAS/IMLmatrices. For example, you can substitute the names of analysis variablesinto a SUBMIT block by using the following statements:YVar = "Weight";XVar = "Height";submit XVar YVar / R;Model <- lm(&YVar ~ &XVar, data=Class, na.action="na.exclude")print (Model$call)endsubmit;13C op yr i g h t © 2 0 1 3 , S A S I n s t i t u t e I n c .
A l l r i g h t s r es er v e d .ИНТЕГРАЦИЯ SAS/IML И RDetails of Data Transfer•Numeric Data TypesR can store numeric data in either an integer or a double-precision data type. Whentransferring R data to a SAS data type, integers types are converted to double precision.•Logical Data TypesR provides a logical data type for storing the values TRUE and FALSE. When logical data aretransferred to a SAS data type, the value TRUE is converted to the number 1 and the valueFALSE to the number 0.•Unsupported Data TypesR provides two data types that are not converted to a SAS data type: complex and raw.
It is anerror to attempt to transfer data stored in either of these data types to a SAS data type.•Special Numeric ValuesDate, Time, and Datetime ValuesR supports date and time data differently than does SAS software. In SAS software, variablesthat represent dates or times are assigned a format such as DATE9. or TIME5.
In R, classesare used to represent dates and times. But SAS enable to transfer a variable in an R dataframe to SAS variable.14C op yr i g h t © 2 0 1 3 , S A S I n s t i t u t e I n c . A l l r i g h t s r es er v e d .ПОДКЛЮЧЕНИЕ СТОРОННИХ БИБЛИОТЕК DLL*•Сначала поставим уже собранную библиотеку GSL, например, отсюда:http://wiki.rglab.org/images/Data/GSL/setup_32.zip• Пропишем путь к файлу dllв переменной PATH:• Перезагрузим SAS, если онзапущен.*не доступно в on-demand15C op yr i g h t © 2 0 1 3 , S A S I n s t i t u t e I n c .
A l l r i g h t s r es er v e d .ПОДКЛЮЧЕНИЕ СТОРОННИХ БИБЛИОТЕКСделаем специальный файл, в котором записана сигнатуранужной функции:* table for sample function in gsl;* double gsl_sf_lambert_W0 (double x);ROUTINE gsl_sf_lambert_W0 MINARG=1 MAXARG=1 RETURNS=DOUBLE;ARG 1 NUM INPUT BYVALUE FORMAT=RB8.;* double gsl_sf_exp (double x);ROUTINE gsl_sf_exp MINARG=1 MAXARG=1 RETURNS=DOUBLE;ARG 1 NUM INPUT BYVALUE FORMAT=RB8.;Вызывающая программа:filename sascbtbl "c:\workshop\gsl_tab.sas";data work.lambert; *let's get analytical solution!;length x y arg 8;c=1E-4;set work.steps;invcm1=(1/c-1);arg=(invcm1*exp(invcm1-time));y = modulen( '*',"libgsl-0,gsl_sf_lambert_W0", arg );analyt=1/(y+1);run;16C op yr i g h t © 2 0 1 3 , S A S I n s t i t u t e I n c .
A l l r i g h t s r es er v e d .ПОДКЛЮЧЕНИЕ СТОРОННИХ БИБЛИОТЕК•••••При первом вызове функция modulen загружает в памятьуказанную библиотеку.На выходе получаем численное возвращаемое значение.После выхода из шага data библиотека выгружается из памяти.Можно вызывать в IML.CAUTION:Use the correct arguments and attributes.If you use incorrect arguments or attributes, you can cause the SAS System, andpossibly your operating system, to fail.•CAUTION:Using the CALL MODULE routine without a defined attribute table can cause the SASSystem to fail or force you to reset your computer.You need to use an attribute table for all external functions that you want to invoke.•Для более сложных функций (например, требующих на входструктуры/объекты, или предварительный malloc) предлагаетсяписать свою обвязку (свои dll).17C op yr i g h t © 2 0 1 3 , S A S I n s t i t u t e I n c .
Характеристики
Тип файла PDF
PDF-формат наиболее широко используется для просмотра любого типа файлов на любом устройстве. В него можно сохранить документ, таблицы, презентацию, текст, чертежи, вычисления, графики и всё остальное, что можно показать на экране любого устройства. Именно его лучше всего использовать для печати.
Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.