Hi all,
I have the following code that update the strings stored in a column,
it is working correctly however i'd like to perfor better.
proc import
datafile="/Path/EventosFrases.xlsx"
out=FrasesAux
dbms=xlsx
replace;
sheet="Frases";
getnames=yes;
run;
data remov;
set FrasesAux;
frase=tranwrd(frase,"'","");
run;
%global str_update_
dt_max
num
num_id
id
idevento
update
i;
data test;
length idevento 3 frase $ 160;
input idevento frase;
cards;
2 fasffsdhfh
2 fshsfdh
3 frhdsfhgfjk
5 erwyfdhgfj
7 hfdh
7 hgdjtydkul
8 thutruili
8 utrhfghgfh
;
run;
%macro seleciona();
proc sql;
select count(distinct(idevento)) into :idevento from remov;
select distinct(idevento) into :idevento_dis_1-:idevento_dis_%cmpres(&idevento.) from remov;
select frase into :str_update_1-:str_update_%cmpres(&idevento.)
from remov;
quit;
data full(rename=(frase2=frase));
length frase2 $ 160;
set test;
%do i = 1 %to &idevento.;
%let update1=str_update_&&i.;
%let id1 = idevento_dis_&&i.;
if idevento = &&&id1. then frase2 = tranwrd("&&&update1","<var1>","Cli_Name");
output;
%put &&&update1. &&&id1.;
%end;
drop frase;
run;
proc sql;
select distinct * from full
where frase is not missing;
drop table full;
quit;
%mend;
%seleciona();
Where the part of %do loop runs, it create or duplicates a bunch of lines to the full table.
I'd like to stop this, because this is only a test, but this query will run with larger tables, if this duplicates keep happening this could exceed the Memory size.
How can i solve this ?
Thanks in Advance
... View more