Pessoal, Bom dia!
Estou tentando concatenar as linhas de uma variável de meu dataset, semelhante ao uso do STRING_AGG no SQL.
EX:
| variável |
|Valor 1 |
|Valor 2 |
|Valor 3 |
|Valor x |
Para
| Nova Variavel |
|Valor 1, Valor 2, Valor 3, Valor x|
@RxJunior, bom dia.
Veja se é isso que vc precisa:
data tabela1;
format NOME $60.;
infile datalines delimiter=',';
input NOME;
datalines;
MARIA
JÚLIA
JOÃO
MARCOS
;
run;
data concat;
set tabela1;
format concatenacao $char100.;
retain concatenacao;
concatenacao = compress(nome) || ", " || concatenacao;
run;
Não é essa solução que procuro.
Para Exemplificar melhor... o que eu preciso é ...
Cliente | Data_Compra |
Jose | 01/02/2022 |
Jose | 01/03/2022 |
Jose | 01/04/2022 |
Jose | 01/05/2022 |
para...
Cliente | Data_Compras |
Jose | 01/02/2022 , 01/03/2022, 01/04/2022, 01/05/2022 |
@RxJunior, a ideia seria essa mesma, porém com algumas adatações que fiz agora que detalhou melhor o problema.
Segue a solução:
data tabela1;
format CLIENTE $60. DATA_COMPRAS $10.;
infile datalines delimiter=',';
input CLIENTE DATA_COMPRAS;
datalines;
JOSE,01/02/2022
MARIA,02/02/2022
JOSE,01/03/2022
MARIA,02/03/2022
JOSE,01/04/2022
MARIA,02/04/2022
JOSE,01/05/2022
MARIA,02/05/2022
;
run;
proc sort data= tabela1; by CLIENTE; run;
data concat;
set tabela1;
format DATA_COMPRAS_CONCAT $char100.;
retain DATA_COMPRAS_CONCAT;
if first.CLIENTE then DATA_COMPRAS_CONCAT = '';
by CLIENTE;
DATA_COMPRAS_CONCAT = compress(DATA_COMPRAS) || ", " || DATA_COMPRAS_CONCAT;
if last.CLIENTE;
drop DATA_COMPRAS;
run;
Oi tudo bem?
Se importa de me tirar uma dúvida? Nessa resposta que vc deu, ficou um triângulo conforme foi concatenando, sendo a ultima linha, a mais completa. Que alterações eu deveria fazer para que esse valor da ultima linha subisse para as demais?
exemplo:
em vez de
jesus jesus
maria jesus maria
josé jesus maria josé
gostaria de
jesus jesus maria josé
maria jesus maria josé
josé jesus maria josé
Boa tarde RxJunior,
tive um desafio parecido e criei uma macro que faz quase isso.
Você pode alterar para atender sua necessidade.
%macro tab_group_concat(tabSAS, tabSaida, coluna);
proc sql;
select name into :col separated by ' '
from dictionary.columns
where libname = "WORK"
AND memname= "&tabSAS" and name<>"&coluna";
select name into :colf separated by ', '
from dictionary.columns
where libname = "WORK"
AND memname= "&tabSAS" and name<> "&coluna" ;
select catx(' ', "&coluna") into :colvar
from dictionary.columns
where libname = "WORK"
AND memname= "&tabSAS" and name<> "&coluna";
quit;
proc sql;
create table ordenado_temp as
select * from &tabSAS order by &colf;
quit;
%put &col;
%put &colf;
%put &colvar;
%let col = &col;
%let colf = &colf;
%let colvar = &colvar;
proc transpose data=ordenado_temp out=temp_mcr name=tipo prefix=col;
by &col;
var &colvar;
run;
data temp_mcr1;
set work.temp_mcr;
if tipo = "&colvar" then
do;
new_var = CATX(", ", OF col:);
end;
run;
proc sql;
CREATE TABLE &tabSaida as
select t1.*
from (select distinct &colf, new_var as &coluna from temp_mcr1
group by &colf) as t1
where t1.&coluna <> '';
quit;
%mend tab_group_concat;
data test;
Cliente='Jose'; Data_Compra='01/02/2022';output;
Cliente='Jose'; Data_Compra='01/03/2022';output;
Cliente='Jose'; Data_Compra='01/04/2022';output;
Cliente='Jose'; Data_Compra='01/05/2022';output;
run;
%tab_group_concat(TEST, TESTE, Data_Compra);
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!