Обработка нестандартных пробелов

Привет!

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

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


Допустим, вам необходимо залить табличку из Excel, в которой присутствуют русские символы. Например такого типа:

У вас есть несколько вариантов, но самый простой это процедура IMPORT:
libname temp «sas-directory»;
proc import
            out= temp.example
            datafile= «табличка.xlsx»
            dbms= XLSX replace;
     sheet=»test»;
     getnames=yes;
run;

И вроде бы всё нормально, но мы встречаемся с тем в строке появились ненужные дополнительные символы, которые при записи выглядят как пробелы.
Вы возможно скажете, что trim(varname) нам поможет, но, к сожалению, это не так.

Попробуем разобраться, обратимся к получившейся табличке и запишем значения переменной и значение, получившееся после функции trim:
data _null_;
    set temp.example (obs=1);
    file ‘d:sas_exampletemp.txt’;
    put var;
    k = trim(var);
    put k;
run;

Результат в блокноте:

Для удаления этих пробелов существует такая замечательная функция COMPRESS.
Кто-то скажет, что надо просто сделать COMPRESS(var, ’09’x), так как пробелы соответствуют значению 09 в таблице кодов, но данные пробелы не соответствуют коду ’09’x.

Кстати, если бы нам надо было удалить все специальные символы (в данном случае речь идёт о символах юникода), то можно было просто воспользоваться параметрами функции COMPRESS(var, ,’kw’). Но нам надо удалить конкретные значения.

Сначала выясним, какие значения нам необходимо удалить, записав каждый символ и его код отдельно:
 data _null_;
    set temp.example (obs=1);
    file ‘d:sas_exampletemp.txt’;
    do i = 1 to length(var);
        b = substr(var, i, 1);
        a = put(b,$HEX2.);
        put b a ;
    end;
run;

Вот что мы обнаружили:

Оказывается, за этими пробелами стоят значения ’00’x. Теперь мы можем удалить их все через функцию с параметром COMPRESS(var, ’00’x).

Спасибо за прочтение и до свидания!

SAS Download Files from folder. Загрузка данных из файлов, находящихся в определенной папке.

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

В сегодняшнем уроке рассмотрим довольно практическую задачу загрузку информации из файлов, находящихся в определенном месте.

Этом может быть информация любого рода, например списки НБКИ или «черные» списки клиентов, списки террористов, и любого другого рода информация.

Задача: собрать все данные из разрозненных файлов в одну таблицу для последующего анализа и работы с ней.

И так в нашем случае имеется следующий набор csv файлов:

Хочу заметить, что в общем случае в папке могут находиться и не нужные нам файлы, как в нашем примере это файл garbage.txt.

Шаг 1:

На первом шаге загружаем список всех необходимых нам файлов в табличку:

При этом мы отбираем файлы по типу.

Получаем следующую табличку:

Как мы видим в ней перечислены все наши файлы.

Шаг 2:

На втором шаге делаем макрос, который будет обрабатывать наши файлы.
В моем случае макрос будет загружать данные в таблицу, а затем добавлять их (append) уже в главную таблицу:

При этом не можно докрутить макрос таким образом, чтобы он удалял после себя темповые таблицы и уже загруженные файлы!

Шаг 3:

На третьем шаге пишем наш основной макрос, который будет в цикле бегать по таблице с именами файлов и вызывать макрос загрузки данных из Шага 2.

Вот в принципе и все!

В результате мы получили загрузили данные из 4 файлов в одну таблицу (MainData)

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

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

SAS Lock Tables. Блокировка таблиц SAS. Part1

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

Сегодня урок будет посвящен насущной проблеме, а именно блокировок таблиц SAS при работе с ними.

Кто уже немного поработал с SAS, наверняка уже успел с этим столкнуться.

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

Честно говоря, проводя собеседования с SAS специалистами, я всегда задаю вопрос — «А как вы боретесь с блокировками таблиц?»

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

В дальнейшем будет продолжения данной статьи о том как данную проблему в принципе решают.

А пока я бы хотел получить ответ от Вас, дорогие читатели.

Думаю, почитать ответы будет полезно и Вам и мне.

До скорых встреч!

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