USO DE MACROS NO SAS 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. %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 * Departamento de Ciências Exatas FCAV/UNESP, Campus de Jaboticabal. 14870-000 Jaboticabal SP
2 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. /************* 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; PROC UNIVARIATE DATA=AE NORMAL PLOT; VAR ER1-ER&NVD;
3 2. Macro funções. Uma macro função permite definir uma função a ser usada no programa. %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.
4 Definir a transformação como macro função. Fazer a correlação entre as variáveis originais e entre as variáveis transformadas. /************* 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; PROC CORR; VAR Y1-Y3; PROC CORR; VAR YT1-YT3; 3. Macro subprograma. Uma macro subprograma permite definir uma rotina à parte que pode ser chamada tantas vezes quantas precisar. %MACRO <nome>; <subprograma> %mend <nome>; Sintaxe para chamar a macro: %<nome>
5 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; 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. PALNIHA É o nome da planilha.
6 /************** 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; DATA SDSB; SET SDSB; LM=LOG(M); LV=LOG(V); PROC REG; MODEL LV=LM; %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; PROC PRINT DATA=A; DATA A; SET A; TITLE "TESTE DE BARTLET PARA Y1"; Y=Y1; %BARTL DATA A; SET A; TITLE "TESTE DE BARTLET PARA Y2"; Y=Y2; %BARTL 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.
7 %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. /******************************************/ /* 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; PROC GLM DATA=MSP3; CLASS TR RP; MODEL Y=TR/SS3; MEANS TR/HOVTEST; OUTPUT OUT=AE STUDENT=ER; PROC UNIVARIATE DATA=AE NORMAL PLOT; VAR ER; 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);