Olá pessoal, alguém saberia me informar se há como debugar código no SAS Studio usando a plataforma OnDemand? Estou tentando escrever um código, mas só gera erro no log. Na pasta "CSV_FILES" tem dois arquivos simples que criei para testar: base_teste_202001 e base_teste_202012.
Estou tentando carregar uns arquivos de forma automática, onde cada arquivos se chama, respectivamente, base_teste_202001 até.. 202012. No curso "Programming I Essentials" não aborda esse assunto, mas estou tentando entender de forma autodidata.
Alguém saberia e poderia me ajudar nessa questão? Segue código e arquivos para fazer os mesmos testes que fiz e entender onde estou errando.
Desde já agradeço!
LIBNAME CSVFILE "FILEPATH/CSV_FILES"; %MACRO CSVFILE(MYFILE); %DO I = 1 %TO 12; PROC IMPORT DATAFILE="FILEPATH/CSV_FILES/&MYFILE..csv" OUT=CSVFILE.&MYFILE REPLACE DBMS=CSV; GETNAMES=YES; RUN; %IF &I < 10 %THEN %DO %CSVFILE(base_teste_2020&CATT("0", &I)); %ELSE %DO %CSVFILE(base_teste_2020&I); %END; %END; %MEND CSVFILE;
SAS Log
426 %MACRO CSVFILE(MYFILE); 427 %DO I = 1 %TO 12; 428 429 PROC IMPORT DATAFILE="FILEPATH/CSV_FILES/&MYFILE..csv" 430 OUT=CSVFILE.&MYFILE REPLACE 431 DBMS=CSV; 432 GETNAMES=YES; 433 RUN; 434 435 %IF &I < 10 %THEN %DO 436 %CSVFILE(base_teste_2020&CATT("0", &I)); ERROR: An unexpected semicolon occurred in the %DO statement. ERROR: A dummy macro will be compiled. 437 %ELSE %DO ERROR: There is no matching %IF statement for the %ELSE. 438 %CSVFILE(base_teste_2020&I); ERROR: An unexpected semicolon occurred in the %DO statement. 439 %END; 440 %END; 441 442 %MEND CSVFILE;
Use PUTN() to add leading zeros. Put the IMPORT step inside the %DO loop.
Use PUTN () para adicionar zeros à esquerda. Coloque a etapa IMPORT dentro do loop %DO.
%let path=FILEPATH/CSV_FILES;
LIBNAME CSVFILE "&path";
%macro csvfile(prefix);
%local month myfile;
%do month=1 %to 12 ;
%let myfile=&prefix.%sysfunc(putn(&month,z2.));
* import &myfile ;
PROC IMPORT DATAFILE="&path/&MYFILE..csv"
OUT=CSVFILE.&MYFILE REPLACE
DBMS=CSV
;
GETNAMES=YES;
RUN;
%end;
%mend csvfile;
%csvfile(base_teste_2020)
SAS Log
426 %MACRO CSVFILE(MYFILE); 427 %DO I = 1 %TO 12; 428 429 PROC IMPORT DATAFILE="FILEPATH/CSV_FILES/&MYFILE..csv" 430 OUT=CSVFILE.&MYFILE REPLACE 431 DBMS=CSV; 432 GETNAMES=YES; 433 RUN; 434 435 %IF &I < 10 %THEN %DO 436 %CSVFILE(base_teste_2020&CATT("0", &I)); ERROR: An unexpected semicolon occurred in the %DO statement. ERROR: A dummy macro will be compiled. 437 %ELSE %DO ERROR: There is no matching %IF statement for the %ELSE. 438 %CSVFILE(base_teste_2020&I); ERROR: An unexpected semicolon occurred in the %DO statement. 439 %END; 440 %END; 441 442 %MEND CSVFILE;
Use PUTN() to add leading zeros. Put the IMPORT step inside the %DO loop.
Use PUTN () para adicionar zeros à esquerda. Coloque a etapa IMPORT dentro do loop %DO.
%let path=FILEPATH/CSV_FILES;
LIBNAME CSVFILE "&path";
%macro csvfile(prefix);
%local month myfile;
%do month=1 %to 12 ;
%let myfile=&prefix.%sysfunc(putn(&month,z2.));
* import &myfile ;
PROC IMPORT DATAFILE="&path/&MYFILE..csv"
OUT=CSVFILE.&MYFILE REPLACE
DBMS=CSV
;
GETNAMES=YES;
RUN;
%end;
%mend csvfile;
%csvfile(base_teste_2020)
This solution worked. Thank you very much. Now I go to study this code.
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!