SAS delete rows from dataset. Three ways.

Всем привет!

Сегодня рассмотрим простенький пример удаления записей из таблицы SAS.

Хотелось бы отметить, что все изложенный способы завязаны на то, что таблицу SAS можно просто перезаписать, наложив некоторое условие, т.е. выглядеть код будет примерно так:

data A;
set A;
if ….;
run;

Вот и все. А ниже привожу примеры:

Будем рассматривать набор с 1 800 734 строк и размером 305,8 Mб

1.  Идет по таблице обычным Data step шагом и вычищаем не нужные нам записи
в помощью delete 






2. Делаем обратную логику к нашему условию и вычищаем ненужные данный с помощью where

Хочу обратить внимание, что в данном примере мы прочитали лишь 735909 записей, а не все миллион восемьсот . Более подробно смотрите предыдущий урок: Optimization. Where and IF.

3. Также используем обратную логику (в данном примере not in) и условие if.. then output


В принципе как мы видим, на миллионах записей время работы всех способов примерно одинаково.

И напоследок хотел бы привести пример, как делать не надо:

Сразу приведу пример, а затем опишу что именно в нем не так:

То кто внимательно посмотрит на данный пример заметит, что в нем перешли от формата дата времени к формату дата. В SAS, как вы знаете эти форматы различаются. Так вот для этого пришлось применить функцию datepart на поле date_trade, что привело к увеличению времени работы кода.

Надеюсь данный пост был Вам полезен.

С уважением,
Николай.

SAS connect to Oracle. Part 5. PL/SQL

Всем добрый день!

Сегодня речь пойдет о выполнении PLSQL кода через SAS.

В SAS начиная с версии SAS 9.2 можно запускать plsql код используя execute().

Ниже привожу два примера, в одном из которых используются bind variable, в другом нет.

Также обратите внимание на большую разницу в с коросте выполнения скриптов:

without bind variable:

Как видно из лога цикл в PLSQL выполнялся 18 секунд

Теперь запустим тот же код с использованием bind переменной:

bind variable:

Здесь, как мы видим скорость выполнения цикла уменьшилась до 1 секунды.

Так что через SAS Access to Oracle можно выполнять любой PLSQL код в том числе и создавать процедуры.

Если данный пост был полезен Вам можете оставьте свой отзыв.

С уважением,
Николай.

SAS Optimization Code. Where and IF in Data Step code.

Сегодня хотел бы затронуть темы оптимизации SAS кода. На эту тему можно много чего сказать, но сегодня расскажу о том, что можно внедрить у себя уже сейчас, сразу после прочтения данной статьи.

Речь сегодня пойдет о разнице в использовании условий отбора Where и IF в Вашей коде. 
Не будем ходить в округ да около, а сразу начнем с примера:
WHERE:
IF:
Как говориться посмотри и найди разницу.
А разница состоит в отличии считанных строк. 
Таким образом best practices нам говорит использовать Where условие, хотя я честно говоря в примере особого выигрыша по времени не заметил. 
А теперь приведу картинку, раскрывающую теоретическую часть данного эксперимента:
Из приведенной картинки видно, что условие where проверяется еще до записи в PDV вектор, что экономит время работы программы. 
P.S. Если Вас заинтересовала статья по оптимизации кода и хотели бы ознакомиться еще с возможностью оптимизации, то просьба написать об этом в комментариях к данной статье. 

SAS Visual Analytics. GEO Map Russian.

Всем привет!

Сегодняшний урок будет плавным продолжением предыдущего. В котором мы познакомимся с продуктом SAS Visual Analytics и научимся загружать и просматривать визуальную географическую аналитике.
(P.S. Для более комфортного просмотра видеоролика лучше его просматривать на полном экране в Full HD качестве)

Надеюсь данный видио-урок был познавателен и интересен. Если есть вопросы можете задавать.

Download information from internet site by SAS. Координаты городов России для SAS Visual Analytics.

Всем добрый день.

Сегодня будем рассматривать задачу выгрузки данных с сайта в интернете.

Чтобы задача была более интересной, то давайте результатом нашей работы будет справочник городов России с их координатами.

Данный справочник будет нам полезен при работе с продуктом SAS Visual Analytics, где можно отображать данные на географической карте в SAS VA.

В качестве источника возьмем следующий сайт: http://sas-education.ru/Citycoord.html

На приведенной страничке подготовлены координаты российских городов.

Ниже приведен, код который позволяет сделать выгрузку содержимого страницы в sas file:

Далее на необходимо привести формат координат из обычного (с.ш.   в.д.) в понятный для карт формат (например для yadex карт). Для этого нужно перевести минуты и секунды в градусы. (в наших примерах имеются только минуты).

В итоге получаем следующую таблицу:

Проверим, что все сходиться (для этого вобьем координаты в yandex картах) для этого допустим введем координаты Королева — города в Московской области. :

P.S.

Ниже привожу полный код программы. Так что вы можете сами у себя попробовать запустить ее и получить справочник с координатами российских городов

http://sas-education.ru/city_coord.sas

Создание Workflow в SAS. Постановка Workflow на расписание. Снятие с расписания.

Всем добрый день.

Сегодня хотел бы освятить вопрос по созданию Workflow в SAS. Постановки потока на расписание и также показать как убрать данный поток с расписания.

P.S. 
Хотел также отметить, что кнопка снять с расписания появилась лишь с версии SAS 9.3.
Если у Вас есть какие-либо вопросы задавайте.

Дирректория WORK

Сегодня проведем эксперимент по тому когда очищается директория WORK.

Для начала давайте узнаем директорию в которую сохраняются данные из библиотеки work, для этого запустите команду:

 proc options option=work;
 run;

И в логах вы увидите путь к папке.

Создадим простую таблицу и убедимся, что она находиться в нашей папке:

Теперь закроем нашу сессию и посмотрим что произойдет.

А произойдет ровно то, что наша папочка с табличкой исчезнет.

Следовательно наш work чиститься сразу после закрытия сессии.

А теперь сделать обрыв сессии, путем убийства процесса

Теперь войдем в папку где должна находиться наша директория work и мы обнаружим, что наша директория не удалилась.

P.S. Если у вас происходит отрубание сессии пользователя, то не надо сразу паниковать и говориться, что данные в Work очень важны и они уничтожены. Скорее всего все ваши таблички живы и хорошо себя чувствуют. Просто надо отыскать вашу директорию.

P.P.S. Из вышесказанного видно, что при разрыве сессий пользователей директория work не чистится и со временем может забиться!
На это надо также обращать внимание и периодически чистить старые данные.

SAS and Excel 2010. XLSX.

Всем добрый день.

Сегодня рассмотрим пример работы SAS с файлами расширения xlsx, т.е. excel 2010.

Все мы знаем, что  excel-2003 файлы обладали ограничением в 65 536 строк.

Так вот давайте проведем эксперимент и попробуем записать в excel 2 000 000 записей.

Сперва попробуем сделать export в xls файл и увидим следующее:

В результате мы видим, что сам SAS на указывает на ограничения количества строк.

Теперь попробуем сделать выгрузку в xlsx файл:

Мы видим, что выгрузка прошла успешна и заняла чуть больше минуты.

Теперь попробуем загрузить данные обратно в SAS через proc import:

И мы также видим, что все наши 2 миллиона записей отлично загрузились обратно в SAS за в два раза большее время чем export, т.е. за 3 минуты.

А теперь интересный момент:

давайте попробуем открыть наш xlsx файл из Excel и мы увидим следующее:

Во-первых файл будет открываться очень долго
Во-вторых мы не увидим там 2 000 000 записей, а всего 1 048 576 записей. Вот так вот.

P.S.
Изначально пример взят от сюда:
http://blogs.sas.com/content/sasdummy/2012/01/25/export-to-excel-got-easier/

Unrestricted user

Сегодня расскажу о небольшом cheat коде, как сделать пользователя Unrestricted, т.е. дать ему неограниченные права.

Весь фокус состоит в том, чтобы добавить пользователя в файл «adminUsers», который находиться в папке «SASHOMELev1SASMetaMetadataServer»

Если вы откроете данный файл, то увидите примерно следующее:

; This file contains a list of userids that, when connected
; to the SAS Metadata Server, are considered Administrators
; of the server.  Administrators have a number of special
; privileges including, but not limited to:
;     creating and deleting users
;     starting, stopping, and pausing the server
;     creating repositories
;
; Each line of this file contains a single UserID entry.
; The entries may be in the following forms: ‘userid’,
; ‘domainuserid’, and ‘userid@domain’.
; A semicolon at the beginning of a line indicates that the line is
; not to be processed.
;
;
*sasadm@saspw

Видно, что уже один пользователь в этом списке имеется, заданный при установке SAS — sasadm@saspw.

Если вы хотите еще добавить пользователя с безграничными правами, то вам следуют дописать ниже логин пользователя и вначале поставить *.  Пример:
*user1
*user2

После этого не забудьте перегрузить SAS Metadata Server, чтобы введенные изменения вступили в силу.

Данный способ хорош, когда вы забыв права доступа на sasadm@saspw неправильно ввели несколько раз пароль и заблокировали администратора тем самым.

Тогда вам поможет добавление еще одного unrestricted пользователя и с помощью него разблокирует sasadm@saspw.
Затем удалив пользователя из данного файла вы также легко вернете ему обычные права.

Преемственность версий SAS.

Странная картина наблюдается, когда вы пытаетесь подсоединиться через SAS Managment Console 9.3  или SAS Data Integration Stuido 4.4  к серверу SAS MetaData Server 9.2, а именно вы увидите следующее сообщение об ошибке:

Т.е из клиентов от SAS 9.3. вы не сможете подсоединиться к более старой версии SAS, а именно 9.2.

Обратное кстати не верно, т.е. из SAS Managment Console 9.2 и SAS Data Integration Stuido 4.2 вы сможете подсоединяться к SAS 9.3.

Таким образом при переходе на SAS 9.3 возможно на каких-то клиентских машинах потребуется переустанавливать клиентов SAS.

Кстати говоря SAS Enterprise Guide 5.1 отлично соединяться как с версией SAS 9.3, так и с версией SAS 9.2.