BookmarkSubscribeRSS Feed
Henriquemont
Fluorite | Level 6
Pessoal, espero que estejam bem
Uma duvida, queria saber como eu posso fazer um calculo entre Linhas da mesma coluna, segue exemplo abaixo:

Coluna 1. Coluna 2
Receita. 1.000
Despesa. 500

Queria agora Fazer um calculo entre as duas Linhas e trazer um terceira linha chamando ela de TOTAL

ficando assim

Coluna 1. Coluna 2
Receita. 1.000
Despesa. 500
TOTAL. 500

Depois eu faria uma outra linha na sequencia tipo IMPOSTO de 10%

Coluna 1. Coluna 2
Receita. 1.000
Despesa. 500
TOTAL. 500
IMPOSTO (500*10%)

Seria possivel Fazer esse calculo entre Linhas da mesma coluna?

Obrigado desde ja pela ajuda e atencao!!

5 REPLIES 5
Patrick
Opal | Level 21

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).

wilkoba
SAS Employee

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.

wilkoba_0-1692624364149.png

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.

wilkoba_1-1692625666334.png

 

Sucesso na sua programação SAS. E espero ter ajudado

 

Henriquemont
Fluorite | Level 6
Pessoal, obrigado desde ja pela ajuda
Li o material sugerido mas nao consegui evoluir aqui, entao melhorei a minha explicacao pra saber se ainda conseguem me ajudar
( Coloquei uma imagem em anexo pra melhor explicar e ilustrar )

Se puderem ajudar denovo fico grato 😉
wilkoba
SAS Employee

@Henriquemont ,

 

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".

 

 

 

RxJunior
Fluorite | Level 6

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.