SAS: erro de procedimento de macro na etapa de dados

Giuseppe

Não consigo encontrar a solução para este erro. Tentei usign% eval,% sysfunc e% sysevalf, sem sucesso. O que é necessário para avaliar corretamente o "& definir" na macro?

%macro set_istituzionale(set=, varout=);
  %if &set/100 = 1 %then &varout = 'AP';
%mend set_istituzionale;

data soff2; set soff; %set_istituzionale(set=setcon,varout=set); run;

ERROR: A character operand was found in the %EVAL function or %IF condition where a numeric operand is required. The condition was:
       &set/100 = 1
ERROR: The macro SET_ISTITUZIONALE will stop executing.
Estado

A lógica por trás de sua macro está errada.

Você está chamando essa macro dentro de uma etapa de dados, então essa macro deve conter algo (uma instrução) que pode ser resolvida dentro da etapa de dados.

If-else não será escrito em linguagem macro, mas em linguagem normal de datastep.

%macro set_istituzionale(set=, varout=);
  if &set/100 = 1 then &varout = 'AP';
%mend set_istituzionale;

agora, se você usar sua chamada, terá sua etapa de dados resolvida desta forma:

data soff2; 
set soff;
%set_istituzionale(set=setcon,varout=set);
run;

vai se tornar:

data soff2; 
set soff;
if setcon/100 = 1 then set = 'AP';
run;

Em seu código, você estava usando código de macro, então sua etapa foi resolvida internamente para a instrução booleana macro% if & set / 100 resolveu% if setcon / 100 onde setcon era uma string (aqui estamos falando condicionalmente com linguagem de macro, escrevendo o nome de a variável não capturará o valor da variável porque é completamente independente do passo de dados).

Você deve pensar em linguagem de macro apenas para algo que possa escrever código para você, por exemplo, algo como sua primeira tentativa poderia ser usado para inserir uma instrução condicionalmente ao valor de uma variável de macro como:

data try;
set want;

%if &macrovar=A %then %do;
if var1=1 and var2='B' then var3='C';
%end;

%if &macrovar=B %then %do 
if var1=2 and var2='A' then var3='D';
%end;

run;

when the macro variable macrovar will be = A the step will be:

data try;
set want;
if var1=1 and var2='B' then var3='C';
run;

if the macro variable macrovar will be = B the step will be:

data try;
set want;
if var1=2 and var2='A' then var3='D';
run;

Mas você também pode usar código de macro fora da etapa de dados, por exemplo, para executar uma etapa de dados ou outra coisa condicionalmente ao valor de uma variável de macro:

%if &macrovar=A %then %do;

data try; set tr;
some code;
run;

%end;

%else %if &macrovar=B %then %do;

proc sort data=tr out=try nodupkey; by var1; run;

%end;

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Fazendo referência à variável MACRO global de uma etapa de dados para um procedimento proc no SAS

SAS: Utilizando variáveis macro como números na etapa de dados

Chamar macro dinamicamente a partir da etapa de dados sas

Como usar uma macro SAS dentro da etapa de dados

Compreender um loop implícito na etapa de dados SAS

SAS quando usar OUPUT na etapa de dados

O que a barra / faz na etapa de dados do SAS?

E comercial (&) não funciona na etapa de dados SAS

SAS: macro de chamada de dentro de um loop de etapa de dados

Funções macro SAS fora do bloco macro ou etapa de dados

Existe uma maneira de resolver instantaneamente a variável macro criada em uma etapa de dados na mesma etapa de dados?

Atribuir uma variável macro SAS com aspas a uma etapa de dados var

Como posso adicionar mais de 1 linha para uma linha na etapa de dados do SAS

SAS como operador na etapa de dados não está funcionando

Como usar uma variável na etapa de dados sem incluí-la como uma coluna no SAS

Curinga para uma instrução if else na etapa de dados sas

no SAS, é possível declarar 2 tabelas hash na mesma etapa de dados?

Como classificar dados usando a etapa de dados no SAS

Loop de macro SAS por data, como indicar a etapa correta?

Execução de macro dentro da etapa de dados

Escrevendo a função Ackermann em uma etapa de dados SAS

Variáveis macro dentro da etapa de dados

Erro ao inserir dados com procedimento armazenado na tabela com chave primária de identidade compartilhada

Removendo dados perdidos na etapa de dados com do loop

declaração de atualização na etapa de dados

Loop de macro SAS para percorrer conjuntos de dados na instrução Set

Macro SAS para anexar conjuntos de dados com base no nome do conjunto de dados na biblioteca de trabalho

Erro na tabela de dados

CAT vs CATS na etapa de dados do loop

TOP lista

quentelabel

Arquivo