TRANWRD, TRANSTRN функции и макропеременные

Всем привет!

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


Как вы наверное знаете, это можно сделать несколькими способами.

Я решил сделать так:
%let time = %sysfunc(TIME(),hhmm.);

В этом случае мы получим результат в виде hh:mm. Всё было бы отлично, если бы не одно но: система MS Windows не приемлет в названии файлов символы типа » : «.

Попробуем заменить двоеточие на значок нижнего подчёркивания » _ «.
Воспользуемся функцией TRANWRD (можно и TRANSTRN), синтаксис которой следующий:
TRANWRD(источник, что меняем, на что меняем)
Описание функции можно найти на официальном сайте.

Вставляем эту функцию в макрокод, как если бы вставляли в обычный код:
%let time = %sysfunc(tranwrd(%sysfunc(TIME(),hhmm.), «:» , «_»));
Но он не сработал, и результат остался тем же в формате hh:mm.

Так в чём же дело?
А дело в следующем:

  • В макрокоде нет необходимости использовать кавычки, а если они стоят, то они будут считаться частью текста. То есть, «:» — это 3 символа, которых нету в значении времени, а значит и нечего заменить.
  • Если есть необходимость заменить пробел, то в этом случае приходит на помощь %STR(letter), где на месте letter будет стоять пробел или любой другой символ, который необходимо заменить.

То есть, теперь код может выглядеть следующим образом:

%let time = %sysfunc(transtrn(%sysfunc(TIME(),hhmm.),: ,_));

или

%let time = %sysfunc(transtrn(%sysfunc(TIME(),hhmm.),%str(:) ,%str(_)));

На этом всё!
Спасибо за прочтение и до скорых встреч!

Еще один ресурс по SAS на просторах RU-нета

Всем привет,

Вчера, искал что есть в просторах нашего RU-нета по SAS и натолкнутся на интересный ресурс:

http://www.cityman.info/category/sas

Создатель сайта — Антон, в своем блоге рассматривает архитектурные стороны работы с SAS.

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

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

Студентам! Выдержки из интервью с Валерием Панкратовым или как SAS начал взращивать своих специалистов.

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

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

Ниже привожу выдержки из своего интервью с Валерием Панкратовым — главой компании SAS в России.

Я должен сказать – мы этим занялись серьёзно буквально два года назад. Мы поняли, что надо открывать академическую такую программу в МГУ. Мы взяли человека, возглавляющего программу в самом МГУ, он сам является доцентом на кафедре статистики, у него есть научные работы и он заинтересован не только в прикладном характере SAS, но и в определенном академическом смысле, когда математики что-то делают, в частности они должны обкатывать это на практических вещах. Он сам достаточно глубок в знании SAS, сам читает курсы SAS и он возглавляет одновременно академическую инициативу.
В принципе пробовали рассматривать какие-нибудь другие институты, университеты и некоторые из них действительно обучили своих преподавателей, но я не ставил бы на них основную ставку. Тут должен быть какой-то фокус, вот фокус мы поставили на МГУ.

— Пока только МГУ?

— Да. Бывает даже, что даже МФТИ-ники приходят. Мы думаем, что потенциально к этой программе, если действительно мы будем расти очень быстро, могут примкнуть МФТИ и высшая школа экономики, там и там курсы статистики хорошо читаются, там есть уже уклон на экономику, что важно, а в МФТИ там на столько хорошая база, что знания могут быть применены где угодно, что в ядерной физики, что в экономике.
……………………………………………………………………………………………………..
……………………………………………………………………………………………………..
……………………………………………………………………………………………………..
— Если студенты из других вузов (например физтех) захотят поучаствовать в вашей программе, что им для этого нужно сделать? У них есть такое сильное желание участвовать в вашей программе.

— У нас есть страничка в «Академической» нашей программе, там написано имя человек, который курирует данное направление, надо просто обратиться к нему, тот задаст ему несколько вопросов, чтобы просто убедиться, что это не пустая трата времени и если человек подходит, то будет сделан допуск ему в МГУ, пусть приезжает слушает, учится – не проблема. В принципе, если я понимаю, что ему не удобно в МГУ, но достаточно умный, то можем дать ему доступ к серверу, где он может посетить эти курсы удалённо. Это тоже возможно, но человек должен быть действительно очень сильным — без помощи внешней разобраться очень тяжело. 

P.S.
Полный текст интервью с Валерием Панкратовнам будет представлен в моей книге.

Передача макропеременных на сторону Oracle

Всем привет!

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


Допустим была создана макропеременная:
%let id = 1;

Сразу напомню, что макропеременная &id имеет тип char.

Далее мы хотим передать эту переменную в БД Oracle через pass through. В отличии от работы в SAS, кавычки не требуются.
proc sql noprint;
    connect to oracle as myora (user=»example» password=»example» path=example);
         execute (create table example (id number)) by myora;
         execute (insert into example values (&id)) by myora;
    disconnect from myora;
quit;

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

Но допустим, вам надо поместить это значение в какую-то процедуру?
Например, example.test(id as number).
proc sql noprint;
    connect to oracle as myora (user=»example» password=»example» path=example);
        execute (
            begin
                example.test(&d);
            end;       
            ) by myora;
    disconnect from myora;
quit;

И вроде бы всё нормально, но не происходит вызов процедуры, и не происходит ошибка Oracle.

Проблема опять же, на поверхности. В данном случае, требуется явно преобразовать тип данных, чтобы Oracle считал как необходимый нам тип. Делаем это функцией to_number.

proc sql noprint;
    connect to oracle as myora (user=»example» password=»example» path=example);
        execute (
            begin
                example.test(to_number(&sess_id));
            end;       
            ) by myora;
    disconnect from myora;
quit;

Всё! Спасибо за прочтение!
До скорых встреч!

Работаем с META библиотеками в SAS

Всем привет!

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


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

Я же хочу рассмотреть возможность подсоединяться к базе данных через универсальное подключение Meta Library.

Что это значит?

  1. Вам не надо знать имя пользователя, пароль или сид (path). 
  2. Вы не страдаете от переезда на новую базу.
  3. Администратор может разграничить права доступа.

 Для возможности подключения к мета библиотеке необходим Management Console. Создаём библиотеку:

 
После создания такой библиотеки можно использовать следующий код:
libname EXAMPLE meta libraryEXAMPLE META«;
Используя такой способ подключения к библиотекам будет использоваться логин пароль, который используется при работе в SAS. 
Но при работе в таком виде Вы возможно столкнетесь с рядом ошибок.
Например, при проблеме с доступом (записи) вам возможно придётся использовать дополнительный параметр metaout=data. Таким образом, код уже будет таким:
libname EXAMPLE meta libraryEXAMPLE META» metaout=data;
Ещё одна неявная проблема может возникнуть при недопустимых значениях логин пароль. То есть, если будет использоваться значения со служебными символами SAS, типа ‘, «, &. 
Удобного использования и до скорых встреч!