Euclides Braga MALHEIROS* O uso de Macros no SAS permite que uma variável ou uma seqüência de comandos SAS seja chamado qualquer número de vezes. É o mesmo princípio de subrotinas utilizado na maioria das linguagens de programação.
O SAS permite vários tipos de macros, alguns deles serão discutidos aqui.
1.
Macro variáveis.
Uma macro variável permite definir um valor a uma variável no SAS. Sintaxe para definir a macro:
%LET <nome>=<valor>;
Sintaxe para chamar a macro:&<nome>
Para exemplificar considere o conjunto de dados de um Delineamento Inteiramente Casulizado, com 5 variáveis: Tratamento (TR), Repetição (RP) e as variáveis dependentes Y1, Y2 e Y3, apresentado na Tabela1.
Tabela 1. Dados de experimento Inteiramente Casualizado com 5 tratamentos e 3 repetições. (Dados fictícios)
TR RP Y1 Y2 Y3 1 1 11,82 14,86 13,84 1 2 12,07 14,44 13,92 1 3 12,45 14,18 13,76 2 1 12,47 15,19 15,02 2 2 11,07 13,38 14,61 2 3 10,66 14,22 13,54 3 1 12,92 14,49 13,40 3 2 10,29 14,42 14,62 3 3 12,83 13,92 15,69 4 1 11,96 14,71 14,98 4 2 13,38 15,07 13,62 4 3 10,37 15,78 13,33 5 1 11,05 13,18 14,61 5 2 10,63 13,14 14,53 5 3 13,43 14,08 14,23
A partir desses dados foi criado um arquivo ASC II com o nome MAC_V.TXT, disponível no site do curso.
Exercício 1:
• Fazer download do arquivo MAC_V.ZIP, disponível no site do curso, para a pasta de
trabalho e descompactá-lo.
• Fazer um programa SAS para a análise do experimento Delineamento Inteiramente
Casualizado, permitinto estabelecer as possíveis variações do programa, como: o Título da análise,
o Arquivo ASC a ser importado, o Primeiro Registro com Dados,
o Número de variáveis a serem analisadas (variáveis dependentes), o Tipo de teste de comparações múltiplas e
o Tipo de teste de Homocedasticidade, sejam definidas como variáveis macro.
Programa:
/************* MACRO VARIAVEIS **********/ /* DELINEAMENTO INTERAMENTE CASUALIZADO */ /****************************************/
/*--- REDEFINA AS OPCOES DESEJADAS ---*/ %LET TITULO="EXEMPLO MACRO VARIÁVEIS"; /* TITULO */ %LET AASC="A:\MAC1.TXT"; /* ARQUIVO ASC II */ %LET PRD=1; /* PRIMEIRO REGISTO DE DADOS – FIRSTOBS */ %LET NVD=3; /* NUMERO DE VARIAVEIS DEPENDENTES */ %LET TCM=TUKEY; /* TESTE DE COMPARACOES MULTIPLAS */ %LET THV=LEVENE; /* TESTE DE HOMOGENEIDADE DE VARIANCIA */ /*---*/ OPTION LS=78 PS=64 PAGENO=1;
TITLE &TITULO; DATA M1;
INFILE &AASC FIRSTOBS=&PRD; INPUT TR RP Y1-Y&NVD;
PROC GLM; CLASS TR RP;
MODEL Y1-Y&NVD=TR/SS3; MEANS TR/&TCM HOVTEST=&THV;
OUTPUT OUT=AE STUDENT=ER1-ER&NVD; RUN;
PROC UNIVARIATE DATA=AE NORMAL PLOT; VAR ER1-ER&NVD;
2. Macro funções.
Uma macro função permite definir uma função a ser usada no programa. Sintaxe para definir a macro:
%macro <nome(lista de argumentos - separados por ,)>;
expressão que define a função usando o argumento precedido por &%mend <nome>;
Para usar a função:%<nome(valores para os argumentos)>
Para exemplificar considere o conjunto de dados de um Delineamento Inteiramente Casulizado, com 5 variáveis: Tratamento (TR), Repetição (RP) e as variáveis dependentes Y1, Y2 e Y3, apresentado na Tabela 2.
Tabela 2. Dados de experimento Inteiramente Casualizado com 5 tratamentos e 3 repetições. (Dados fictícios)
TR RP Y1 Y2 Y3 1 1 15 0,486 78,5 1 2 16 0,444 80,6 1 3 14 0,418 83,8 2 1 25 0,519 83,9 2 2 21 0,338 72,3 2 3 12 0,422 68,8 3 1 11 0,449 87,7 3 2 21 0,442 65,8 3 3 30 0,392 86,9 4 1 24 0,471 79,7 4 2 13 0,507 91,5 4 3 11 0,578 66,4 5 1 21 0,318 72,1 5 2 21 0,314 68,6 5 3 18 0,408 91,9 Exercício 2:
• Fazer download do arquivo MAC_FC.ZIP, disponível no site do curso, para a pasta de trabalho e descompactá-lo.
• Fazer um programa SAS para ler os dados MAC_FC.TXT e transformar as variáveis: Y1 em raiz quadrada de (Y1+0,5); Y2 e Y3 em arco seno da raiz da porcentagem.
• Definir a transformação como macro função.
• Fazer a correlação entre as variáveis originais e entre as variáveis transformadas.
Programa: /************* MACRO FUNCOES **********/ /* TRANSFORMACAO DE DADOS */ /****************************************/ /*---DEFINICAO DA MACRO---*/ %MACRO RAIZ(X,ALFA); SQRT(&X+&ALFA) %MEND RAIZ; %MACRO ASRP(X,DIV,ALFA); ARSIN(SQRT(&X/&DIV)+&ALFA) %MEND ASRP; /*---*/ OPTIONS LS=78 PS=64 PAGENO=1; DATA MF;
INFILE "A:\MAC_FC.TXT" FIRSTOBS=2; INPUT TR RP Y1-Y3;
YT1=%RAIZ(Y1,0,5); YT2=%ASRP(Y2,1,0); YT3=%ASRP(Y3,100,0); PROC PRINT; RUN; PROC CORR; VAR Y1-Y3; RUN; PROC CORR; VAR YT1-YT3; RUN;
3. Macro subprograma.
Uma macro subprograma permite definir uma rotina à parte que pode ser chamada tantas vezes quantas precisar.
Sintaxe para definir a macro:
%MACRO <nome>;
<subprograma>%mend <nome>;
Sintaxe para chamar a macro:Para exemplificar considere o conjunto de dados de um Delineamento Inteiramente Casulizado, com 4 variáveis: Tratamento (Trat), Repetição (Rep) e as variáveis dependentes Y1 e Y2, apresentado na Tabela 3.
Tabela 3. Dados de experimento Inteiramente Casualizado com 5 tratamentos e 4 repetições. (Dados fictícios)
Trat Rep Y1 Y2 1 1 2370 14,236 1 2 1687 14,478 1 3 2592 14,519 1 4 2283 13,888 2 1 1282 13,928 2 2 1527 13,777 2 3 871 14,444 2 4 1025 13,061 3 1 562 14,073 3 2 321 13,406 3 3 636 13,607 3 4 317 14,411 4 1 173 15,088 4 2 127 13,583 4 3 132 13,697 4 4 150 13,636 5 1 193 15,349 5 2 71 16,502 5 3 82 15,175 5 4 62 15,022 Exercício 3:
• Fazer download do arquivo MAC_SP1.XLS, disponível no site do curso, para a pasta de trabalho.
• Criar um SDS importando o arquivo do direto do Excel.
• Fazer um programa SAS para realizar a análise de regressão entre o Log da variância e o Log da média usada para avaliar o tipo de heterocedasticidade (regular ou irregular) e, se for regular indicar a transformação de dados a ser usada, para cada variável dependente.
Como criar o SAS DATA SET (SDS) importando o arquivo do Excel
PROC IMPORT OUT=SDS DATAFILE="ARQ.XLS" DBMS=EXCEL2000 REPLACE; SHEET="PLANILHA$";
GETNAMES=YES; RUN;
Onde: SDS – é o nome do SAS DATA SET a ser criado
ARQ. XLS – é o arquivo a ser importado, icluindo o caminho onde ele se encontra.
Programa:
/************** USO DE MACROS *************/ /* TESTE PARA A ESCOLHA DA TRANSFORMACAO */ /******************************************/ /****************** DEFINA AS OPCOES *****************/ %LET TITULO="MACRO SUBPROGRAMA";
%LET TTCM=TUKEY;
/*****************************************************/ /*---MACRO---*/ %MACRO BARTL;
PROC MEANS NOPRINT;
OUTPUT OUT=SDSB MEAN=M VAR=V; BY TR; VAR Y; RUN; DATA SDSB; SET SDSB; LM=LOG(M); LV=LOG(V); RUN; PROC REG; MODEL LV=LM; RUN; %MEND BARTL; /*---PROGRAMA PRINCIPAL---*/ TITLE &TITULO; OPTIONS LS=78 PS=64;
PROC IMPORT OUT=A DATAFILE="A:\MAC_SP1.XLS" DBMS=EXCEL2000 REPLACE; SHEET="PLAN1$";
GETNAMES=YES; RUN;
PROC PRINT DATA=A; RUN;
DATA A; SET A;
TITLE "TESTE DE BARTLET PARA Y1"; Y=Y1;
%BARTL
RUN;
DATA A; SET A;
TITLE "TESTE DE BARTLET PARA Y2"; Y=Y2;
%BARTL
RUN;
4. Macro subprograma com parâmetros.
Uma macro subprograma permite definir uma rotina à parte, variando alguns parâmetros, que podem ser parâmetros de entrada ou de saída. A rotina pode ser chamada tantas vezes quantas precisar.
Sintaxe para definir a macro:
%macro <nome(par1,par2, ... )>;
<comandos incluindo os parâmetros precedidos por & (ex: &par1, &par2, ...)
%mend <nome>;
Sintaxe para chamar a macro:%<nome(v_par1,v_par2, ... )>
onde v_par1, v_par2 são os valores dos parâmetros par1, par2, respectivamente.
Exercício 4:
• Fazer download do arquivo MAC_SP2.txt, disponível no site do curso, para a pasta de trabalho.
• Criar um SDS importando o arquivo ASC, com as variáveis A, B, C, RP e Y. • Fazer um programa SAS para analisar esses dados, usando subprograma para os
desdobramentos das interações duplas.
Programa:
/******************************************/ /* DESDOBRAMENTO DA INTERAÇAO */ /* COM O USO DE MACRO */ /******************************************/ %LET AASC="A:\MAC_SP3.TXT"; %MACRO DESD(FA,FB); LSMEANS &FA*&FB/SLICE=&FA; LSMEANS &FA*&FB/SLICE=&FB; %MEND DESD; /********PROGRAMA PRINCIPAL ***************************/ OPTIONS LS=78 PS=64 PAGENO=1; DATA MSP3;
INFILE &AASC FIRSTOBS=2; INPUT A B C RP Y; TR=(A-1)*6+(B-1)*2+C; PROC PRINT; RUN; PROC GLM DATA=MSP3; CLASS TR RP; MODEL Y=TR/SS3; MEANS TR/HOVTEST;
OUTPUT OUT=AE STUDENT=ER; RUN;
PROC UNIVARIATE DATA=AE NORMAL PLOT; VAR ER;
RUN; PROC GLM;
CLASS A B C RP;
MODEL Y=A B C A*B A*C B*C A*B*C/SS3; %DESD(A,B);
%DESD(A,C); %DESD(B,C); RUN;