ola @reehfarias ,
Modifiquei seu código (veja abaixo), não sei se seria o resultado que esperado, mas imagino, o que você esta querendo fazer precise estudar um pouco de MACRO SAS. Espero que tenha ajudado, embora acho que não tenha chegado ao resultado que você esperava.
Abraços.
---código que modifiquei---
/* Defina a variável data como a data atual */ data _null_; call symput('data_dia_util',today()); /* CRIEI COMO VARIAVEL MACRO */ run;
/* Defina a lista de feriados */ data feriados; input feriado; format feriado date9.; informat feriado date9.; /* USEI INFORMAT PARA QUE A LEITURA FUNCIONASSE */ datalines; 01JAN2023 15APR2023 21APR2023 01MAY2023 30MAY2023 09JUN2023 07SEP2023 12OCT2023 02NOV2023 15NOV2023 25DEC2023 ; run;
/* Calcule a data do último dia útil */ data _null_; /* Subtraia 1 dia da data atual */ set feriados; %let data_dia_util = %eval(&data_dia_util-1); /* NOVAMENTE %let e %eval é SAS MACRO */
/* Enquanto a data não for um dia útil, subtraia 1 dia */ do while(weekday(&data_dia_util) in (1,7) or feriado=&data_dia_util); /* No loop aqui, uso macro substituição */ %let data_dia_util = %eval(&data_dia_util-1); /* NOVAMENTE %let e %eval é SAS MACRO */ end;
/* Exiba a data do último dia útil */ x=put(&data_dia_util,date9.); y=put(x,$10.); call symput('nome_tabela','tabela_' || y); /* gerei varíavel macro o nome da sua tabela, aproveitando o mesmo data step*/ put x;
run;
/* Cria tabela vazia com nome tabela_aaaammdd */ data &nome_tabela; /* fazendo a macro substituição */
run;
... View more