No início os procedimentos e saídas criados pelo SAS. A saída era sem forma e vazia. Então SAS disse: “Que haja ODS”, e havia ODS.Os clientes viram que ODS era bom, e SAS separou o cálculo do display e do gerenciamento da saída.
O parágrafo anterior simplifica demais o Sistema de Saída de SAS (ODS), mas a verdade é que ODS é uma característica poderosa do SAS. Você pode usar ODS para enviar tabelas e gráficos SAS para vários destinos de saída, incluindo HTML, PDF, RTF, e PowerPoint. Você pode controlar o estilo e os atributos da saída, criando assim um relatório personalizado. Já foram escritos centenas de artigos e livros sobre ODS. Uma introdução muito básica é Olinger (2000) “ODS for Dummies”
Para um programador estatístico o destino mais útil é o destino OUTPUT. O destino OUTPUT envia uma tabela ou gráfico para um conjunto de dados SAS. Conseqüentemente, você pode programar o acesso a cada elemento da saída.
As implicações da afirmação anterior são monumentais. Eu não posso exagerar a importância do destino OUTPUT, então deixe-me dizer novamente:
O destino ODS OUTPUT permite armazenar qualquer valor que seja produzido por qualquer procedimento SAS. Você pode então ler esse valor usando um programa SAS.
O destino ODS OUTPUT responde a uma pergunta comum que é feita por novos programadores em fóruns de discussão SAS: “Como posso obter uma estatística para um conjunto de dados ou para uma variável macro?” Os passos são os seguintes:
- USE ODS TRACE ON (ou a documentação SAS) para encontrar o nome da tabela ODS que contém a estatística desejada.
- Use a instrução ODS OUTPUT para especificar o nome da tabela e um nome do conjunto de dados. A sintaxe é ODS OUTPUT TableName=DataSetName. Em seguida, execute o procedimento para gerar a tabela.
- Ler o conjunto de dados para obter o valor da estatística.
Nova programação para #SAS? Como obter qualquer estatística em um conjunto de dados. Clique em To Tweet
Lhe o nome da tabela ODS
Como exemplo, suponha que você pretende usar PROC REG para realizar uma regressão linear, e você quer capturar o valor do quadrado R em um conjunto de dados SAS. A documentação do procedimento lista todas as tabelas ODS que o procedimento pode criar, ou você pode usar a instrução ODS TRACE ON para exibir os nomes das tabelas que são produzidas por PROC REG. Os dados são os 428 veículos do conjunto de dados Sashelp.Cars, que é distribuído com SAS:
ods trace on; /* escrever os nomes das tabelas ODS para log */proc reg data=Sashelp.Cars plots=none; model Horsepower = EngineSize Weight;quit;ods trace off; /* stop writing to log */
Output Added:-------------Name: FitStatisticsLabel: Fit StatisticsTemplate: Stat.REG.FitStatisticsPath: Reg.MODEL1.Fit.Horsepower.FitStatistics-------------
>
Olhando para a saída, você pode ver que a terceira tabela contém o valor R-quadrado. Olhando para o log SAS, você pode ver que o nome da terceira tabela é “FitStatistics”.”
Guardar a tabela num conjunto de dados SAS
Agora o nome da tabela ODS é “FitStatistics”, use o destino ODS OUTPUT para escrever essa tabela num conjunto de dados SAS, como se segue:
ods output FitStatistics=Output; /* o nome do conjunto de dados é 'Output' */proc reg data=Sashelp.Cars plots=none; /* mesma chamada de procedimento */ modelo Horsepower = EngineSize Weight;quit; proc print data=Output noobs;run;
A saída do PROC PRINT mostra a estrutura do conjunto de dados de saída. Observe que o conjunto de dados muitas vezes parece diferente da tabela original exibida. O conjunto de dados contém colunas não impressas (como Modelo e Dependente) que não aparecem na tabela exibida. O conjunto de dados também contém colunas que contêm os valores numéricos brutos e os valores dos caracteres (formatados) das estatísticas. As colunas cValue1 e nValue1 representam as mesmas informações, exceto que o cValue1 é uma coluna de caracteres, enquanto o nValue1 é uma coluna numérica. O mesmo se aplica às colunas cValue2 e nValue2. Os valores de caracteres podem conter valores formatados ou arredondados.
Ler o valor da estatística em uma macro variável
Na saída anterior de PROC PRINT, pode-se ver que o valor numérico da estatística do quadrado R está na primeira linha e está na coluna nValue2. Portanto, é possível ler e processar esse valor usando uma cláusula WHERE padrão. Por exemplo, as seguintes instruções usam a subrotina SYMPUTX para criar uma macro variável que contém o valor da estatística quadrática R:
dados _null_;set Output;if Label2="R-Square" then call symputx("RSq", nValue2);run; %put RSq = &RSq;
RSq = 0.6201360929
O log SAS mostra que o valor do quadrado R agora está contido na variável macro Rsq.
Armazenar a estatística em uma variável macro é apenas uma maneira de usar o conjunto de dados. Você também pode ler as estatísticas em PROC IML ou PROC SQL para cálculos adicionais, ou mostrar o valor da estatística em um gráfico.
Processamento de grupo BY: Múltiplas amostras e múltiplas estatísticas
As secções anteriores mostram como guardar uma única tabela para um conjunto de dados SAS. É igualmente fácil criar um conjunto de dados que contenha múltiplas estatísticas, uma para cada nível em uma análise BY-group.
Ponha que você queira executar várias regressões, uma para cada valor da variável Origem, que tem os valores “Ásia”, “Europa”, e “EUA”. A chamada seguinte para PROC SORT ordena os dados pela variável Origem. Os dados ordenados são armazenados no conjunto de dados CARS.
proc sort data=Sashelp.Cars out=Cars; by Origin;run;
Pode então especificar Origin na instrução BY em PROC REG para realizar três análises de regressão. Quando você executa uma análise de grupo BY, você pode não querer ver todos os resultados exibidos na tela do computador, especialmente se o seu objetivo for salvar os resultados em um conjunto de dados de saída. Você pode usar a instrução ODS EXCLUDE para suprimir a saída SAS.
ods exclude all; /* suprime tabelas para a tela */ods output FitStatistics=Output2; /* 'Output2' contém resultados para cada grupo BY */proc reg data=Cars plots=none; por Origem; modelo Horsepower = EngineSize Weight;quit;ods exclude none; /* no longer suppress tables */ proc print data=Output2 noobs; where Label2="R-Square"; var Origin Label2 nValue2;run;
The output from PROC PRINT mostra a estatística do quadrado R para cada modelo. Note que as variáveis do grupo BY (neste caso, Origem) são adicionadas aos conjuntos de dados de saída quando se executa uma análise do grupo BY. Agora você pode usar as estatísticas em programas ou gráficos.
Alternativos para usar ODS OUTPUT
Alguns procedimentos fornecem uma opção alternativa para criar um conjunto de dados de saída que contenha estatísticas. Verifique sempre a documentação do SAS para ver se o procedimento fornece uma opção que escreve estatísticas comuns para um conjunto de dados de saída. Por exemplo, a documentação da instrução PROC REG afirma que é possível usar a opção OUTEST= com a opção RSQUARE para obter um conjunto de dados de saída que contenha as estimativas de parâmetros e outras estatísticas do modelo, como o valor R-quadrado. Em vez disso, você pode obter a estatística da seguinte forma:
proc reg data=Cars NOPRINT outest=Output3 RSQUARE; /* statistics in 'Output3' */ by Origin; model Horsepower = EngineSize Weight;quit; proc print data=Output3 noobs; format _RSQ_ 8.6; var Origin _RSQ_;run;
Summary
Em resumo, a instrução ODS OUTPUT permite que você crie um conjunto de dados que contenha qualquer estatística que seja produzida por um procedimento SAS. Você pode usar o comando ODS OUTPUT para capturar uma estatística e usá-la mais tarde no seu programa.