Atualização condicional
Estratégia 1
data BASE_PAINEL_MPE_PONTO_BB_IND2;
set BASE_PAINEL_MPE_PONTO_BB_IND;
if periodo = 202412 and nome_acesso = 'Painel PJ' then do;
quantidade = quantidade + 1;
output;
end;
else output;
run;
proc sql;
insert into BASE_PAINEL_MPE_PONTO_BB_IND2 (periodo, nome_acesso, quantidade)
select periodo, nome_acesso, quantidade
from PAINELPJ_ACESSOS
where not exists (
select 1
from BASE_PAINEL_MPE_PONTO_BB_IND
where periodo = 202412 and nome_acesso = 'Painel PJ'
);
quit;
Estratégia 2
proc sql;
update BASE_PAINEL_MPE_PONTO_BB_IND2
set quantidade = (select quantidade from PAINELPJ_ACESSOS)
where periodo = 202412
and nome_acesso = (select nome_acesso from PAINELPJ_ACESSOS);
/* Verifica se a atualização afetou alguma linha */
%let rc = &sqlobs;
/* Se nenhuma linha foi atualizada, insere uma nova linha */
%if &rc = 0 %then %do;
insert into BASE_PAINEL_MPE_PONTO_BB_IND2 (periodo, nome_acesso, quantidade)
values (202412, 'Painel PJ', 123);
%end;
quit;
Estratégia 3
/* Primeiro, verifique se o registro existe */
proc sql noprint;
select count(*) into :record_exists
from BASE_PAINEL_MPE_PONTO_BB_IND2
where periodo = (select periodo from PAINELPJ_ACESSOS)
and nome_acesso = (select nome_acesso from PAINELPJ_ACESSOS);
quit;
%put &=record_exists;
/* Se o registro existir, atualize-o */
%if &record_exists > 0 %then %do;
proc sql;
/* update BASE_PAINEL_MPE_PONTO_BB_IND*/
/* set quantidade = 100*/
/* where periodo = 202412 and nome_acesso = 'Painel PJ';*/
quit;
%end;
/* Caso contrário, insira um novo registro */
%else %do;
proc sql;
insert into BASE_PAINEL_MPE_PONTO_BB_IND2 (periodo, nome_acesso, quantidade)
select periodo, nome_acesso, quantidade
from PAINELPJ_ACESSOS
/* where not exists (*/
/* select 1*/
/* from BASE_PAINEL_MPE_PONTO_BB_IND2*/
/* where periodo = (select periodo from PAINELPJ_ACESSOS) */
/* and nome_acesso = select nome_acesso from PAINELPJ_ACESSOS*/
/* )*/
;
quit;
%end;