Главная » Просмотр файлов » SAS BASE. Программирование на языке SAS BASE. Основы

SAS BASE. Программирование на языке SAS BASE. Основы (1185351), страница 2

Файл №1185351 SAS BASE. Программирование на языке SAS BASE. Основы (Лекции 2013) 2 страницаSAS BASE. Программирование на языке SAS BASE. Основы (1185351) страница 22020-08-25СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

Для числовых значений:0 или . = Falseвсё остальное = True( . – это пропущенное значение, missing)2. Операторы min (><) и max (<>):если A<B, то A><B вернёт значение A3. Оператор конкатенации для символьныхзначений:'grade '||'A'Этот оператор не обрабатывает пробелы, которыемогут содержаться в переменных. Особенностьхранения символьных переменных: значениядобиваются пробелами справа до максимальногоразмера переменной (см атриб.

length)Вхождение в список: state in ('NY','NJ','PA')19Действия с переменными на шаге DATAИзменение значения переменной (или создание новой переменной):26 data employees;27set employee_list;28if upcase(Country)='US' then Bonus = 500;29else Bonus=0;30 run;При компиляции в оперативной памяти формируется специальнаяструктура данных – Program Data Vector, который содержит место длявсех переменных, имеющихся внутри шага DATA. Если Bonus был вemployee_list – его свойства берутся оттуда, если нет – в PDV появляетсяновая переменная.Откуда берутся свойства новой переменной?1.

Можно явно задавать самим (напр., тип, формат, длину)2. Если они не заданы явно, то берутся свойства по умолчанию или изконтекста программы (длина, тип)3. При использовании функций – задаются самой функцией (тип,длина).* См. SAS(R) 9.3 Language Reference: Dictionary20Операторы условного перехода1. Выполнение нескольких операторов в одной ветви условногоперехода:IF expression THEN do;…;…;…;end;<ELSE do;…;end;>2.

Ещё один вариант условного перехода (аналог switch-case):SELECT<(select-expression)>;WHEN (when-expression-1) statement;<WHEN (when-expression-n) statement;><OTHERWISE statement;>END;Задание – найти справку по select-when и посмотреть примеры кода.21Функции*Функции – это подпрограммы, которые возвращают одно значениеfunction-name (argument-1<, …argument-n>)function-name (OF шаблон-названия)Могут применяться на шаге DATA и PROC (например, в условиях-фильтрах)Примеры функций:SUM(argument,argument,... ) – сумма аргументов (пропущенные значения игнор.)Sum и оператор «+» могут работать 41 data temp;in_tab42set in_tab;по разному.

Чему равны a1 и a2B (Num) C (Num)43a1=b+c;в temp?44a2=sum(b,c); .145 run;UPCASE(argument) – перевод символьной строки в верхний регистрPUT(source, format.) – перевод числового аргумента в символьный сисползованием формата (format)INPUT(source,informat.) – перевод символьного аргумента в числовой сиспользованием формата для ввода (informat)Функции можно применять друг к другу без создания промежуточных переменных* Справка: SAS(R) 9.3 Functions and CALL Routines: Reference22Функции для даты и времениВнутренний формат даты в SAS – число дней с 01 января 1960 годаВнутренний формат времени – число секунд с полуночиВнутренний формат временной метки (datetime) – число секунд с полуночи 01 января 1960годаДля работы с такими данными (все хранятся в переменных числового типа) есть, в частности,функции:DATEDATEPARTDATETIMEDAYDHMSHMSHOURINTCKINTNXMDYMINUTEMONTHQTRSECONDTIMETIMEPARTTODAYWEEKWEEKDAYYEARYRDIFТекущая дата во внутр.

ФорматеИзвлекает часть, содержащую дату, из временной меткиТекущая дата/время (timestamp)Число из даты во внутр. формате: day ( ’01jan2013’d ) -> 1 ; day (19359) -> 1Returns a SAS datetime value from date, hour, minute, and second values.Returns a SAS time value from hour, minute, and second values.Час из внутр. формата времени или временной меткиКоличество временных промежутков, укладывающихся на данный интервал (годы, месяцы, недели …)Increments a date, time, or datetime value by a given time interval, and returns a date, time, or datetime value.Дата во внутреннем формате из месяца, числа, года: Mdy(1,1,2013) -> 19359минуты из внутр.

формата времени или временной меткиМесяц из внутр. формата датыReturns the quarter of the year from a SAS date value.Returns the second from a SAS time or datetime value.Returns the current time of day as a numeric SAS time value.Извлекает часть, содержащую время, из временной меткиТекущая дата во внутр. формате датыНомер недели из внутр. формата датыДень недели из внутр. формата датыГод из внутр. формата датыReturns the difference in years between two dates according to specified day count conventions; returns a person’s age.23Формат*• Это правило для вывода данных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, Tasks ->Data -> Create format … ).* см. SAS(R) 9.3 Formats and Informats: Reference24Вывод наблюдений в наборы данных1 data test1 test2;А2x=19359;Б3output test1;В4x=19360;Г5output test1 test2; * output ;6format x ddmmyy.;7 run;Компиляция:1) Формирование PDV (только 1 переменная: х),2) Формирование дескрипторов наборов данных test1, test23) Информация о формате записана в дескрипторы test1 и test2Выполнение:А) Заносим х=19359 в PDV,Б) Сбрасываем содержимое PDV в test1 (явный оператор output)В) Заносим х=19360 в PDV,Г) Сбрасываем PDV в test1, test2 (явный оператор output)Д) Завершение шага DATA25Опции набора данных(keep, drop, where, end)1 data test1 (keep=x y);Опция набора данных – в test1 будут выведены2x=today();только x,y3y=datetime();ИЛИ4z=time();Оператор keep - во все наборы данных будут5keep x y;6 run;выведены только x,yKeep: оставить в наборе данных только указанные переменныеDrop: оставить все переменные за исключением указанных1 data test;2set ecprg1.accounts3(where=(Employee_ID between 11000 and 11999));4 run;Опция во входящем наборе данных, фильтрация при чтении данных(если в новом наборе данных – при записи)1 data test;2set ecprg1.accounts3(rename=(account=code));4 run;Опция работает в исходящем и входящем наборе данных,переменная account будет переименована в code (в данном случаев PDV и исходящем наборе данных)26Программирование на языкеSAS BASEЛекция 2.

Основы.Звежинский Дмитрий,SAS Russia/CISdmitry.zvezhinsky@sas.comЗамечания об ошибках и опечатках просьба направлять лектору.Установка SAS on-demandP.S. Если к Вам будут обращаться спроблемами установки, может быть поможет:При инсталляции клиента возникла ошибка,требовалось установить .NET Framework 4. Ноэто не помогло, ровно как и SP1. Помоглаустановка языкового пакетаhttp://www.microsoft.com/ruru/download/details.aspx?id=332428Циклы DOВывести в набор данных целые цифры от 1 до 5 (включительно)1.123456782.

9101112131415163. 1718192021data test;n=0;do until(n>=5);n+1;output;end;run;data test;n=0;do while(n<5);n+1;output;end;run;data test;do n=1 to 5;output;end;run;По умолчанию новая переменнаяинициализируется пропущенным значениемВ данном случае – то же, что n=n+1;Условие проверяется в конце циклаУсловие проверяется в начале циклаА если хочется, можно вообще безциклов:1 data test;2 n=1;3lbl1:4output;5n=n+1;6if n<=5 then go to lbl1;297 run;Особенности шага Data• Тип переменной и её «длина» (атрибут length)числоваясимвольнаяlength a 4;length a $ 4;x=a;x=a;x1='ABCDE';Вопрос: какая длина будет у переменных? А какое значение?При выполнении оператора “=“:• Длина числовой переменной по умолчанию 8 байт• Длина символьной «наследуется».30Особенности шага Data• Посмотрим две программы:№1№2data test;set work.test1;run;data test;set work.test1;set work.test1;run;Work.test• Вопросы: а) когда закончится выполнение программ?• б) сколько итераций сделает цикл в каждой программе?• в) будет ли отличаться результат?Смотрим в log:NOTE: There were 2 observations read from the data set WORK.TEST1.NOTE: The data set WORK.TEST has 2 observations and 2 variables.NOTE: DATA statement used (Total process time):real time0.00 secondscpu time0.00 seconds...NOTE: There were 2 observations read from the data set WORK.TEST1.NOTE: There were 2 observations read from the data set WORK.TEST1.NOTE: The data set WORK.TEST has 2 observations and 2 variables.Первыйшаг dataВторойшаг data31Особенности шага Data• Как работает эта программа?data test;set work.test1;set work.test1;run;Итерация 1.Первый set: записывает первое наблюдение test1 в PDVВторой set: записывает первое наблюдение test1 в PDVНеявный оператор output (Содержимое PDV переносится в новый набор данных)Неявный оператор returnИтерация 2.Первый set: записывает второе наблюдение test1 в PDVВторой set: записывает второе наблюдение test1 в PDVНеявный оператор output (Содержимое PDV переносится в новый набор данных)Неявный оператор returnИтерация 3.Первый set: наткнулись на конец файла, шаг data закончен.Оператор put выводит в log содержимое одной или нескольких переменных PDV32Набегающие суммы• Пример: каким образом пронумеровать наблюдения?123456789101112131415161718data test;ctr=0;Выводит значение переменной в logput ctr=;set ecprg1.contacts;ctr=ctr+1;Просмотр содержимого PDV (в log)put _all_;run;data test;retain ctr 0;set ecprg1.contacts;ctr=ctr+1;run;Не работаетСоздается новая переменная ctr,инициализируется нулём, её значение не будетсбрасываться в missing в начале каждой итерациишага DATAdata test;set ecprg1.contacts; Эта запись – аналог двух операторов впредыдущей программе (retain и увеличениеctr+1;счетчика)run;33Сортировка наборов данных (Proc SORT)123456718293104115126proc sort data=ecprg1.contacts out=tempsort;by descending name;Куда будет выведенrun;отсортированный набор данных?procsort data=ecprg1.nonsalesdupes(keep=employee_idВходящий набор данных first last)По какимпеременнымdupout=dup1 out=nondup1 NODUPKEY;сортировать?by employee_id;proc sort data=ecprg1.contacts out=tempsort;run;by descending name;procsort data=ecprg1.nonsalesdupes(keep=employee_idfirst last)run;Proc SORTумеет искать и выделять дубликаты:dupout=dup2 out=nondup2 NODUPRECS;employee_id;proc sortbydata=ecprg1.nonsalesdupes(keep=employee_idfirst last)Аdupout=dup1 out=nondup1 NODUPKEY;run;7by employee_id;8 run;9 proc sort data=ecprg1.nonsalesdupes(keep=employee_id first last)10dupout=dup2 out=nondup2 NODUPRECS;11by employee_id;12 run;БА: Дубликатами считаются записи с одинаковым значением employee_id.Дубликаты выводятся в набор данных dup1, все остальные записи – в nondup1Б: Дубликатами считаются записи, если они полностью совпадают друг с другом(все поля, которые мы читаем из nonsalesdupes: employee_id, first, last)34Оператор by (шаг DATA)•Если набор данных отсортирован по некоторой переменной, на шаге DATA мыможем работать с маркерами начала и конца группы наблюдений с одним и темже значением этой переменной.Пример:Как посчитать сумму Quantityдля каждого Customer_ID?1234567891011proc sort data=ecprg1.usorders04 out=usord_sort;by customer_id;run;data summary_cust (keep=sum customer_id);set usord_sort;by customer_id;if first.customer_id=1 then sum=0;sum+quantity;if last.customer_id then output;run;Сортировка!First.variable = 1 для первогонаблюдения в группе, =0 длядругих наблюдений,Last.variable =1 для последнегонаблюдения в группе, =0 длядругих наблюдений35Операторы where, if(создание выборки на шаге DATA)• Оператор where (как и опция набора данных where) работает только спеременными, которые уже есть во входящем наборе данных.• Оператор where работает не только на шаге DATA, но и в процедурах.• If работает со всеми переменными, которые присутствуют в PDV, в томчисле со служебными и «новыми»Задача: выбрать наблюдения, где product_list начинается сцифр 2112345678910data plist1;set ecprg1.product_list;where product_id between 210000000000 and 219999999999 ;run;data plist2;set ecprg1.product_list;two_digits=int(product_id/10000000000);if two_digits = 21 ;run;В первом случае мы используем для фильтрации оператор where и переменную,которая уже есть во входящем наборе данных.

Характеристики

Список файлов лекций

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