Se você pretende criar uma tabela, é melhor adicionar colunas adicionais em vez de linhas. Se você está buscando gerar um relatório, considere usar uma ferramenta como Proc Report.
(above translated from English via chatGPT).
Ola @Henriquemont,
É possível utilizar o SAS Language para procedimentos transacionais do tipo OLTP (On-line Transacional Processing) conforme você deseja, embora o SAS Language seja voltado para OLAP (ON-line Analytical Processing). Segue um exemplo de código que faz o que está procurando utilizando o DATA-STEP e você poderia também utilizar de PROC SQL para fazer isso.
5 Simple Ways to Insert a Row into a SAS Dataset - SAS Example Code
data contab;
input tipo $ valor;
datalines;
receita 700
despesa 500
;
run;
proc sort data=contab;
by descending tipo;
run;
data contab;
set contab end=eof;
by descending tipo;
retain total 0;
total = lag1(valor)-valor;
output;
if eof then do;
tipo = "TOTAL";
valor = lag1(total);
output;
end;
run;
data contab;
set contab end=eof;
if tipo="TOTAL" then valor=total;
output;
run;
data contab;
set contab end=eof;
output;
if eof then do;
tipo = "Imposto";
total = lag1(total);
output;
end;
run;
data contab (drop=total);
set contab;
if tipo="Imposto" then valor=valor*0.1;
run;
E o resultado, imagino que seja o, desejado logo abaixo.
Como verá no código abaixo caso queira utilizar Data-Step é necessário a utilização da declaração RETAIN, da função LAG e tem também o END=eof na declaração SET;
Outra forma que pensei faça mais sentido, é verificar que as entradas de receita e despesa sejam por item contábil e você pode utilizar um PROC TRANSPOSE para transpor estes valores. Segue um código exemplo:
data contab;
input item $ tipo $ valor;
datalines;
VendasXYZ receita 700
VendasXYZ despesa 300
;
run;
proc sort data=contab;
by tipo;
run;
PROC TRANSPOSE data=contab out=contab1;
by item;
id tipo;
var valor;
run;
data contab1 (drop=_NAME_);
set contab1;
total = receita-despesa;
imposto = (receita-despesa)*0.1;
run;
O resultado ficará como você deseja, porém em cada linha terá seu total e imposto por item.
Sucesso na sua programação SAS. E espero ter ajudado
Acho que você precisa ter uma coluna adicional para resolver tal cálculo, por exemplo, tipo_operacao, para saber se está fazendo uma operação de crédito, débito, etc. com isto você conseguir colocar os valores acumulados em seus devidos lugares e no final realizar operação final de subtrair os débitos dos créditos para sua margem líquida.
Pelo seu exemplo, somente pela descrição, na vida real pode incorrer a erros, pois existem descrições que serão iguais sendo débito ou c´redito. Na hora de compor do relatório depois você "esconde" a coluna "tipo_operacao".
Para tratamento dos dados, eu converteria cada linha em coluna, isso vai facilitar o entendimento e tratamento, depois de realizados os cálculos necessários, é possível montar o relatório.
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!