<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Tradutor de codigo de scoragem de SAS para Python (e R) in Forum em português</title>
    <link>https://communities.sas.com/t5/Forum-em-portugu%C3%AAs/Tradutor-de-codigo-de-scoragem-de-SAS-para-Python-e-R/m-p/762949#M547</link>
    <description>&lt;DIV class="lia-message-template-content-zone"&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;
&lt;P&gt;Olá pessoal,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Modelos anlíticos vem em vários formatos, tamanhos e, complexidades. Um uso comum do software do SAS é utilizá-lo para para manejar o ciclo de vidas de modelos. Entretanto, reconhecemos que nem sempre este é o caso. Você pode precisar utilizar as saídas do SAS fora do SAS. Seja criando modelos em Python ou R e colocando em produção no SAS ou criando modelos no SAS e utilizá-los em outro lugar.&lt;BR /&gt;&lt;BR /&gt;Para ajudar no último caso, estou aqui para apresentá-los aos mais novos pacotes Open Source para Python, &lt;A href="https://github.com/sassoftware/sas-scoring-translator-python" target="_self"&gt;sas-scoring-translator-python (&lt;/A&gt;pysct), e para o R, &lt;A href="https://github.com/sassoftware/sas-scoring-translator-r" target="_self"&gt;sas-scoring-translator-r&lt;/A&gt;&amp;nbsp;(rsct), que traduz os "scoring codes" do SAS para estas linguagens. Isso facilita o uso de modelos SAS na sua aplicação (ou caso você queira aprender um pouco mais como o pacote&amp;nbsp; &lt;A href="https://github.com/sassoftware/python-swat" target="_self"&gt;SWAT&lt;/A&gt; funciona). Estas ferramentas estão disponíveis no&amp;nbsp;&lt;A href="https://github.com/sassoftware" target="_self"&gt;sassoftware GitHub&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="5"&gt;Obtendo o código de escoragem SAS&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;A essa altura vocês já devem saber que o SAS possui várias interfaces que ajudam a criar modelos (que podem até serem feitos para você através do &lt;A href="https://blogs.sas.com/content/subconsciousmusings/2020/05/15/web-application-sas-automl/" target="_self"&gt;Auto ML&lt;/A&gt;). E, claro, depois de criar seus fabulosos modelos, você quer utilizá-los, o que você poderia fazer então? &lt;EM&gt;Exportar o código de escoragem, é claro.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Primeiramente, no Model Studio (SAS Viya), vá até "Pipeline Comparison", como pode assinala a imagem abaixo.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ehellas_0-1628112063250.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/62270iD0AAA72C751034C7/image-size/large?v=v2&amp;amp;px=999" role="button" title="ehellas_0-1628112063250.png" alt="ehellas_0-1628112063250.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Em seguida, selecione um dos seus modelos, (que não precisa estar registrado ou publicado), e exporte o código de escoragem.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ehellas_1-1628112153522.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/62271i1ABAFA61778FE484/image-size/large?v=v2&amp;amp;px=999" role="button" title="ehellas_1-1628112153522.png" alt="ehellas_1-1628112153522.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Você irá baixar um arquivo zip com o seu código de escoragem SAS (guarde o nome&amp;nbsp;&lt;STRONG&gt;dmcas_epsscorecode.sas&amp;nbsp;&lt;/STRONG&gt;por enquanto, vamos utilizá-lo mais tarde).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ehellas_4-1628112310660.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/62274i7E282B697B4CC3A3/image-size/large?v=v2&amp;amp;px=999" role="button" title="ehellas_4-1628112310660.png" alt="ehellas_4-1628112310660.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Você não precisas descompactar o arquivo (unzip), mas, se você olhar o que tem dentro vai encontrar alguns arquivos &lt;STRONG&gt;.sas&lt;/STRONG&gt;&amp;nbsp;parecido com o exemplo abaixo, que vai depender do modelo que você vai utilizar.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;/*
* This score code file references one or more analytic stores that are located in the caslib "Models".
* This score code file references the following analytic-store tables:
* _28LWD4IVTS9I294A6F893FNBY_ast
*/
/*----------------------------------------------------------------------------------*/
/* Product: Visual Data Mining and Machine Learning */
/* Release Version: V2021.1.1 */
/* Component Version: V2020.1.5 */
/* CAS Version: V.04.00M0P05162021 */
/* SAS Version: V.04.00M0P051621 */
/* Site Number: 70180938 */
/* Host: sas-cas-server-default-client */
/* Encoding: utf-8 */
/* Java Encoding: UTF8 */
/* Locale: en_US */
/* Project GUID: f8b37e46-c893-4cf5-8183-0802c729b1b0 */
/* Node GUID: 25d24897-fad4-4e1d-bc94-1a7d93340ade */
/* Node Id: 28LWD4IVTS9I294A6F893FNBY */
/* Algorithm: Gradient Boosting */
/* Generated by: sasdemo */
/* Date: 26JUL2021:19:12:08 */
/*----------------------------------------------------------------------------------*/
data sasep.out;
dcl package score _28LWD4IVTS9I294A6F893FNBY();
dcl double "P_BAD1" having label n'Predicted: BAD=1';
dcl double "P_BAD0" having label n'Predicted: BAD=0';
dcl nchar(32) "I_BAD" having label n'Into: BAD';
dcl nchar(4) "_WARN_" having label n'Warnings';
dcl double EM_EVENTPROBABILITY;
dcl nchar(12) EM_CLASSIFICATION;
dcl double EM_PROBABILITY;
varlist allvars [_all_];

method init();
_28LWD4IVTS9I294A6F893FNBY.setvars(allvars);
_28LWD4IVTS9I294A6F893FNBY.setkey(n'C08002467175AC235F1C68321869975F6170F229');
end;

method post_28LWD4IVTS9I294A6F893FNBY();
dcl double _P_;

if "P_BAD0" = . then "P_BAD0" = 0.8005033557;
if "P_BAD1" = . then "P_BAD1" = 0.1994966443;
if MISSING("I_BAD") then do ;
_P_ = 0.0;
if "P_BAD1" &amp;gt; _P_ then do ;
_P_ = "P_BAD1";
"I_BAD" = ' 1';
end;
if "P_BAD0" &amp;gt; _P_ then do ;
_P_ = "P_BAD0";
"I_BAD" = ' 0';
end;
end;
EM_EVENTPROBABILITY = "P_BAD1";
EM_CLASSIFICATION = "I_BAD";
EM_PROBABILITY = MAX("P_BAD1", "P_BAD0");

end;

method run();
set SASEP.IN;
_28LWD4IVTS9I294A6F893FNBY.scoreRecord();
post_28LWD4IVTS9I294A6F893FNBY();
end;

method term();
end;

enddata;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Até então tudo certo, desde que você saiba utilizar códigos SAS. Entretanto, se você não souber, ou caso queira escorar tabelas utilizando todo o poder de processamento distribuído do SAS Viya através do R ou Python, um código SAS apenas não te ajuda exatamente. Claro, você poderia usar o&amp;nbsp;&lt;A href="https://github.com/sassoftware/python-swat" target="_self"&gt;SWAT&lt;/A&gt;&amp;nbsp; e fazer toda a tradução manualmente, mas isso não seria nada eficiente.&amp;nbsp;&lt;STRONG&gt;E é para isso que estamos aqui!&lt;/STRONG&gt; O&amp;nbsp;&lt;A href="https://github.com/sassoftware/sas-scoring-translator-python" target="_self"&gt;pysct&lt;/A&gt; - Python Scoring Code Translator (e&amp;nbsp;&lt;A href="https://github.com/sassoftware/sas-scoring-translator-r" target="_self"&gt;rsct&lt;/A&gt;) vão te ajudar. Ele vai ler o arquivo zip e traduzir para você, vamos dar uma olhada.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Vamos começar com Python, mas caso esteja interessado apenas em R, sinta-se a vontade para pular até a sessão do R.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="5"&gt;Python Scoring Code Translator&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Primeiramente, vamos instalar o pacote a partir do GitHub do SAS:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="shell"&gt;## Instale direto do github caso ainda não o tenha
pip install git+https://github.com/sassoftware/sas-scoring-translator-python.git&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;A ferramenta é bem direta e fácil de utilizar. Olhe a tabela de referência, de onde seu modelo veio e o tipo do cógido de escoragem. No nosso exemplo nos fizemos um modelo através do Model Studio, e, o tipo de código de escoragem é o nome que destaquei mais cedo, &lt;STRONG&gt;dmcas_epscorecode.sas. &lt;/STRONG&gt;Com isso, a função que utilizaremos é a&amp;nbsp;&lt;EM&gt;EPS_translate()&lt;/EM&gt;. Outras combinações de modelos e tipo de código de escoragem estão definidos na tabela a seguir:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="1000"&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH align="left" width="166.333px" height="19px"&gt;Interface&lt;/TH&gt;
&lt;TH align="left" width="243.483px" height="19px"&gt;Code Type&lt;/TH&gt;
&lt;TH align="left" width="293.583px" height="19px"&gt;Base File Name&lt;/TH&gt;
&lt;TH align="left" width="295.6px" height="19px"&gt;Translation Function&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="166.333px" height="30px" align="left"&gt;Model Studio&lt;/TD&gt;
&lt;TD width="243.483px" height="30px" align="left"&gt;DataStep&lt;/TD&gt;
&lt;TD width="293.583px" height="30px" align="left"&gt;dmcas_scorecode.sas&lt;/TD&gt;
&lt;TD width="295.6px" height="30px" align="left"&gt;&lt;CODE&gt;pysct.DS_translate()&lt;/CODE&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="166.333px" height="30px" align="left"&gt;Model Studio&lt;/TD&gt;
&lt;TD width="243.483px" height="30px" align="left"&gt;DS2&lt;/TD&gt;
&lt;TD width="293.583px" height="30px" align="left"&gt;dmcas_epscorecode.sas&lt;/TD&gt;
&lt;TD width="295.6px" height="30px" align="left"&gt;&lt;CODE&gt;pysct.EPS_translate()&lt;/CODE&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="166.333px" height="30px" align="left"&gt;Visual Text Analytics&lt;/TD&gt;
&lt;TD width="243.483px" height="30px" align="left"&gt;Sentiment - CAS Procedure&lt;/TD&gt;
&lt;TD width="293.583px" height="30px" align="left"&gt;scoreCode.sas&lt;/TD&gt;
&lt;TD width="295.6px" height="30px" align="left"&gt;&lt;CODE&gt;pysct.nlp_sentiment_translate()&lt;/CODE&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="166.333px" height="30px" align="left"&gt;Visual Text Analytics&lt;/TD&gt;
&lt;TD width="243.483px" height="30px" align="left"&gt;Categories - CAS Procedure&lt;/TD&gt;
&lt;TD width="293.583px" height="30px" align="left"&gt;scoreCode.sas&lt;/TD&gt;
&lt;TD width="295.6px" height="30px" align="left"&gt;&lt;CODE&gt;pysct.nlp_category_translate()&lt;/CODE&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="166.333px" height="30px" align="left"&gt;Visual Text Analytics&lt;/TD&gt;
&lt;TD width="243.483px" height="30px" align="left"&gt;Topics - CAS Procedure&lt;/TD&gt;
&lt;TD width="293.583px" height="30px" align="left"&gt;AstoreScoreCode.sas&lt;/TD&gt;
&lt;TD width="295.6px" height="30px" align="left"&gt;&lt;CODE&gt;pysct.nlp_topics_translate()&lt;/CODE&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="166.333px" height="10px" align="left"&gt;Visual Text Analytics&lt;/TD&gt;
&lt;TD width="243.483px" height="10px" align="left"&gt;Concepts - CAS Procedure&lt;/TD&gt;
&lt;TD width="293.583px" height="10px" align="left"&gt;ScoreCode.sas&lt;/TD&gt;
&lt;TD width="295.6px" height="10px" align="left"&gt;&lt;CODE&gt;pysct.nlp_concepts_translate()&lt;/CODE&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;E, com apena a código a seguir, você já terá tudo o que precisa. No nosso exemplo, veja o código:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;# importando a biblioteca
import pysct

out = pysct.EPS_translate(
            in_file = "C:/score_code_Gradient Boosting.zip",  ## caminho do seu .zip (sim, .zip compactado, não precisa se preocupar)
            out_caslib = "casuser",                           ## Nome da caslib da tabela de saída (depois dos dados escorados)
            out_castable = "hmeq",                            ## Nome da tabela de saida (depois dos dados escorados)
            in_caslib = "public",                             ## Nome da caslib onde a tabela a ser escorada está
            in_castable = "hmeq",                             ## Nome da tabela a ser escorada
            copyVars="ALL",                                   ## por padrão, o SAS retorna apenas o resultados, utilize "ALL" caso queira copiar todas as variáveis, ou omita caso contrário
            out_file="gradientBoosting.py"                    ## caminho de saída do arquivo python)

out.keys()&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Exemplo do output:&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;The file was successfully written to gradientBoosting.py

dict_keys(['ds2_raw', 'py_code', 'out_caslib', 'out_castable', 'out_file'])&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Por padrão, o pysct escreve o arquivo no seu diretório atual. Todo o código pode ser encontrado no objeto&amp;nbsp;&lt;CODE class=" language-sas"&gt;out&lt;/CODE&gt;&amp;nbsp;no caso de querer mais detalhes. Mas agora vamos dar uma olhada no código gerado, o&amp;nbsp;&lt;CODE class=" language-sas"&gt;gradientBoosting.py&lt;/CODE&gt;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;## SWAT package needed to run the codes, below the packages in pip and conda
# documentation: https://github.com/sassoftware/python-swat/
# pip install swat
# conda install -c sas-institute swat

import swat

## Defining tables and models variables
in_caslib = "public"
in_castable = "hmeq"
out_caslib = "casuser"
out_castable = "hmeq"
astore_name = "_28LWD4IVTS9I294A6F893FNBY_ast"
astore_file_name = "_28LWD4IVTS9I294A6F893FNBY_ast.sashdat"

## Connecting to SAS Viya
conn = swat.CAS(hostname = "myserver.com", ## change if needed
                port = 8777,
                protocol='http',  ## change protocol to cas and port to 5570 if using binary connection (unix)
                username='username', ## use your own credentials
                password='password') ## we encorage using .authinfo 


## Loading model to memory
## assuming the model is already inside the viya server

conn.table.loadTable(caslib= "Models",
                      path = astore_file_name, #case sensitive
                      casOut = {"name": astore_name,
                                "caslib": "Models"}
                                )

score_table = conn.CASTable(name = in_castable,
                            caslib = in_caslib
                                )

column_names = score_table.columns.tolist()


## loading astore actionset and scoring
conn.loadActionSet("astore")

conn.astore.score(table = {"caslib": in_caslib, "name": in_castable},
                   out = {"caslib": out_caslib, "name": out_castable, "replace": True},
                   copyVars = column_names,
                   rstore = {"name": astore_name, "caslib": "Models"}
              )

## Obtaining output/results table
scored_table = conn.CASTable(name = out_castable,
                              caslib = out_caslib)
                              
scored_table.head()&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;E a mágica está feita, você precisa apenas editar a conexão (&lt;CODE class=" language-sas"&gt;swat.CAS&lt;/CODE&gt;) com as suas credencias e do seu servidor, e o seu código está pronto para ser usado no Python.&lt;/P&gt;
&lt;P&gt;Apesar de utilizar alguns valores padrões (ou copiar do código SAS original), você pode alterar para ajustar ao seu caso, mas agora você já tem uma boa ideia de como começar a criar ótimas integrações.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;&lt;FONT size="5"&gt;R Scoring Code Translator&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;&lt;BR /&gt;Se você leu a sessão do Python, não há muitas mudanças, apenas na sintaxe. Preparem suas&amp;nbsp;&lt;STRONG&gt;&lt;FONT face="courier new,courier"&gt;&amp;lt;-&lt;/FONT&gt;&lt;/STRONG&gt;&amp;nbsp;!&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;Primeiramente, vamos instalar o pacote do GitHub do SAS (não está disponível no CRAN).&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;&lt;LI-CODE lang="r"&gt;# Como o pacote não está disponível no CRAN, você deve instalá-lo a partir do git 
# recomendamos utilizar o pacote remotes
# install.packages("remotes") # descomente em caso não o tenha instalado

remotes::install_github("sassoftware/sas-scoring-translator-r")  
&lt;/LI-CODE&gt;&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;Para saber exatamente qual função utilizar, utilize a tabela de referência para comparar de onde tirou seu modelo, e qual é o tipo do código de escorage. No nosso exemplo, o modelo foi feito no Model Studio, e o tipo do código é o que pedi para guardarem mais cedo,&amp;nbsp;&lt;STRONG&gt;dmcas_epscorecode.sas . &lt;/STRONG&gt;Assim, basta utilizar a função&amp;nbsp;&lt;EM&gt;EPS_translate().&lt;/EM&gt;&amp;nbsp;Outras combinações estão descritas na tabela a seguir.&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;
&lt;TABLE width="1000"&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH align="left" width="155.6px"&gt;Interface&lt;/TH&gt;
&lt;TH align="left" width="212.383px"&gt;Code Type&lt;/TH&gt;
&lt;TH align="left" width="188.017px"&gt;Base File Name&lt;/TH&gt;
&lt;TH align="left" width="219px"&gt;Translation Function&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="155.6px" align="left"&gt;Model Studio&lt;/TD&gt;
&lt;TD width="212.383px" align="left"&gt;DataStep&lt;/TD&gt;
&lt;TD width="188.017px" align="left"&gt;dmcas_scorecode.sas&lt;/TD&gt;
&lt;TD width="219px" align="left"&gt;&lt;CODE&gt;DS_translate()&lt;/CODE&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="155.6px" align="left"&gt;Model Studio&lt;/TD&gt;
&lt;TD width="212.383px" align="left"&gt;DS2&lt;/TD&gt;
&lt;TD width="188.017px" align="left"&gt;dmcas_epscorecode.sas&lt;/TD&gt;
&lt;TD width="219px" align="left"&gt;&lt;CODE&gt;EPS_translate()&lt;/CODE&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="155.6px" align="left"&gt;Visual Text Analytics&lt;/TD&gt;
&lt;TD width="212.383px" align="left"&gt;Sentiment - CAS Procedure&lt;/TD&gt;
&lt;TD width="188.017px" align="left"&gt;scoreCode.sas&lt;/TD&gt;
&lt;TD width="219px" align="left"&gt;&lt;CODE&gt;nlp_sentiment_translate()&lt;/CODE&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="155.6px" align="left"&gt;Visual Text Analytics&lt;/TD&gt;
&lt;TD width="212.383px" align="left"&gt;Categories - CAS Procedure&lt;/TD&gt;
&lt;TD width="188.017px" align="left"&gt;scoreCode.sas&lt;/TD&gt;
&lt;TD width="219px" align="left"&gt;&lt;CODE&gt;nlp_category_translate()&lt;/CODE&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="155.6px" align="left"&gt;Visual Text Analytics&lt;/TD&gt;
&lt;TD width="212.383px" align="left"&gt;Topics - CAS Procedure&lt;/TD&gt;
&lt;TD width="188.017px" align="left"&gt;AstoreScoreCode.sas&lt;/TD&gt;
&lt;TD width="219px" align="left"&gt;&lt;CODE&gt;nlp_topics_translate()&lt;/CODE&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="155.6px" align="left"&gt;Visual Text Analytics&lt;/TD&gt;
&lt;TD width="212.383px" align="left"&gt;Concepts - CAS Procedure&lt;/TD&gt;
&lt;TD width="188.017px" align="left"&gt;ScoreCode.sas&lt;/TD&gt;
&lt;TD width="219px" align="left"&gt;&lt;CODE&gt;nlp_concepts_translate()&lt;/CODE&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;E, com algumas linhas, conseguimos traduzir o nosso código, sem nem precisar descompactá-lo.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="r"&gt;## Carregando o pacote
library("rsct")

output_infos &amp;lt;- EPS_translate(in_file = "C:/score_code_Gradient Boosting.zip",  ## caminho do seu .zip (sim, .zip compactado, não precisa se preocupar)
                              out_caslib = "casuser",                     ## Nome da caslib da tabela de saída (depois dos dados escorados)
                              out_castable = "hmeq_scored",               ## Nome da tabela de saida (depois dos dados escorados)
                              in_caslib = "public",                       ## Nome da caslib onde a tabela a ser escorada está
                              in_castable = "hmeq",                       ## Nome da tabela que a ser escorarada
                              copyVars = "ALL",                           ## por padrão, o SAS retorna apenas o resultados, utilize "ALL" caso queira copiar todas as variáveis, ou omita caso contrário
                              out_file = "gb_translated.R"                ## caminho de saída do arquivo R
)

names(output_infos)&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Exemplo do output:&lt;/P&gt;
&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;&lt;LI-CODE lang="r"&gt;File successfully written to gb_translated.R

[1] "r_code"       "out_file"     "out_caslib"   "out_castable"&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;O arquivo&amp;nbsp;&lt;CODE class=" language-sas"&gt;gb_translated.R&lt;/CODE&gt; foi salvo no diretório padrão de sua sessão, mas você poderia também utilizar um caminho completo. O objeto&amp;nbsp;&lt;CODE class=" language-sas"&gt;output_infos&lt;/CODE&gt; é uma lista com detalhes da tradução, caso você precise utilizar em outro lugar. E esse é o código gerado:&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;&lt;LI-CODE lang="r"&gt;## install swat package from github if needed, uncomment OS version
# install.packages('https://github.com/sassoftware/R-swat/releases/download/v1.6.1/R-swat-1.6.1-linux64.tar.gz',repos=NULL, type='file') ## linux
# install.packages('https://github.com/sassoftware/R-swat/releases/download/v1.6.1/R-swat-1.6.1-win64.tar.gz',repos=NULL, type='file') ## windows
# install.packages('https://github.com/sassoftware/R-swat/releases/download/v1.6.1/R-swat-1.6.1-REST-only-osx64.tar.gz',repos=NULL, type='file') ## osx

## Load library
library("swat")

## Defining tables and models variables
in_caslib &amp;lt;- "public"
in_castable &amp;lt;- "hmeq"
out_caslib &amp;lt;- "casuser"
out_castable &amp;lt;- "hmeq_scored"
astore_name &amp;lt;- "_28LWD4IVTS9I294A6F893FNBY_ast"
astore_file_name &amp;lt;- "_28LWD4IVTS9I294A6F893FNBY_ast.sashdat"

## Connecting to SAS Viya
conn &amp;lt;- CAS(hostname = "myserver.com", ## change if needed
						port = 8777,
						protocol='http',  ## change protocol to cas and port to 5570 if using binary connection (unix)
						username='sasusername', ## use your own credentials
						password='password') ## we encorage using  .authinfo

## Loading model to memory
cas.table.loadTable(conn,
                      caslib= "Models",
                      path = astore_file_name , #case sensitive
                      casOut = list(name = astore_name,
                                    caslib = "Models")
              )

## Defining scoring table obtaining column names
score_table &amp;lt;- defCasTable(conn,
                             tablename = in_castable,
                             caslib = in_caslib)

column_names &amp;lt;- names(score_table)

## loading astore actionset and scoring
loadActionSet(conn, "astore")

cas.astore.score(conn,
                   table = list(caslib= in_caslib, name = in_castable),
                   out = list(caslib = out_caslib, name = out_castable, replace = TRUE),
                   copyVars = column_names,
                   rstore = list(name = astore_name, caslib = "Models")
              )

## Obtaining output/results table
scored_table &amp;lt;- defCasTable(conn,
                            tablename = out_castable,
                            caslib = out_caslib)

head(scored_table)&lt;/LI-CODE&gt;&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;Como você pode notar, está quase pronto para ser utilizado, só falta editar a conexão com o CAS&amp;nbsp;(usando&amp;nbsp;&lt;CODE class=" language-sas"&gt;CAS&lt;/CODE&gt;) com suas credencias e do seu servidor, e seu código está pronto para ser usado diretamente no R. Você pode fazer as alterações que precisar, mas é uma ótima maneira de começar a entender como SAS e Open Source podem trabalhar juntos.&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;&lt;FONT size="5"&gt;Conclusão&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;Quanto antes concordarmos que não é uma questão de Python, R &lt;STRONG&gt;ou&lt;/STRONG&gt;&amp;nbsp;SAS, mas sim &lt;STRONG&gt;com&lt;/STRONG&gt;&amp;nbsp;SAS, mais rápido podemos criar soluções integradas. Eu realmente espero que essas ferramentas possam ser úteis e interessantes para vocês. E é claro, vamos continuar melhorando estes pacotes e criando mais, especialmente se soubermos que vocês estão utilizando. Qualquer report de bug ou pedidos podem ser feitos no GitHub. Vamos continuar melhorando todas as formas de integração.&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;</description>
    <pubDate>Fri, 20 Aug 2021 19:50:50 GMT</pubDate>
    <dc:creator>ehellas</dc:creator>
    <dc:date>2021-08-20T19:50:50Z</dc:date>
    <item>
      <title>Tradutor de codigo de scoragem de SAS para Python (e R)</title>
      <link>https://communities.sas.com/t5/Forum-em-portugu%C3%AAs/Tradutor-de-codigo-de-scoragem-de-SAS-para-Python-e-R/m-p/762949#M547</link>
      <description>&lt;DIV class="lia-message-template-content-zone"&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;
&lt;P&gt;Olá pessoal,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Modelos anlíticos vem em vários formatos, tamanhos e, complexidades. Um uso comum do software do SAS é utilizá-lo para para manejar o ciclo de vidas de modelos. Entretanto, reconhecemos que nem sempre este é o caso. Você pode precisar utilizar as saídas do SAS fora do SAS. Seja criando modelos em Python ou R e colocando em produção no SAS ou criando modelos no SAS e utilizá-los em outro lugar.&lt;BR /&gt;&lt;BR /&gt;Para ajudar no último caso, estou aqui para apresentá-los aos mais novos pacotes Open Source para Python, &lt;A href="https://github.com/sassoftware/sas-scoring-translator-python" target="_self"&gt;sas-scoring-translator-python (&lt;/A&gt;pysct), e para o R, &lt;A href="https://github.com/sassoftware/sas-scoring-translator-r" target="_self"&gt;sas-scoring-translator-r&lt;/A&gt;&amp;nbsp;(rsct), que traduz os "scoring codes" do SAS para estas linguagens. Isso facilita o uso de modelos SAS na sua aplicação (ou caso você queira aprender um pouco mais como o pacote&amp;nbsp; &lt;A href="https://github.com/sassoftware/python-swat" target="_self"&gt;SWAT&lt;/A&gt; funciona). Estas ferramentas estão disponíveis no&amp;nbsp;&lt;A href="https://github.com/sassoftware" target="_self"&gt;sassoftware GitHub&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="5"&gt;Obtendo o código de escoragem SAS&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;A essa altura vocês já devem saber que o SAS possui várias interfaces que ajudam a criar modelos (que podem até serem feitos para você através do &lt;A href="https://blogs.sas.com/content/subconsciousmusings/2020/05/15/web-application-sas-automl/" target="_self"&gt;Auto ML&lt;/A&gt;). E, claro, depois de criar seus fabulosos modelos, você quer utilizá-los, o que você poderia fazer então? &lt;EM&gt;Exportar o código de escoragem, é claro.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Primeiramente, no Model Studio (SAS Viya), vá até "Pipeline Comparison", como pode assinala a imagem abaixo.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ehellas_0-1628112063250.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/62270iD0AAA72C751034C7/image-size/large?v=v2&amp;amp;px=999" role="button" title="ehellas_0-1628112063250.png" alt="ehellas_0-1628112063250.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Em seguida, selecione um dos seus modelos, (que não precisa estar registrado ou publicado), e exporte o código de escoragem.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ehellas_1-1628112153522.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/62271i1ABAFA61778FE484/image-size/large?v=v2&amp;amp;px=999" role="button" title="ehellas_1-1628112153522.png" alt="ehellas_1-1628112153522.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Você irá baixar um arquivo zip com o seu código de escoragem SAS (guarde o nome&amp;nbsp;&lt;STRONG&gt;dmcas_epsscorecode.sas&amp;nbsp;&lt;/STRONG&gt;por enquanto, vamos utilizá-lo mais tarde).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ehellas_4-1628112310660.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/62274i7E282B697B4CC3A3/image-size/large?v=v2&amp;amp;px=999" role="button" title="ehellas_4-1628112310660.png" alt="ehellas_4-1628112310660.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Você não precisas descompactar o arquivo (unzip), mas, se você olhar o que tem dentro vai encontrar alguns arquivos &lt;STRONG&gt;.sas&lt;/STRONG&gt;&amp;nbsp;parecido com o exemplo abaixo, que vai depender do modelo que você vai utilizar.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;/*
* This score code file references one or more analytic stores that are located in the caslib "Models".
* This score code file references the following analytic-store tables:
* _28LWD4IVTS9I294A6F893FNBY_ast
*/
/*----------------------------------------------------------------------------------*/
/* Product: Visual Data Mining and Machine Learning */
/* Release Version: V2021.1.1 */
/* Component Version: V2020.1.5 */
/* CAS Version: V.04.00M0P05162021 */
/* SAS Version: V.04.00M0P051621 */
/* Site Number: 70180938 */
/* Host: sas-cas-server-default-client */
/* Encoding: utf-8 */
/* Java Encoding: UTF8 */
/* Locale: en_US */
/* Project GUID: f8b37e46-c893-4cf5-8183-0802c729b1b0 */
/* Node GUID: 25d24897-fad4-4e1d-bc94-1a7d93340ade */
/* Node Id: 28LWD4IVTS9I294A6F893FNBY */
/* Algorithm: Gradient Boosting */
/* Generated by: sasdemo */
/* Date: 26JUL2021:19:12:08 */
/*----------------------------------------------------------------------------------*/
data sasep.out;
dcl package score _28LWD4IVTS9I294A6F893FNBY();
dcl double "P_BAD1" having label n'Predicted: BAD=1';
dcl double "P_BAD0" having label n'Predicted: BAD=0';
dcl nchar(32) "I_BAD" having label n'Into: BAD';
dcl nchar(4) "_WARN_" having label n'Warnings';
dcl double EM_EVENTPROBABILITY;
dcl nchar(12) EM_CLASSIFICATION;
dcl double EM_PROBABILITY;
varlist allvars [_all_];

method init();
_28LWD4IVTS9I294A6F893FNBY.setvars(allvars);
_28LWD4IVTS9I294A6F893FNBY.setkey(n'C08002467175AC235F1C68321869975F6170F229');
end;

method post_28LWD4IVTS9I294A6F893FNBY();
dcl double _P_;

if "P_BAD0" = . then "P_BAD0" = 0.8005033557;
if "P_BAD1" = . then "P_BAD1" = 0.1994966443;
if MISSING("I_BAD") then do ;
_P_ = 0.0;
if "P_BAD1" &amp;gt; _P_ then do ;
_P_ = "P_BAD1";
"I_BAD" = ' 1';
end;
if "P_BAD0" &amp;gt; _P_ then do ;
_P_ = "P_BAD0";
"I_BAD" = ' 0';
end;
end;
EM_EVENTPROBABILITY = "P_BAD1";
EM_CLASSIFICATION = "I_BAD";
EM_PROBABILITY = MAX("P_BAD1", "P_BAD0");

end;

method run();
set SASEP.IN;
_28LWD4IVTS9I294A6F893FNBY.scoreRecord();
post_28LWD4IVTS9I294A6F893FNBY();
end;

method term();
end;

enddata;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Até então tudo certo, desde que você saiba utilizar códigos SAS. Entretanto, se você não souber, ou caso queira escorar tabelas utilizando todo o poder de processamento distribuído do SAS Viya através do R ou Python, um código SAS apenas não te ajuda exatamente. Claro, você poderia usar o&amp;nbsp;&lt;A href="https://github.com/sassoftware/python-swat" target="_self"&gt;SWAT&lt;/A&gt;&amp;nbsp; e fazer toda a tradução manualmente, mas isso não seria nada eficiente.&amp;nbsp;&lt;STRONG&gt;E é para isso que estamos aqui!&lt;/STRONG&gt; O&amp;nbsp;&lt;A href="https://github.com/sassoftware/sas-scoring-translator-python" target="_self"&gt;pysct&lt;/A&gt; - Python Scoring Code Translator (e&amp;nbsp;&lt;A href="https://github.com/sassoftware/sas-scoring-translator-r" target="_self"&gt;rsct&lt;/A&gt;) vão te ajudar. Ele vai ler o arquivo zip e traduzir para você, vamos dar uma olhada.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Vamos começar com Python, mas caso esteja interessado apenas em R, sinta-se a vontade para pular até a sessão do R.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="5"&gt;Python Scoring Code Translator&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Primeiramente, vamos instalar o pacote a partir do GitHub do SAS:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="shell"&gt;## Instale direto do github caso ainda não o tenha
pip install git+https://github.com/sassoftware/sas-scoring-translator-python.git&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;A ferramenta é bem direta e fácil de utilizar. Olhe a tabela de referência, de onde seu modelo veio e o tipo do cógido de escoragem. No nosso exemplo nos fizemos um modelo através do Model Studio, e, o tipo de código de escoragem é o nome que destaquei mais cedo, &lt;STRONG&gt;dmcas_epscorecode.sas. &lt;/STRONG&gt;Com isso, a função que utilizaremos é a&amp;nbsp;&lt;EM&gt;EPS_translate()&lt;/EM&gt;. Outras combinações de modelos e tipo de código de escoragem estão definidos na tabela a seguir:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="1000"&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH align="left" width="166.333px" height="19px"&gt;Interface&lt;/TH&gt;
&lt;TH align="left" width="243.483px" height="19px"&gt;Code Type&lt;/TH&gt;
&lt;TH align="left" width="293.583px" height="19px"&gt;Base File Name&lt;/TH&gt;
&lt;TH align="left" width="295.6px" height="19px"&gt;Translation Function&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="166.333px" height="30px" align="left"&gt;Model Studio&lt;/TD&gt;
&lt;TD width="243.483px" height="30px" align="left"&gt;DataStep&lt;/TD&gt;
&lt;TD width="293.583px" height="30px" align="left"&gt;dmcas_scorecode.sas&lt;/TD&gt;
&lt;TD width="295.6px" height="30px" align="left"&gt;&lt;CODE&gt;pysct.DS_translate()&lt;/CODE&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="166.333px" height="30px" align="left"&gt;Model Studio&lt;/TD&gt;
&lt;TD width="243.483px" height="30px" align="left"&gt;DS2&lt;/TD&gt;
&lt;TD width="293.583px" height="30px" align="left"&gt;dmcas_epscorecode.sas&lt;/TD&gt;
&lt;TD width="295.6px" height="30px" align="left"&gt;&lt;CODE&gt;pysct.EPS_translate()&lt;/CODE&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="166.333px" height="30px" align="left"&gt;Visual Text Analytics&lt;/TD&gt;
&lt;TD width="243.483px" height="30px" align="left"&gt;Sentiment - CAS Procedure&lt;/TD&gt;
&lt;TD width="293.583px" height="30px" align="left"&gt;scoreCode.sas&lt;/TD&gt;
&lt;TD width="295.6px" height="30px" align="left"&gt;&lt;CODE&gt;pysct.nlp_sentiment_translate()&lt;/CODE&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="166.333px" height="30px" align="left"&gt;Visual Text Analytics&lt;/TD&gt;
&lt;TD width="243.483px" height="30px" align="left"&gt;Categories - CAS Procedure&lt;/TD&gt;
&lt;TD width="293.583px" height="30px" align="left"&gt;scoreCode.sas&lt;/TD&gt;
&lt;TD width="295.6px" height="30px" align="left"&gt;&lt;CODE&gt;pysct.nlp_category_translate()&lt;/CODE&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="166.333px" height="30px" align="left"&gt;Visual Text Analytics&lt;/TD&gt;
&lt;TD width="243.483px" height="30px" align="left"&gt;Topics - CAS Procedure&lt;/TD&gt;
&lt;TD width="293.583px" height="30px" align="left"&gt;AstoreScoreCode.sas&lt;/TD&gt;
&lt;TD width="295.6px" height="30px" align="left"&gt;&lt;CODE&gt;pysct.nlp_topics_translate()&lt;/CODE&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="166.333px" height="10px" align="left"&gt;Visual Text Analytics&lt;/TD&gt;
&lt;TD width="243.483px" height="10px" align="left"&gt;Concepts - CAS Procedure&lt;/TD&gt;
&lt;TD width="293.583px" height="10px" align="left"&gt;ScoreCode.sas&lt;/TD&gt;
&lt;TD width="295.6px" height="10px" align="left"&gt;&lt;CODE&gt;pysct.nlp_concepts_translate()&lt;/CODE&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;E, com apena a código a seguir, você já terá tudo o que precisa. No nosso exemplo, veja o código:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;# importando a biblioteca
import pysct

out = pysct.EPS_translate(
            in_file = "C:/score_code_Gradient Boosting.zip",  ## caminho do seu .zip (sim, .zip compactado, não precisa se preocupar)
            out_caslib = "casuser",                           ## Nome da caslib da tabela de saída (depois dos dados escorados)
            out_castable = "hmeq",                            ## Nome da tabela de saida (depois dos dados escorados)
            in_caslib = "public",                             ## Nome da caslib onde a tabela a ser escorada está
            in_castable = "hmeq",                             ## Nome da tabela a ser escorada
            copyVars="ALL",                                   ## por padrão, o SAS retorna apenas o resultados, utilize "ALL" caso queira copiar todas as variáveis, ou omita caso contrário
            out_file="gradientBoosting.py"                    ## caminho de saída do arquivo python)

out.keys()&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Exemplo do output:&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;The file was successfully written to gradientBoosting.py

dict_keys(['ds2_raw', 'py_code', 'out_caslib', 'out_castable', 'out_file'])&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Por padrão, o pysct escreve o arquivo no seu diretório atual. Todo o código pode ser encontrado no objeto&amp;nbsp;&lt;CODE class=" language-sas"&gt;out&lt;/CODE&gt;&amp;nbsp;no caso de querer mais detalhes. Mas agora vamos dar uma olhada no código gerado, o&amp;nbsp;&lt;CODE class=" language-sas"&gt;gradientBoosting.py&lt;/CODE&gt;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;## SWAT package needed to run the codes, below the packages in pip and conda
# documentation: https://github.com/sassoftware/python-swat/
# pip install swat
# conda install -c sas-institute swat

import swat

## Defining tables and models variables
in_caslib = "public"
in_castable = "hmeq"
out_caslib = "casuser"
out_castable = "hmeq"
astore_name = "_28LWD4IVTS9I294A6F893FNBY_ast"
astore_file_name = "_28LWD4IVTS9I294A6F893FNBY_ast.sashdat"

## Connecting to SAS Viya
conn = swat.CAS(hostname = "myserver.com", ## change if needed
                port = 8777,
                protocol='http',  ## change protocol to cas and port to 5570 if using binary connection (unix)
                username='username', ## use your own credentials
                password='password') ## we encorage using .authinfo 


## Loading model to memory
## assuming the model is already inside the viya server

conn.table.loadTable(caslib= "Models",
                      path = astore_file_name, #case sensitive
                      casOut = {"name": astore_name,
                                "caslib": "Models"}
                                )

score_table = conn.CASTable(name = in_castable,
                            caslib = in_caslib
                                )

column_names = score_table.columns.tolist()


## loading astore actionset and scoring
conn.loadActionSet("astore")

conn.astore.score(table = {"caslib": in_caslib, "name": in_castable},
                   out = {"caslib": out_caslib, "name": out_castable, "replace": True},
                   copyVars = column_names,
                   rstore = {"name": astore_name, "caslib": "Models"}
              )

## Obtaining output/results table
scored_table = conn.CASTable(name = out_castable,
                              caslib = out_caslib)
                              
scored_table.head()&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;E a mágica está feita, você precisa apenas editar a conexão (&lt;CODE class=" language-sas"&gt;swat.CAS&lt;/CODE&gt;) com as suas credencias e do seu servidor, e o seu código está pronto para ser usado no Python.&lt;/P&gt;
&lt;P&gt;Apesar de utilizar alguns valores padrões (ou copiar do código SAS original), você pode alterar para ajustar ao seu caso, mas agora você já tem uma boa ideia de como começar a criar ótimas integrações.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;&lt;FONT size="5"&gt;R Scoring Code Translator&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;&lt;BR /&gt;Se você leu a sessão do Python, não há muitas mudanças, apenas na sintaxe. Preparem suas&amp;nbsp;&lt;STRONG&gt;&lt;FONT face="courier new,courier"&gt;&amp;lt;-&lt;/FONT&gt;&lt;/STRONG&gt;&amp;nbsp;!&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;Primeiramente, vamos instalar o pacote do GitHub do SAS (não está disponível no CRAN).&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;&lt;LI-CODE lang="r"&gt;# Como o pacote não está disponível no CRAN, você deve instalá-lo a partir do git 
# recomendamos utilizar o pacote remotes
# install.packages("remotes") # descomente em caso não o tenha instalado

remotes::install_github("sassoftware/sas-scoring-translator-r")  
&lt;/LI-CODE&gt;&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;Para saber exatamente qual função utilizar, utilize a tabela de referência para comparar de onde tirou seu modelo, e qual é o tipo do código de escorage. No nosso exemplo, o modelo foi feito no Model Studio, e o tipo do código é o que pedi para guardarem mais cedo,&amp;nbsp;&lt;STRONG&gt;dmcas_epscorecode.sas . &lt;/STRONG&gt;Assim, basta utilizar a função&amp;nbsp;&lt;EM&gt;EPS_translate().&lt;/EM&gt;&amp;nbsp;Outras combinações estão descritas na tabela a seguir.&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;
&lt;TABLE width="1000"&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH align="left" width="155.6px"&gt;Interface&lt;/TH&gt;
&lt;TH align="left" width="212.383px"&gt;Code Type&lt;/TH&gt;
&lt;TH align="left" width="188.017px"&gt;Base File Name&lt;/TH&gt;
&lt;TH align="left" width="219px"&gt;Translation Function&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="155.6px" align="left"&gt;Model Studio&lt;/TD&gt;
&lt;TD width="212.383px" align="left"&gt;DataStep&lt;/TD&gt;
&lt;TD width="188.017px" align="left"&gt;dmcas_scorecode.sas&lt;/TD&gt;
&lt;TD width="219px" align="left"&gt;&lt;CODE&gt;DS_translate()&lt;/CODE&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="155.6px" align="left"&gt;Model Studio&lt;/TD&gt;
&lt;TD width="212.383px" align="left"&gt;DS2&lt;/TD&gt;
&lt;TD width="188.017px" align="left"&gt;dmcas_epscorecode.sas&lt;/TD&gt;
&lt;TD width="219px" align="left"&gt;&lt;CODE&gt;EPS_translate()&lt;/CODE&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="155.6px" align="left"&gt;Visual Text Analytics&lt;/TD&gt;
&lt;TD width="212.383px" align="left"&gt;Sentiment - CAS Procedure&lt;/TD&gt;
&lt;TD width="188.017px" align="left"&gt;scoreCode.sas&lt;/TD&gt;
&lt;TD width="219px" align="left"&gt;&lt;CODE&gt;nlp_sentiment_translate()&lt;/CODE&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="155.6px" align="left"&gt;Visual Text Analytics&lt;/TD&gt;
&lt;TD width="212.383px" align="left"&gt;Categories - CAS Procedure&lt;/TD&gt;
&lt;TD width="188.017px" align="left"&gt;scoreCode.sas&lt;/TD&gt;
&lt;TD width="219px" align="left"&gt;&lt;CODE&gt;nlp_category_translate()&lt;/CODE&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="155.6px" align="left"&gt;Visual Text Analytics&lt;/TD&gt;
&lt;TD width="212.383px" align="left"&gt;Topics - CAS Procedure&lt;/TD&gt;
&lt;TD width="188.017px" align="left"&gt;AstoreScoreCode.sas&lt;/TD&gt;
&lt;TD width="219px" align="left"&gt;&lt;CODE&gt;nlp_topics_translate()&lt;/CODE&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="155.6px" align="left"&gt;Visual Text Analytics&lt;/TD&gt;
&lt;TD width="212.383px" align="left"&gt;Concepts - CAS Procedure&lt;/TD&gt;
&lt;TD width="188.017px" align="left"&gt;ScoreCode.sas&lt;/TD&gt;
&lt;TD width="219px" align="left"&gt;&lt;CODE&gt;nlp_concepts_translate()&lt;/CODE&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;E, com algumas linhas, conseguimos traduzir o nosso código, sem nem precisar descompactá-lo.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="r"&gt;## Carregando o pacote
library("rsct")

output_infos &amp;lt;- EPS_translate(in_file = "C:/score_code_Gradient Boosting.zip",  ## caminho do seu .zip (sim, .zip compactado, não precisa se preocupar)
                              out_caslib = "casuser",                     ## Nome da caslib da tabela de saída (depois dos dados escorados)
                              out_castable = "hmeq_scored",               ## Nome da tabela de saida (depois dos dados escorados)
                              in_caslib = "public",                       ## Nome da caslib onde a tabela a ser escorada está
                              in_castable = "hmeq",                       ## Nome da tabela que a ser escorarada
                              copyVars = "ALL",                           ## por padrão, o SAS retorna apenas o resultados, utilize "ALL" caso queira copiar todas as variáveis, ou omita caso contrário
                              out_file = "gb_translated.R"                ## caminho de saída do arquivo R
)

names(output_infos)&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Exemplo do output:&lt;/P&gt;
&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;&lt;LI-CODE lang="r"&gt;File successfully written to gb_translated.R

[1] "r_code"       "out_file"     "out_caslib"   "out_castable"&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;O arquivo&amp;nbsp;&lt;CODE class=" language-sas"&gt;gb_translated.R&lt;/CODE&gt; foi salvo no diretório padrão de sua sessão, mas você poderia também utilizar um caminho completo. O objeto&amp;nbsp;&lt;CODE class=" language-sas"&gt;output_infos&lt;/CODE&gt; é uma lista com detalhes da tradução, caso você precise utilizar em outro lugar. E esse é o código gerado:&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;&lt;LI-CODE lang="r"&gt;## install swat package from github if needed, uncomment OS version
# install.packages('https://github.com/sassoftware/R-swat/releases/download/v1.6.1/R-swat-1.6.1-linux64.tar.gz',repos=NULL, type='file') ## linux
# install.packages('https://github.com/sassoftware/R-swat/releases/download/v1.6.1/R-swat-1.6.1-win64.tar.gz',repos=NULL, type='file') ## windows
# install.packages('https://github.com/sassoftware/R-swat/releases/download/v1.6.1/R-swat-1.6.1-REST-only-osx64.tar.gz',repos=NULL, type='file') ## osx

## Load library
library("swat")

## Defining tables and models variables
in_caslib &amp;lt;- "public"
in_castable &amp;lt;- "hmeq"
out_caslib &amp;lt;- "casuser"
out_castable &amp;lt;- "hmeq_scored"
astore_name &amp;lt;- "_28LWD4IVTS9I294A6F893FNBY_ast"
astore_file_name &amp;lt;- "_28LWD4IVTS9I294A6F893FNBY_ast.sashdat"

## Connecting to SAS Viya
conn &amp;lt;- CAS(hostname = "myserver.com", ## change if needed
						port = 8777,
						protocol='http',  ## change protocol to cas and port to 5570 if using binary connection (unix)
						username='sasusername', ## use your own credentials
						password='password') ## we encorage using  .authinfo

## Loading model to memory
cas.table.loadTable(conn,
                      caslib= "Models",
                      path = astore_file_name , #case sensitive
                      casOut = list(name = astore_name,
                                    caslib = "Models")
              )

## Defining scoring table obtaining column names
score_table &amp;lt;- defCasTable(conn,
                             tablename = in_castable,
                             caslib = in_caslib)

column_names &amp;lt;- names(score_table)

## loading astore actionset and scoring
loadActionSet(conn, "astore")

cas.astore.score(conn,
                   table = list(caslib= in_caslib, name = in_castable),
                   out = list(caslib = out_caslib, name = out_castable, replace = TRUE),
                   copyVars = column_names,
                   rstore = list(name = astore_name, caslib = "Models")
              )

## Obtaining output/results table
scored_table &amp;lt;- defCasTable(conn,
                            tablename = out_castable,
                            caslib = out_caslib)

head(scored_table)&lt;/LI-CODE&gt;&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;Como você pode notar, está quase pronto para ser utilizado, só falta editar a conexão com o CAS&amp;nbsp;(usando&amp;nbsp;&lt;CODE class=" language-sas"&gt;CAS&lt;/CODE&gt;) com suas credencias e do seu servidor, e seu código está pronto para ser usado diretamente no R. Você pode fazer as alterações que precisar, mas é uma ótima maneira de começar a entender como SAS e Open Source podem trabalhar juntos.&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;&lt;FONT size="5"&gt;Conclusão&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;Quanto antes concordarmos que não é uma questão de Python, R &lt;STRONG&gt;ou&lt;/STRONG&gt;&amp;nbsp;SAS, mas sim &lt;STRONG&gt;com&lt;/STRONG&gt;&amp;nbsp;SAS, mais rápido podemos criar soluções integradas. Eu realmente espero que essas ferramentas possam ser úteis e interessantes para vocês. E é claro, vamos continuar melhorando estes pacotes e criando mais, especialmente se soubermos que vocês estão utilizando. Qualquer report de bug ou pedidos podem ser feitos no GitHub. Vamos continuar melhorando todas as formas de integração.&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;</description>
      <pubDate>Fri, 20 Aug 2021 19:50:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Forum-em-portugu%C3%AAs/Tradutor-de-codigo-de-scoragem-de-SAS-para-Python-e-R/m-p/762949#M547</guid>
      <dc:creator>ehellas</dc:creator>
      <dc:date>2021-08-20T19:50:50Z</dc:date>
    </item>
    <item>
      <title>Re: Tradutor de codigo de scoragem de SAS para Python (e R)</title>
      <link>https://communities.sas.com/t5/Forum-em-portugu%C3%AAs/Tradutor-de-codigo-de-scoragem-de-SAS-para-Python-e-R/m-p/762965#M548</link>
      <description>Projeto incrível! Parabéns pelo trabalho!!</description>
      <pubDate>Fri, 20 Aug 2021 20:29:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Forum-em-portugu%C3%AAs/Tradutor-de-codigo-de-scoragem-de-SAS-para-Python-e-R/m-p/762965#M548</guid>
      <dc:creator>diegoserodio</dc:creator>
      <dc:date>2021-08-20T20:29:36Z</dc:date>
    </item>
  </channel>
</rss>

