SAS® linguagem Macro imensamente capacita os programadores SAS com versatilidade e eficiência de seu desenvolvimento de código. Ele permite aos usuários do SAS modularizar o código de programação com componentes” uma vez escritos – muitas vezes usados”, e em muitos casos automaticamente gerar código SAS orientado por dados.post relacionado com blog: Função de macro multi-propósito para obter informações sobre conjuntos de dados
linguagem de Macro e processador de macro
geralmente, o software SAS processa o seu programa SAS passo a passo, primeiro digitalizando – o para objetos de macro linguagem referenciada como &somename, e macros referenciados como %somename. Se for encontrado, o software SAS activa o processador macro que resolve e substitui essas referências de macro de acordo com a sintaxe da linguagem macro antes que o SAS compile e execute os seus passos de programação.
SAS macro language vs. Linguagem de programação SAS
um programa SAS geralmente consiste em duas camadas, muitas vezes entrelaçadas-macro camada e não-macro camada, cada uma com sua própria sintaxe e seu próprio tempo de compilação e execução. Em outras palavras, o código SAS é uma combinação de duas linguagens distintas:
- SAS linguagem de programação (composta de passos de dados, passos PROC e declarações globais como LIBNAME, opções, título, etc.)
- SAS macro language (composta por %LET, %IF, % DO, macro functions etc.) que é processado separadamente e antes do compilador SAS executar o código da linguagem de programação SAS.a diferença entre eles é como uma diferença entre cozinhar uma refeição e comer a refeição. Nesta analogia refeição = código, cozinhar = linguagem de macro SAS, comer = linguagem de programação SAS. Uma clara compreensão desta diferença é a chave para se tornar um programador SAS bem sucedido.
dois tipos de macros SAS
Existem dois tipos distintos de macros SAS:
- Macros que geram algum código da linguagem de programação SAS que pode abranger as declarações ou passos do SAS;
- Macros que geram alguns valores de cadeia que podem ser usados como parte do Código da linguagem de programação SAS ou valores de dados, mas eles não são instruções SAS completas ou passos. Este tipo não gera nenhum código executável SAS, apenas um valor.o que é uma função macro SAS?
função macro SAS é uma macro SAS que gera um valor. Em outras palavras, é a macro tipo 2 descrita acima. Como quaisquer macros SAS, as funções de macro SAS podem ter qualquer número (zero ou mais) de parâmetros posicionais ou/e nomeados (argumentos). Os usuários do SAS podem definir suas próprias funções de macro, mas ao fazê-lo você não pode utilizar qualquer sintaxe da linguagem SAS; só a sintaxe da linguagem de macro SAS é permitida. Você pode usar funções de macro existentes em sua própria definição de função de macro. Entre outros, uma das mais poderosas é a função macro %SYSFUNC, que traz uma riqueza de funções da linguagem SAS para a linguagem macro SAS.
Fontes de funções macro SAS
funções macro SAS podem vir das três fontes seguintes.
funções de macro pré-construídas
funções de macro pré-construídas que fazem parte do processador de macro. Estas são funções de macro como %eval, % length, %quote, %scan, %str, %sysfunc, %upcase, etc. Aqui está uma lista completa das funções de macro SAS pré-construídas.
funções de macro de chamada automática
macros de chamada automática, algumas delas são do tipo 1 (macros), e algumas do tipo 2 (macro functions), como %cmpres, %left, %lowcase, %trim, %verify, etc. Estas funções de macro complementam as funções de macro pré-construídas. A principal diferença das funções de macro pré-construídas é que as funções de macro Auto-call são amostras de programas das funções de macro definidas pelo usuário que são escritas na linguagem de macro SAS e disponibilizadas para você sem ter que defini-las ou incluí-las em seus programas. As funções de macro de chamada automática vêm com a sua instalação de software SAS e normalmente pré-configuradas para você, definindo a MAUTOSOURCE e SASAUTAS= opções de Sistema de macro. Eles podem incluir várias bibliotecas de macro, dependendo dos produtos SAS licenciados em seu site. Por exemplo, para o meu SAS BASE de instalação automática de chamada de biblioteca de macro está na seguinte pasta:
C:\Program Files\SASHome\SASFoundation\9.4\core\sasmacro
Aqui está uma lista selecionada de auto-chamada de macros fornecido com o software SAS.
do ponto de vista do uso, você não vai notar nenhuma diferença entre as funções de macro pré-construídas e auto-chamadas. Por exemplo, a função de macro %upcase() é pré-construída, enquanto a função de macro %lowcase() é a função de macro chamada automática. Eles pertencem a famílias totalmente diferentes, mas nós os usamos como se fossem irmãos complementares.
funções de macro definidas pelo Utilizador
finalmente, existem funções de macro definidas pelo utilizador que não vêm com a instalação SAS. Estas são as funções macro que você define por si só. Normalmente, eles são mantidos separadamente das macros auto-call principalmente, a fim de distingui-los de SAS fornecidos.
para permitir o acesso à sua própria biblioteca de macro SAS, para além da biblioteca de macro de chamadas automáticas (ou bibliotecas), poderá usar a opção inserir= sistema:
Opções inserir=(sasautas = “path_to_your_own_macro_ library_folder”);em vez de substituir o valor SASAUTAS, esta opção insere um valor adicional na opção SASAUTAS existente como o primeiro valor, permitindo-lhe assim aceder primeiro à sua própria macro biblioteca, e depois também a bibliotecas de auto-chamadas SAS pré-definidas.
criando a função macro definida pelo utilizador
vamos considerar o seguinte exemplo. Suponha que queremos criar uma função macro que tome um nome de conjunto de dados como um argumento e retorne um valor igual ao número de observações nesse conjunto de dados.
We know that the following code calculates the number of observations in a data set:
data _null_; call symputx('NOBS',n); stop; set SASHELP.CARS nobs=n; run; %put &=NOBS;NOBS=428
Can we create a SAS macro function by enclosing this code into macro? Algo como:
%macro nobs(dset=resultado=); %global &resultado; os dados _null_; chamada symputx("&resultado",n); pare; set &dset nobs=n; executar;%mend nobs;
a resposta é “não”. Sim, nós criamos uma macro válida; podemos chamar esta macro para produzir o resultado:
%nobs(dset=SASHELP.CARS, result=NOBS);%put &=NOBS;NOBS=428
mas esta não é uma função macro. Lembra-se da macro tipo 2 que não gera nenhum código de linguagem de programação SAS, apenas um valor? Mas esta macro gera código SAS que atribui um valor à variável macro especificada como o segundo argumento (resultado=NOBS).
A fim de criar uma função macro válida, nossa macro não deve ter nenhum código de linguagem SAS nele – nem um passo de dados, nem um passo PROC. Só pode ser constituído pelo código da macro linguagem SAS. Aqui está ele:
%macro nobs(dset); %local dsid n; %let dsid = %sysfunc(aberto(&dset)); %se &dsid %então %não; %let n = %sysfunc(attrn(&dsid,nlobs)); %let dsid = %sysfunc(close(&c)); %end; %else %colocá %sysfunc(sysmsg()); &n%mend nobs;
Quando a macro processador executa esta macro, o único objeto que é passado para o SAS compilador de linguagem é o valor mostrado na linha imediatamente antes do %mend. Este é o valor calculado do número de observações (denotado por &n ). Esta é a única coisa que é visível pelo compilador de linguagem SAS, o resto é o código de linguagem macro visível e sendo manipulado pelo processador de macro SAS.importante: Ao definir a função de macro SAS use sempre a declaração %local para listar todas as variáveis de macro que são criadas na sua macro para garantir que elas não sobrepõem acidentalmente variáveis de macro com o mesmo nome no ambiente de chamada. Você não precisa declarar %local para os parâmetros de macro, uma vez que eles são sempre Locais automaticamente.
funções de macro SAS exemplos de Utilização
quando uma função de macro é definida desta forma, onde quer que coloque a sua invocação %nobs(SASHELP.CARS) no seu código SAS será avaliado e substituído pelo valor correspondente (neste caso é o número 428) pelo processador SAS macro. Dessa forma, você pode evitar um hard-coding inferior e tornar o seu código SAS dinâmico e poderoso. Você pode usar funções de macro em muitos contextos de codificação SAS. Por exemplo:
- Assignment statements for macro variable: %let NOBS=%nobs (SASHELP.CARS);
- Assignment statement in a DATA step: x = %nobs (SASHELP.CARS);
- Como parte de uma expressão em um passo de dados: x = %nobs (SASHELP.CARS) / 2 + 3;
- como valor de um ciclo de dados: i=1 a %nobs (SASHELP.CARS);
- Como um valor de um laço macro do: %do &i=1% a %nobs(SASHELP.CARS);
- Como parte da condição em IF statement: if %nobs (SASHELP.CARS) > 500 then do;
e assim por diante. É importante notar que os argumentos (parâmetros) para as funções de macro devem ser constantes SAS ou expressões de macro que resolvam as constantes SAS. Uma vez que as funções de macro são resolvidas pelo processador de macro antes da execução do programa SAS, os argumentos não podem ser nomes de variáveis. Esta é a principal diferença entre funções de macro e funções SAS.o que pensa?
considera este post útil? Usa funções macro SAS? Pode sugerir outros exemplos de Utilização? Por favor, compartilhe conosco nos comentários abaixo.