Об интервалах значений функции плотности вероятности

Всем добрый день.
Недавно Николай пригласил меня в этот блог и я решил написать свой первый пост. Сразу оговорюсь, что я не использую на данный момент SAS в своей работе (зато раньше использовал, несколько лет). Но тем не менее, продолжаю интересоваться новосятми о том, что делает SAS в области аналитики и data mining. В своих экспериментах я буду использовать язык R, который бесплатен и Open Source. Надеюсь про него будет интересно почитать и SAS программистам, тем более что в некоторых своих продуктах SAS предоставляет возможность вызова функций написанных на R.

 

Итак, в первом своем коротком сообщении я расскажу про необычное, на первый взгляд, поведение функции, вычисляющей Гауссову плотность вероятности в точке, при заданных значениях среднего и стандартного отклонения. Как известно, общий вид этой функции:

[ f( x | mu, sigma^2 ) = frac{1}{sigma sqrt{2 pi}} exp(-frac{1}{2} (frac{x-mu}{sigma})^2 ) ]

Интуитивно я все время думал, что раз уж речь идет о вероятности, то значение ну никак не может быть больше 1. Изначально, первый пост я хотел написать про Байесовые классификаторы, но он еще не окончен. Так вот, вычисляя условные вероятности, во время имплементации классификатора, я столкнулся с этим явлением, и стал искать ошибку, ну а потом провел простой эксперимент.

Чтобы посчитать плотность вероятность в точке, запишем функцию:

probability <- function(x, mu, sigma) {
p <- (1/(sigma * sqrt(2 * pi))) * exp(-0.5 * ((x - mu)/sigma)^2)
return(p)
}
probability(5.1, 5.06, 0.35)
## [1] 1.132

То же самое можно сделать проще, используя встроенную функцию:

dnorm(5.1, 5.06, 0.35)
## [1] 1.132

Оказывается это совсем не ошибка, а хорошо известная вещь. Картина проясняется, если вспомнить, что речь идет именно о плотности веротности, которая действительно может принимать значения больше единицы. На просторах интернета я нашел следующий поясняющий пример. Рассмотрим непрерывное равноемерное распределение на интервале ( [0, frac{1}{2}] ) с плотностью вероятности в каждой точке интервала равным ( 2 ) и ( 0 ) во всех остальных точках. Тогда интеграл от ( 0 ) до ( 2 ) равен ( 1 ), как того и требует определение.

Создание макропеременных через CALL SYMPUT

Всем привет!

Данная статья — это голая калька с другой статьи.

К сожалению, на habrahabr.ru нету как такого раздела или публикаций на тему SAS. И искать там что-либо оказывается затруднительным, если не знаешь, что искать =)
Данный же ресурс целиком и полностью предназначен для SAS пользователей.


Краткая предыстория проблемы, решение которой пришлось сначала искать самому.
Задача считать название файлов из директории и записать их в другую директорию.

filename read1 ftp » ls lsfile=’*.txt’ cd=»» &ftp;
data read1;
    length name $ 60;
    infile read1;
    input name $;
run;

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

Источник http://habrahabr.ru/post/142147/
За что автору большой плюс в его карму! =)

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

Тем, кто уже достаточно работает с этим языком, эти вещи покажутся элементарными, но для начинающих они, возможно, позволят избежать грабли, на которые я наступил в самом начале моего знакомства с SAS Base.

CALL SYMPUT

Call Symput используется для случаев, когда значение переменной в шаге данных (datastep) нужно присвоить макропеременной.
Синтаксис: call symput ("<макропеременная>", <символьное значение>)

Первый аргумент в процедуре symput — это название макропеременной, которой необходимо присвоить значение второго аргумента.

Второй аргумент — это символьное значение, которое будет присвоено макропеременной. Второй аргумент всегда должен быть именно символьным, в противном случае, численное значение должно быть конвертировано в символьную переменную, прежде чем присваивать его макропеременной. Если Вы не станете приводить тип, это может обернуться проблемами. В таком случае SAS автоматически конвертирует численное значение переменной в символьное значение, прежде чем присвоит его макропеременной, и выведет в лог сообщение о том, что было произведено конвертирование.

Пример:
data _null_;
count=1978;
call symput('count',count);
run;
%put &count;

19 data _null_;
20 count=1978;
21 call symput('count',count);
22 run;

NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column).
21:21
NOTE: DATA statement used (Total process time):
real time 0.00 seconds
cpu time 0.01 seconds

23 %put &count;
1978

Хоть значение макропеременной count и было определено как 1978, SAS выдал замечание, гласящее
NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column).
21:21

Чтобы избежать этого, Вам всё же стоит осуществить конвертирование численного значения в символьное, прежде чем присваивать его макропеременной. Вот, например, как это можно сделать:

data _null_;
count=1978;
call symput('count',strip(put(count,8.)));
run;
%put &count;

29 data _null_;
30 count=1978;
31 call symput('count',left(put(count,8.)));
32 run;

NOTE: DATA statement used (Total process time):
real time 0.00 seconds
cpu time 0.00 seconds

33 %put &count;
1978

Примечания:

  1. Несмотря на то, что мы создали переменную при помощи CALL SYMPUT, эта макропеременная не может быть использована напрямую в том же datastep’е. Причина такого явления — макро код компилируется и выполняется до того, как будет скомпилирован и выполнен datastep. Так что, макропеременная, создающаяся CALL SYMPUT, не будет доступна в datastep в силу того, что эта макропеременная будет создана и присвоена только после или во время выполнения кода datastep.
    (В случае, если Вам всё же понадобится доступ к той же макропеременной внутри datastep, Вы, разумеется, сумеете это сделать, при помощи двух разных макрофункций — RESOLVE или SYMGET)
  2. SAS всегда выравнивает численные значения по правому краю, что приводит к пробелам в начале символьной переменной при конвертации, если значение численной переменной было меньше её длины. Чтобы избавиться от этих пробелов, используйте функции, удаляющие все ведущие пробелы (как в примере выше).
  3. Если процедура CALL SYMPUT используется вне макроса (т.е. в открытом коде), она создаёт глобальную макропеременную, тогда как при использовании внутри макроса она создаст локальную.

CALL SYMPUTX

Процедура CALL SYMPUTX была анонсирована SAS в 9 версии с целью обойти ловушки CALL SYMPUT.
Преимущества CALL SYMPUTX перед CALL SYMPUT включают в себя:

  1. SYMPUTX автоматически конвертируют численные переменные в символьные перед присваиванием их макропеременной. (Вы больше не нуждаетесь в ручной конвертации при помощи выраждения PUT как в вышеприведённом примере)
  2. CALL SYMPUTX удаляет ведущие и хвостовые пробелы. Так что необходимость функций, наподобие STRIP или LEFT, для очистки от лишних пробелов, отпадает.

Синтаксис: call symputx ("<макропеременная>", <символьное значение>, <таблица символов>)

Первые два аргумента аналогичны аргументам CALL SYMPUT. Третий аргумент (таблица символов) опционален и может принимать значения G, L или F. Если Вы укажете G, макропеременная будет создана в глобальной таблице символов, если же Вы укажете L, SAS сохранит макропеременную в локальной таблице. Если третий аргумент не указывать или установить его как F, CALL SYMPUTX будет вести себя аналогично CALL SYMPUT.

Пример:
data _null_;
count=1978;
call symputx('count',count,’G’);
run;
%put &count;

29 data _null_;
30 count=1978;
31 call symputx('count',count,'G');
32 run;

NOTE: DATA statement used (Total process time):
real time 0.00 seconds
cpu time 0.00 seconds

33 %put &count;
1978

Примечание: Если бы Вы использовали CALL SYMPUT вместо CALL SYMPUTX, программа выполнилась бы идентично, но в лог было бы выдано замечание об автоматической конвертации численного значения в символьное.

Простой способ запомнить разницу между CALL SYMPUT и CALL SYMPUTX:
(взято со страницы Using_the_SAS_V9_CALL_SYMPUTX_Routine на SAScommunity.org)

Процедура SAS V9 CALL SYMPUTX позволяет Вам сэкономить нажатия клавиш и создать более компактный и понятный код.
Вместо использования
call symput('macrovar', trim(left(charvar)));
для создания макропеременной с символьной строкой, которая может содержать лишние пробелы, Вам стоит применить SYMPUTX:
call symputx('macrovar', charvar);

SAS Shedule X commands. Использование X команд в задачах, поставленных на расписание.

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

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

Для начала хотел бы чтобы вы попробовали это сделать самостоятельно и посмотрели что у Вас при этом получиться.

Я же в качестве примера буду запускать Job c кодом из предыдущего урока.

Далее данный Job будет запущен по расписанию из SAS Managment Console:

И мы увидим, что Job не отработал.  Причина этого кроется в том, что запуском задач по расписанию занимается Batch Server. А в нем также по умолчанию не предусмотрены разрешения на запуск X команд.
Для того чтобы это стало возможным нужно поправить файлик sasbatch_usermods следующим образом:
Теперь у вас все заработает.
Полностью урок представлен в ниже приложенном видео: 
С уважением,
Николай.

SAS Enterprise Guide and X commands. Иcпоспользование X и SYSTASK команд в SAS EG.

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

Сегодня урок будет посвящен использованию X и SYSTASK и SASEXEC команд в SAS Enterprise Guide.

Для начала попробуем запустить подобного роду команду: на примере копирования файла в другую папку:

Что будет если мы запустим данную команду?

Давайте посмотрим лог:

Мы видим, что вылезло предупреждение (warning) : Shell escape is not valid in this SAS session

Кстати, иногда данное сообщение выводиться в качестве ошибки:

ERROR: Shell escape is not valid in this SAS session.

Почему это происходит?

А дело здесь в том, что по умолчанию использование X команд запрещено.

Для того чтобы разрешить их использование нужно зайти в SAS Managment Console, далее в опции Workspace Server, далее в дополнительные опции и поставить галочку «Allow XCMD».
Теперь давайте запустим наш коде еще раз и посмотрим лог:
Вуаля! Наш код отработал.
Более подробно урок представлен в видеозаписи ниже:
С уважением,
Николай.

Книга по SAS. Part 2

Всем привет!

Работа над книгой идет полным ходом. Основной текст уже написан.

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

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

А пока возможный вариант обложки:

Да и чуть не забыл, уже есть один человек, кто получит от меня книгу — это Александр!

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

Настройка SFTP в SAS 9.2-9.3

Доброго времени суток, уважаемые читатели!

В этой статье речь пойдёт об использовании доступа к SFTP серверам через ключ авторизации.
Хочу сразу отметить, что способ подключения достаточно похож с FTP, но имеет ряд нюансов с которыми придётся столкнуться.


Во-первых, для доступа к SFTP потребуется полностью установленный клиент Putty.
Во-вторых, требуется прописать путь к тому же Putty в системной переменной PATH.
В-третьих, нужно знание (синтаксиса) команд, которые передаются через psftp.exe.

Итак, общая схема подключения к серверу SFTP аналогична с FTP.
Для этого используется следующая структура:
FILENAME fileref SFTP ‘external-file‘ <sftp-options>; 
Основные настройки можно прочитать тут.

Пример:
filename example sftp «name» cdpath» hosthostname»
      options = ‘optionsuserusername» debug;

К сожалению, этого куска кода не достаточно, чтобы работать с SFTP. Всё дело в том, что разобраться с параметром options требует немало времени. По крайней мере до версии SAS 9.4.
В этот параметр записываются значения, которые использует программа PSFTP.EXE из стандартного набора putty.

Теперь по порядку:

  1. Устанавливаем полный клиент Putty.
  2. Прописываем путь в системной переменной PATH. Например для Windows Server 2008, правой кнопкой по значку мой компьютер -> Advanced System Properties ->  Environment Variables. Далее ищем среди системных переменных PATH и добавляем после точки с запятой путь, куда был установлен PUTTY. 
  3. Теперь можно использовать опции для настройки подсоединения по SFTP:
    • -V        печатает версию и выходит
    • -pgpfp печатает PGP fingerprints и выходит
    • -b file   использует batch файл (*.bat)
    • -bc      выводит на экран команды из batch файла
    • -be       игнорирует ошибки работы batchfile
    • -v        выводит подробные сообщения (лог)
    • -load sessname  использует данные предыдущей sessname (подключения)
    • -l user   соединение по определённому пользователю
    • -P port   соединение по определённому порту  
    • -pw passw соединение по определённому паролю 
    • -1 -2     использование SSH протокола версии 1 или 2
    • -4 -6     использование IPv4 или IPv6
    • -C       использование компрессии
    • -i key    private key для аутентификации 
    • -noagent  запрет использования Pageant  
    • -agent    использование Pageant  
    • -batch    запрет на любые интерактивные запросы

В итоге, приведу пример кода, если вы используете аутентификацию по ключу, подсоединяетесь по имени пользователя и определённому порту.
Пример кода для параметра options:

options =   ‘-P 666
                    -i c:private.ppk
                    -pw password’

Важно: ключевые  параметры (типа -P) чувствительны к регистру!!

Надеюсь, что статья оказалась полезна!
До скорых встреч!

Книга по SAS. Уже скоро….

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

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

Книга будет насчитана на широкий круг читателей, однако особенно она будет полезна тем, кто работает с продуктами SAS.

Тем кто даст обратную связь по содержанию книги, так же по названию книга будет предоставлена бесплатно в электронном виде!

И так, представляю Вам, содержание книги:

Введение
1.       Добро пожаловать в SAS
1)      Что может SAS?
2)      Почему многие клиенты выбирают именно решения на продуктах SAS?
3)      Top3 областей в которых SAS не силен.
4)      В чем отличие лицензионной политики SAS от других вендоров?
2.       Архитектура SAS
1)      Три основные архитектурных слоя в SAS, которые Вы должны знать
2)      Top 7 задач, которые выполняет Metadata Server
3)      Для чего нужен Stored Process Server?
4)      Work Space Server и для чего он нужен?
5)      Задачи Batch Server-a
6)      3 способа поставить Ваши задачи на расписание.
7)      Top  7 задач SAS Deployment Manager
8)      Что делать если вы столкнулись с проблемой ответа на который вы не смогли найти в Google?
9)      Как получить права unrestricted user?
10)   Как обновить Вашу систему?
                                                               i.      Как понять какие Hotfixes Вам нужны?
                                                             ii.      Как накатить, полученные Hotfixes?
3.       Работа с внешними Базами Данных в SAS
1)      С какими БД умеет работать SAS
2)      Что такое SAS Access и для чего он нужен?
3)      Как использовать Oracle Hints в SAS?
4)      Можно ли использовать PLSQL код?
4.       А что Вы знаете о клиентских приложения SAS?
1)      SAS Management Console
                                                               i.      Как создать библиотеку?
                                                             ii.      Как зарегистрировать пользователя?
                                                            iii.      Как добавить новый Сервер?
                                                           iv.      Как удалить зависшую пользовательскую сессию?
2)      SAS Data Integration Studio
                                                               i.      Для чего нужен DIS?
                                                             ii.      Как создать свой job?
                                                            iii.      Как поставить на расписание работающий job?
                                                           iv.      Обзор инструментов.
3)      SAS  Enterprise Guide
                                                               i.      Основной инструмент пользователя
                                                             ii.      Для чего нужен SAS EG?
4)      Что делать если вы не смогли найти нужное вам клиентское приложение SAS?
5.       SAS9.4 или что нас ждет в ближайшем будущем!
1)      Top 10 изменений
2)      Что такое DS2 или нужно ли изучать язык сначала?
3)      Top 3 новых функций.
4)      Параллельное выполнение программы. Наконец-то!
6.       FAQTop 7 вопросов.
1)      Что входит в Вашу лицензию?
2)      Что делать если таблица SAS заблокирована?
3)      Как зашифровать пароли?
4)      Как выгрузить данных в Excel 2010?
5)      Hotkeys. Как увеличить скорость работы в SAS EG, используя горячие клавиши?
6)      Что делать если Ваша сессия аварийно закрылась? Есть ли шанс спасти Ваши данные?
7)      Как посмотреть структуру таблиц?

Заключение
UPD: предложение о получении книги действует до 01 ноября 2013 г.

SAS Unlocked table in Windows. Как разлочить табличку SAS? Part2

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

Сегодня будет продолжение темы залоченных таблицы, начатую здесь!

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

И в этом нам поможет программа Unlocker.

Смотрите видео:

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

Интересные и полезные статьи про Ваш опыт работы с продуктами SAS.

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

Обращаюсь к тем, кто читает работает с продуктами SAS и уже имеет в своем багаже многочисленный опыт и «фишки», которыми готов поделиться с такими же как Вы пользователями.

Вы можете стать авторами интереснейших и полезнейших статей на sas-education и тем самым помочь многим пользователям в их нелегком освоении продуктов SAS.

Хотел бы поблагодарить своего коллегу Сергея, который также делиться своим опытом, за его первую статью.

Если у Вас есть желание поделиться своим опытом на страницах этого блога — прошу обращаться.
Вы будите добавлены в авторы блога и сможете писать свои статьи. Либо можете присылать статьи мне, Ваши статьи будут выложены с обязательным упоминанием авторства.

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

Exprot to Excel 2010 from SAS Enterprise Guide 5.1. Экспорт данных в Excel 2010 (2007).

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

Сегодня речь пойдет о выгрузки данных в Excel 2010 (Excel 2007) в формате xlsx.

На самом деле уже был урок посвященный выгрузке в exel здесь.

Однако часть пользователей все же хотела бы использовать для этих целей именно SAS Enterprise Guide.

Поэтому ниже в видео ролики рассказывается как это сделать на продукте SAS Enterprise Guide 5.1.

До скорых встреч на страницах sas-education.

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