- PVSM.RU - https://www.pvsm.ru -
Возможно вы уже сталкивались с ситуаций, когда у вас есть программа написанная на python (таких программ может быть множество и написаны они могут быть вашими коллегами) и вам надо встроить этот запуск в программный код SAS.
Как же это сделать?
Итак, для этого воспользуемся следующим open-source инструментом с github [1]. Для начала скопируем SASJavaExec.java файл себе и скомпилируем его в jar файл. Важный момент: компилировать необходимо с помощью JDK 1.7_025, т.к. при использовании JDK 1.8 будет происходить ошибка в SAS коде.
1. Создаем классы: java -jar SASJavaExec.jar
2. Компилируем в jar файл: jar cfm SASJavaExec.jar manifest.txt SASJavaExec$1.class SASJavaExec.class
Где manifest.txt это файл из одной строки: Main-Class: SASJavaExec. Теперь у нас есть SASJavaExec.jar файл.
Далее нужно его прописать в настройках системы. Я запускал программу на Windows, поэтому в настройках среды нужно задать переменную CLASSPATH.
В моем случае это выглядело следующим образом:
Более подробно как можно это сделать можно посмотреть здесь [2].
После того как сделали все выше представленные шаги запускаем SAS.
Необходимо прописать следующие пути:
Путь к файлу python: %let PYTHON_EXEC_COMMAND = C:Python27python.exe;
Путь к вашей программе на python:
%let WORK_DIR = C:SAST_JavaExample;
python_pgm = "&WORK_DIR.digitsdata_svm.py";
После этого пишем исполняем код — Data set:
/*** Part I: Python ***/
data _null_;
length rtn_val 8;
*** Python program takes working directory as first argument;
python_pgm = "&WORK_DIR.digitsdata_svm.py";
python_arg1 = "&WORK_DIR";
python_call = cat('"', trim(python_pgm), '" "', trim(python_arg1), '"');
put python_pgm = ;
put python_arg1 =;
put python_call=;
declare javaobj j("SASJavaExec", "&PYTHON_EXEC_COMMAND", python_call);
j.callIntMethod("executeProcess", rtn_val);
run;
Далее запускаем нашу программу и смотрим лог выполнения:
python_pgm=C:SAST_JavaExampledigitsdata_svm.py
python_arg1=C:SAST_JavaExample
python_call="C:SAST_JavaExampledigitsdata_svm.py" "C:SAST_JavaExample"
27, 2016 6:36:39 AM SASJavaExec executeProcess
INFO: Executing [C:Python27python.exe, C:SAST_JavaExampledigitsdata_svm.py, C:SAST_JavaExample] ...
27, 2016 6:36:39 AM SASJavaExec executeProcess
INFO: Starting external process ...
27, 2016 6:36:39 AM SASJavaExec executeProcess
INFO: External process exit value 0.
Все в порядке, программа digitsdata_svm.py выполнилась из SAS.
Надеюсь данная статья была для Вас полезной.
P.S. Пример самой программы SAS был также взят c github ссылку на который указал вначале статьи.
Автор: Nikolay84
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/205255
Ссылки в тексте:
[1] github: https://github.com/sassoftware/enlighten-integration/tree/master/SAS_Base_OpenSrcIntegration
[2] здесь: http://support.sas.com/documentation/cdl/en/lrcon/68089/HTML/default/viewer.htm#n0swy2q7eouj2fn11g1o28q57v4u.htm
[3] Источник: https://habrahabr.ru/post/314268/?utm_source=habrahabr&utm_medium=rss&utm_campaign=sandbox
Нажмите здесь для печати.