SAS BASE. Программирование на языке SAS BASE. Основы (1185351)
Текст из файла
Программирование на языкеSAS BASEЛекция 1. Основы.Звежинский Дмитрий,SAS Russia/CISdmitry.zvezhinsky@sas.comЗамечания об ошибках и опечатках просьба направлять лектору.1Где взять эти лекции?И примеры программ?• http://tiny.cc/msu_sas2SAS Enterprise guide••••Интерфейс для визуальногопрограммирования (в томчисле через SAS on-demand)Но мы будем в немпрограммировать вручную(т.е. с помощью кода наязыке SAS)Enterprise Guide невыполняет код – онотправляет его длявыполнения на сервер, гдестоит дистрибутив SASВ Enterprise Guideвозвращается результатвыполнения программы(например, отчет) илижурнал с отладочнойинформацией (например,ошибками).Инструкции по установке SAS Enterprise guide (вверсии on-demand) были даны ранее.3Как написать программу?• Проект с программой сохраняется навашем компьютере• Данные хранятся на удаленномсервере (можно загружать и создаватьсвои).• Можно сделать несколькоотдельных программ(изображается в виде значка сбегущим человечком) и запускатьих по отдельности () иливместе ().SAS on-demand настроен для работы с кодировкой UTF:Будьте аккуратны при работе с многобайтовыми кодировками!4Журнал выполнения (Log)• Log – средство для отладки и диагностики выполнения программы.Работает для всех процедур SAS.• Выводит текст запущенной программы и ошибки (если есть).
Ошибкиподробно описаны, иногда даются предложения по исправлению.• Даже если ошибок сразу не видно, рекомендуется вдумчиво изучитьLog.5Введение. Обзор языка SAS BASEСтруктура программы на языке SAS BASEСозданиеотчетаДанные(наборыданных SAS,сторонниеформаты)Шаг DATA(преобразование данных)Наборданных SASШаг PROCСозданиенабораданных SAS(длядальнейшегоанализа)• Линейная структура программы. Нет циклов, операторов условного перехода.• Разные части программы обмениваются друг с другом данными в виде наборовданных SAS. Эти части практически не связаны друг с другом.• Основная структура данных – набор данных (SAS data set). Все данные лежат нажестком диске в виде файлов.
Поэтому данных может быть очень много!• Нет инкапсуляции (в смысле сокрытия реализации кода за интерфейсом)• Только две (!) основные синтаксические конструкции:• Шаг DATA (работа с данными – создание, чтение, добавление, изменение)• Шаг PROC – всё остальное• Исторически основная цель программы – создание отчета (описание или анализ6исходных данных) или запроса к данным (получение «среза» данных).Наборы данных SAS (datasets)• Наборы данных – обычные «плоские» таблицы• Переменные (столбцы) – одного из двух типов(числовые)или текстовые ()• Для хранения чисел отводится 8 байт. Дляхранения текста – от 1 до 32767 байт.• Названия переменных – до 32 символов: _ a-z 0-9• Регистр в названии переменной не важен• Нельзя начинать название переменной с цифрыИменно наборы данных SAS (либо данные, которыепредставляются в этом виде) обязаны подаваться навход процедур (шаг proc)Каждый столбец имеет набор атрибутов (правый клик мышью на заголовок – >properties), среди них: length (макс.
кол-во байт, которые можно хранить в этойпеременной для каждого наблюдения), name (название), label (ярлык, текстовоеполе, где можно хранить более подробное описание переменной), type (тип),format (формат – правило для отображения данных в отчет или на экран)Для работы с данными в формате SAS dataset можно применять большой наборсобственных алгоритмов, а также стандартный язык запросов (SQL)7Наборы данных SAS (продолжение)• Наборы данных – обычные файлы (*.sas7bdat)• Можно прозрачным образом подключать данные практическив любом виде (от excel/access до промышленных баз данных)через набор механизмов (engines).• Импорт данных из большинства популярных форматов (file>import data)• Можно создавать и редактировать прямо в Enterprise guide (file>new->data)• Встроенный механизм для многопользовательского доступа (начтение, с доступом на запись – нужно разбираться отдельно)• SAS – это НЕ движок для базы данных (не гарантируеттранзакционную целостность) и НЕ менеджер для организациихранения данных (разделение доступа, аудит данных и проч.),хотя некоторые возможности для этих целей у него имеются.8Библиотеки• Возникли как подход к централизованному хранению ипрозрачному использованию данных в программах SASСамый простой случай библиотеки –это наборы данных, находящиеся водной директории.При запуске SAS сразу имеетсянесколько служебных библиотек,временная библиотека Work (онабудет очищена при отключении отсервера или завершении процессаsas.exe) и персональная библиотекаSasuser (данные хранятся постоянно).В качестве библиотек можно подключать данные, которые физически находятсяне в формате наборов данных SAS (промышленные БД, excel, access).
Длябольшей части вашей программы будет всё равно, как (и где) данные хранятся.9Подключение библиотеки в on-demand1. Подключиться ксерверу SASApp2. Подключить (Assign)нужную библиотеку10Создание библиотек•••Подключение библиотеки производится:– либо через «wizard» (Tools->assign project library) – ф.с. на сервере– либо программным путём (оператор libname):Нельзя в on-demandlibname mylib ‘c:\dir_with_data‘;mylib - название библиотеки: 0-9, a-z, _, не может начинаться сцифры, не более 8 символов длинойПодключенная таким образом библиотека «живет» до завершенияпроцесса sas.exe (для Guide - до отключения от сервера)Теперь в программе можно обращаться к набору данных не указываяполный путь (c:\dir_with_data\testdataset.sas7bdat), а с помощью 2-хуровневого имени (которое записывается через точку):.testdatasetmylibЕсли первая часть не указана – предполагается библиотека WorkСодержимое библиотеки можно посмотреть в окне «Server list», или спомощью процедуры:proc contents data=sasuser._all_;run;111234567891011121314151617Программа на языке SAS Baseoptions linesize=95 pagesize=52;data work.NewSalesEmps;length First_Name $ 12 Last_Name $ 18Job_Title $ 25;infile 'newemps.csv' dlm=',';input First_Name $ Last_Name $Job_Title $ Salary;run;proc print data=work.NewSalesEmps;run;proc means data=work.NewSalesEmps;class Job_Title;var Salary;run;12Программа на языке SAS Base• Программа не требует явного подключения «библиотек» спроцедурами, которые есть в установленномдистрибутиве SAS («#include»)• Программа выполняется «сверху вниз» по шагам• Минимальный «кусочек» программы, который SAS можетвыполнить, это один шаг (начинается с операторов «data»,«proc»)• Можно выполнить один или несколько шагов программы(выделить код мышкой и нажать кнопку RUN)• Каждый оператор должен заканчиваться «;»• Каждый шаг должен заканчиваться операторами «run;»,«quit;», или началом следующего шага• Форматирование свободное (программу можно записатьв одну строку, оператор можно разбивать на несколькострок)13Справка• Справка в свободном доступе (веб-интерфейс либо 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 Guide14…Шаг DATA•••••Обработку данных нужно было делать ещё до того, как был принят стандартдля SQL (wiki: в 1986 году первый стандарт языка SQL был принят ANSI, SAS –развивается с 1966г, с 1976 как коммерческий продукт).Шаг DATA дополняет SQL и наоборот (SQL – работа с множеством наблюдений,шаг DATA – работа с единичными наблюдениями).
Чем пользоваться дляконкретных целей – нужно думать.Шаг DATA очень часто требует существенно меньше ресурсов по сравнению сSQL (важно если данных много), но нужно изучить логику его работы, котораябывает нетривиальной.Позволяет создавать и манипулировать наборами данных SAS (включая запись,чтение наборов данных, чтение необработанных данных, изменениеструктуры, создание агрегатов, объединение таблиц, фильтрацию наблюдений,можно использовать условные переходы, циклы, вызов пользовательских ивстроенных функций, ...).Мы посмотрим малую часть того, что может шаг DATA.
Справка по DATA STEP:– SAS(R) 9.3 Language Reference: Concepts, Second Edition -> DATA StepConcepts– SAS(R) 9.3 Language Reference: Concepts, Second Edition -> Dictionary ofLanguage Elements -> SAS Data Set Options15Шаг DATAСамая простая операция – создание копии набора данных:26 data employees;новый набор данных27set employee_list;исходный набор данных28 run;Что происходит при запуске такого шага?(см. Overview of DATA Step Processing: Flow ofAction)1) Фаза «компиляции»:- проверка синтаксиса- создание вектора данных (PDV) – области впамяти, где хранятся значения переменныхдля одного наблюдения (строчки) изисходного набора данных, включая новые ислужебные переменные.- создание дескриптора (служебной части) длянового набора данных (хранит информацию отипах, названиях переменных, свойстванабора данных и проч.)16Шаг DATAЧто происходит после фазы «компиляции»?26 data employees;27set employee_list;28 run;Ошибок в синтаксисе нетНазвания, типы и свойства переменных взяты из исходной таблицы на фазе компиляцииPDV:(в памяти)employees:(на диске)VAR1 VAR2 VAR3 ………Data Set Name…Observations…Member Type…Variables..Engine..Indexes…Created…Observation Length…Last Modified…Deleted Observations…VAR1 (Num)VAR2 (Char)………VAR3 (Num)2) Фаза «выполнения» – выполнение “цикла” внутри шага data.
Однаитерация цикла – это обработка одного наблюдения (строчки)У нас он состоит только из одного оператора SET и неявных операторов,которых мы в программе не видим.Вопрос: Когда этот цикл закончится?17Оператор SET0. Проверка на достижение конца исх. файла1. Явный оператор Set = Чтение изEmployee_list в PDV2. Неявный оператор Output = сброссодержимого PDV в employees3. Неявный оператор Return = возврат кначалу цикла внутри шага DATA26 data employees;27set employee_list;28 run;employeesData Set Name…Observations…Member Type…Variables..Engine..Indexes…Created…Observation Length…Last Modified…Deleted Observations…VAR1 (Num)Employee_listPDVVAR1 VAR2 VAR3132AAABBBCCC 202201200Data Set Name…Observations…Member Type…Variables..Engine..Indexes…Created…Observation Length…Last Modified…Deleted Observations…VAR2 (Char)VAR3 (Num)VAR1 (Num)VAR2 (Char)VAR3 (Num)1AAA2001AAA2002BBB2012BBB2013CCC2023CCC20218Выбор наблюдений по условию26 data employees;27set employee_list;28where age <= 65 and29 run;upcase(gender) = "M" ;Symbol MnemonicEquivalentSymbol MnemonicEquivalent=EQ&AND^=NE|OR¬=NE!OR~=NE¦OR¬NOTˆNOT~NOT>GT<LT>=GE<=LEINЗамечания:1.
Характеристики
Тип файла PDF
PDF-формат наиболее широко используется для просмотра любого типа файлов на любом устройстве. В него можно сохранить документ, таблицы, презентацию, текст, чертежи, вычисления, графики и всё остальное, что можно показать на экране любого устройства. Именно его лучше всего использовать для печати.
Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.