Estou tentando chamar outra macro para cada elemento em uma matriz. Esta é uma descrição mais fácil do mesmo problema. Eu esperaria que a macro imprima cada var em outra linha, mas isso não acontece. Porque? Como isso pode ser consertado?
%macro test(varlist);
%local var i ;
%do i = 1 %to %sysfunc(countw(&varlist)) ;
%let var = %scan(&varlist,&i) ;
%put looped var is &var;
%end ;
%mend test;
%test(var1 var2 var3)
A macro SAS não contém uma estrutura de matriz. No entanto, no SAS Macro, uma sequência textual que descreve uma lista de itens delimitados pode ser processada de maneira semelhante a uma matriz. Os itens descritos podem representar outras coisas que podem ser posteriormente utilizadas ou emitidas como código-fonte para processamento posterior.
O código postado registra uma linha por item na lista separada por espaço do que você está chamando de nomes de variáveis.
SAS Log
1 %macro test(varlist);
2 %local var i ;
3 %do i = 1 %to %sysfunc(countw(&varlist)) ;
4 %let var = %scan(&varlist,&i) ;
5 %put looped var is &var;
6
7 %end ;
8 %mend test;
9
10 %test(var1 var2 var3)
looped var is var1
looped var is var2
looped var is var3
Para o caso de código, especialmente código de macro, sem registrar informações quando esperado, provavelmente há outras instruções de programação que estão incorretas e alterando o estado esperado. Você pode ter aspas desequilibradas que estão fazendo com que o código-fonte da macro seja considerado parte de outra etapa. Às vezes, quando o executor não pode ser retornado ao estado 'pronto' adequado, reiniciar a sessão SAS é o melhor curso de ação.
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras