BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
marceloleme
Fluorite | Level 6

Boa noite comunidade, preciso de ajuda.

 

Estou utilizando o SAS Guide 8.3, tenho um arquivo de entrada (SAS) que essencialmente tem as seguintes colunas:

 

Vendedor   Venda

João            1000

João              800

João              700

João              600

João              500

João              400

Amanda       2000

Amanda       1900

Amanda       1800

Amanda       1700

Amanda       1600

Carolina       6000

Carolina       5000

Carolina       4000

Carolina       3000

 

A partir desse arquivo de entrada preciso gerar um arquivo de saída (CSV) que contenha as 3 melhores vendas de cada vendedor, nesse exemplo o arquivo de saída ficaria assim:

Vendedor   Venda

João            1000

João              800

João              700

Amanda       2000

Amanda       1900

Amanda       1800

Carolina       6000

Carolina       5000

Carolina       4000

 

Agradeço a comunidade.

1 ACCEPTED SOLUTION

Accepted Solutions
OliveiraMiguelZ
Obsidian | Level 7

 

 

Fala, Amigo!

 

Provavelmente seu arquivo de entrada é um excel, então aqui está um exemplo de como importá-lo para o Guide.

PROC IMPORT
      DATAFILE   = "CaminhoDoSeuArquivo.xlsx"
      DBMS = EXCEL
      OUT = work.TabelaDestino
      REPLACE
      ;
RUN;

Já para gerar a lista como pediu, o método mais simples é utilizar SQL, mas em SAS BASE mesmo, você consegue da seguinte forma:

* 1 -> Ordenar tabela;
PROC SORT DATA=TabelaDestino OUT=work.TabelaDestino_Ordenada;
     BY DESCENDING Vendedor Venda;
RUN;

* 2 -> Gerar tabela com as três melhores vendas de cada;
DATA work.TabelaFinal;
SET work.TabelaDestino_Ordenada;

*Cria as variáveis temporárias first. e last. para o vendedor;
BY Vendedor Venda;

*Cria um contador e zera ele para cada novo vendedor;
IF first.Vendedor THEN Contagem = 0;
Contagem+1;

*Condiciona o output às três primeiras ocorrências;
IF Contagem IN(1,2,3) THEN OUTPUT;

RUN;

Por fim, você pode exportar o resultado utilizando o proc export da mesma forma que foi feito com o proc import. Alternativamente, você pode utilizar o DATA _NULL_:

 

* Cria um step vazio;
DATA _NULL_;

* Define o arquivo a ser escrito;
FILE "NomeDestino.csv";

* Puxa os dados que você quer
SET work.TabelaFinal;

* Define o delimitador;
Delimitador = ",";

* Registra no arquivo destino;
PUT
     Vendedor $15.  Delimitador $1. Venda 15.2
;

RUN;

 

 

 

 

View solution in original post

2 REPLIES 2
OliveiraMiguelZ
Obsidian | Level 7

 

 

Fala, Amigo!

 

Provavelmente seu arquivo de entrada é um excel, então aqui está um exemplo de como importá-lo para o Guide.

PROC IMPORT
      DATAFILE   = "CaminhoDoSeuArquivo.xlsx"
      DBMS = EXCEL
      OUT = work.TabelaDestino
      REPLACE
      ;
RUN;

Já para gerar a lista como pediu, o método mais simples é utilizar SQL, mas em SAS BASE mesmo, você consegue da seguinte forma:

* 1 -> Ordenar tabela;
PROC SORT DATA=TabelaDestino OUT=work.TabelaDestino_Ordenada;
     BY DESCENDING Vendedor Venda;
RUN;

* 2 -> Gerar tabela com as três melhores vendas de cada;
DATA work.TabelaFinal;
SET work.TabelaDestino_Ordenada;

*Cria as variáveis temporárias first. e last. para o vendedor;
BY Vendedor Venda;

*Cria um contador e zera ele para cada novo vendedor;
IF first.Vendedor THEN Contagem = 0;
Contagem+1;

*Condiciona o output às três primeiras ocorrências;
IF Contagem IN(1,2,3) THEN OUTPUT;

RUN;

Por fim, você pode exportar o resultado utilizando o proc export da mesma forma que foi feito com o proc import. Alternativamente, você pode utilizar o DATA _NULL_:

 

* Cria um step vazio;
DATA _NULL_;

* Define o arquivo a ser escrito;
FILE "NomeDestino.csv";

* Puxa os dados que você quer
SET work.TabelaFinal;

* Define o delimitador;
Delimitador = ",";

* Registra no arquivo destino;
PUT
     Vendedor $15.  Delimitador $1. Venda 15.2
;

RUN;

 

 

 

 

marceloleme
Fluorite | Level 6
Miguel muitíssimo obrigado pela resposta, funcionou perfeitamente.

hackathon24-white-horiz.png

2025 SAS Hackathon: There is still time!

Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!

Register Now

Discussion stats
  • 2 replies
  • 1212 views
  • 4 likes
  • 2 in conversation