Vamos supor que você tenha um código que crie diversas bases diferentes, e no fim dele você deseja empilhar todas elas. Normalmente, você poderia simplesmente empilhar as bases com um data step tradicional:
data base_final;
set base_1
base_2
base_3
...
run;
Até que é tranquilo. Porém, você precisariar criar um passo a mais, o que deixaria tudo menos automatizado. Além de ter que ficar digitando na mão, correndo o risco de esquecer o que está fazendo.
O mais fácil é utilizar um comando do SAS que “apenda” as bases. Ou seja, um comando que pega a primeira base e vai acrescentando as demais.
Este comando é o proc append.
Basicamente, o comando vai empilhando as bases que são geradas. Veja alguns exemplos de códigos que ficam úteis com o comando:
1) Código que vai numa base maior para uma data específica, filtra os clientes de uf = MG, e vai empilhando as bases só com MG. Cada base nova gerada vai sendo colocada abaixo das anteriores, formando assim uma base final com todos os arquivos importados juntos. Utilizo a variável dt_ref como sendo a data de referência.:
%macro importa_mg(dt_ref);
/*filtra clientes mg*/
data tabela_mg_&dt_ref.;
set tabela_origem_&dt_ref.;
if uf = "MG";
run;
/*gera base final e anexa todas*/
proc append base= base_final data= tabela_mg_&dt_ref.;
run;
%mend;
Para gerar uma tabela com clientes das datas 20180101, 20180102 e 20180103:
%importa_mg(20180101);
%importa_mg(20180102);
%importa_mg(20180103);
2) Macro que importa diversas bases em .txt: a macro busca o arquivo, trata o campo CPF e gera um output. Cada base nova gerada vai sendo colocada abaixo das anteriores, formando assim uma base final com todos os arquivos importados juntos:
%macro importa_txt(base_importada);
proc import out = base_importada
datafile = "/diretorio/&base_importada..txt"
DBMS = TAB REPLACE; delimiter='|' ;
run;
DATA base_importada_2;
sysecho "trata cpf de &base_importada.";
SET base_importada;
length cpf $11.;
cpf = PUT(cpf, Z11.);
RUN;
proc append base=base_final data= base_importada_2;
sysecho "apenda &base_importada.";
run;
%mend();
Para importar as bases, basta utilizar a macro do exemplo (1), porém, neste caso deve utilizar o nome do arquivo txt:
%importa_txt(nome_do_arquivo_1);
%importa_txt(nome_do_arquivo_2);
%importa_txt(nome_do_arquivo_3);
Se quiser dar um up para sua macro, utilize o SYSECHO. Com ele, você pode acompanhar em que passo está a execução:
%macro importa_mg(dt_ref);
/*filtra clientes mg*/
data tabela_mg_&dt_ref.;
sysecho "data set para &dt_ref.";
set tabela_origem_&dt_ref.;
if uf = "MG";
run;
/*gera base final e anexa todas*/
proc append base= tabela_final data= tabela_mg_&dt_ref.;
sysecho "anexa &dt_ref.";
run;
%MEND;
Se este post te ajudou de alguma forma, curte o link ou deixe um comentário. E se tiver outros amigos que trabalham com esse material, não deixe de compartilhar com eles o site. Obrigado.